Javascript 如何在不使用PHP exec或shell_exec的情况下运行CasperJS脚本
我有一个CasperJS脚本,其中的结果需要用PHP捕获。为此,我不得不使用PHP的Javascript 如何在不使用PHP exec或shell_exec的情况下运行CasperJS脚本,javascript,php,shell,casperjs,Javascript,Php,Shell,Casperjs,我有一个CasperJS脚本,其中的结果需要用PHP捕获。为此,我不得不使用PHP的exec()或shell\u exec()函数。但最近我了解到,在服务器上启用命令行执行是有风险的,而且不安全。那么,在不使用PHP中的任何一个函数的情况下,我应该如何运行CasperJS脚本呢 PS: 更准确地说,如何在web浏览器上使用CasperJS,比如使用PHP处理web表单,并返回从CasperJS派生的输出,而不必触摸exec或shell_exec来执行它。您可以做通常的小方块舞 运行PHP,捕获输
exec()
或shell\u exec()
函数。但最近我了解到,在服务器上启用命令行执行是有风险的,而且不安全。那么,在不使用PHP中的任何一个函数的情况下,我应该如何运行CasperJS脚本呢
PS:
更准确地说,如何在web浏览器上使用CasperJS,比如使用PHP处理web表单,并返回从CasperJS派生的输出,而不必触摸exec或shell_exec来执行它。您可以做通常的小方块舞
如果你这样做是因为你知道攻击向量“<代码>执行”(<代码)>在你的应用程序中公开,并且不能忍受这个——没关系。 但是,如果你这样做是因为你害怕“甚至不知道什么”,那么就不要这样做。你会让事情变得更糟
祝你好运。:)CasperJS构建在PhantomJS(或SlimerJS)之上。它可以使用PhantomJS提供的所有功能,包括。想法是运行一个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中,您可以使用类似的方法检索响应:
$result = file_get_contents("http://localhost:8080/");
注意事项:
- 以这样一种方式配置您的机器:运行PhantomJS的端口无法从外部访问
- 如果您使用的是cron作业方法,请编写一个pid文件以确保不启动另一个实例
- web服务器模块仅支持10个并发请求。如果您的系统超过了这些,您将需要创建一个包含多个CasperJS(PhantomJS)进程的池
- 单个CasperJS(PhantomJS)进程的页面都共享同一个会话,就像在任何普通浏览器中一样。如果您想将它们彼此隔离,那么您需要为每个请求运行CasperJS(PhantomJS)进程