我有一个CasperJS脚本,其结果需要在PHP中捕获。为此,我必须使用PHP的exec()
或shell_exec()
函数。但最近我知道在服务器上启用命令行执行存在风险且不安全。那么如何在不使用PHP中的任何一个函数的情况下运行我的CasperJS脚本呢?
PS : 更准确地说,如何在Web浏览器上使用CasperJS,例如使用PHP处理Web表单并返回从CasperJS派生的输出而不触及exec或shell_exec来执行它。
答案 0 :(得分:1)
CasperJS建立在PhantomJS(或SlimerJS)之上。它可以使用PhantomJS提供的所有功能,包括Web Server Module。我们的想法是运行一个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/");
需要注意的事项:
答案 1 :(得分:0)
你做平常的小广场舞。
如果你这样做是因为你知道你的应用中有exec()
暴露的攻击向量,并且无法忍受 - 那没关系。
但如果你这样做是因为你害怕“甚至不确定是什么”,那就不要了。你会让事情变得更糟。
祝你好运。