[英]How to run CasperJS script without using PHP exec or shell_exec
我有一个CasperJS脚本,其中的结果需要用PHP捕获。 为此,我不得不使用PHP的exec()
或shell_exec()
函数。 但是最近我才知道在服务器上启用命令行执行是有风险的,而且并不安全。 那么,如何在不使用PHP中的任何一个函数的情况下运行CasperJS脚本呢?
PS :更准确地说,如何在Web浏览器上使用CasperJS,例如使用PHP处理Web表单并返回从CasperJS派生的输出,而无需触摸exec或shell_exec来执行它。
CasperJS基于PhantomJS(或SlimerJS)构建。 它可以使用PhantomJS提供的所有功能,包括Web服务器模块 。 这个想法是运行一个CasperJS实例,您的PHP脚本可以通过HTTP查询该实例。
您可以在系统启动时或通过cron作业(并在崩溃时重新启动)来启动CasperJS脚本。 然后,您可以通过本地http请求对其进行查询。
CasperJS脚本:
var webserver = require('webserver');
var server = webserver.create();
var service = server.listen(8080, function(request, response) {
var casper = require('casper').create({
exitOnError: false,
onError: function(msg, backtrace){
response.statusCode = 500;
response.write('ERROR: ' + msg + "\n" + JSON.stringify(backtrace));
response.close();
}
});
casper.start(yourURL, function(){
// TODO: do something
response.statusCode = 200;
response.write('something');
response.close();
}).run(function(){
// this function is necessary to prevent exiting the whole script
});
});
然后在PHP中,您可以使用诸如file_get_contents()
来检索响应:
$result = file_get_contents("http://localhost:8080/");
要注意的事情:
您进行通常的小方块舞。
如果您这样做是因为您知道exec()
在您的应用程序中暴露了什么攻击向量,并且不能忍受该攻击向量-没关系。
但是,如果您因为害怕“甚至不确定”而这样做,那就不要。 您会变得更糟。
祝好运。
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.