[英]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.