2014-04-17 101 views
4

編輯:我回答了我自己的問題,請參閱下面的編輯。將參數從php傳遞給casperjs/phantomjs

原文: 我有我的網絡服務器上安裝phantomjs和casperjs,他們都運行良好。我正在計劃在我的網站上創建用戶輸入的腳本,然後將其傳遞給casperjs腳本。 在擺弄了一下之後,我發現我陷入了用戶輸入的基本任務。如何將變量從php傳遞給casperjs?

請注意,以下僅僅是測試腳本。

我的PHP腳本

$user_input = $_POST['user_input']; 

putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs"); 
exec('/usr/local/bin/casperjs hello.js 2>&1',$output); 
print_r($output); 

hello.js

var user_input = "http://example.com/"; 
var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'error', 
    pageSettings: { 
    loadImages: false, 
    loadPlugins: false 
    } 
}); 

casper.start(user_input, function() { 
    this.echo(this.getTitle()); 
}); 

casper.run(); 

所以,我怎麼會通過$ USER_INPUT到hello.js。我的目標是用戶可以輸入一個正在被抓取的網址。

+2

您可以張貼的答案, '答案',並接受它。這是做到這一點的正確方法。 – Harikrishnan

+0

是的,請張貼爲自我回答。你的答案基本上是正確的,但使用'escapeshellarg'(即使你知道這一點,將來有人可能不會複製並粘貼你的答案)。 (例如,user_input ='; rm -rf/etc /') –

+0

我必須等待48小時,直到我能回答自己。我現在修好了。謝謝 –

回答

5

我自己找到答案。

看來phantomjs和casperjs支持命令行參數http://phantomjs.org/api/system/property/args.html

我的腳本現在看起來是這樣的。

test.php的

$user_input = $_POST['user_input']; 

putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs"); 
exec('/usr/local/bin/casperjs hello.js $user_input 2>&1',$output); 

print_r($output); 

hello.js

var system = require('system'); 
var args = system.args; 
var address = args[4]; //In my case 4 was the argument for $user_input, yours might be different, depending on your server setup. 

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: 'error', 
    pageSettings: { 
    loadImages: false, 
    loadPlugins: false 
    } 
}); 

casper.start(address, function() { 
    this.echo(this.getTitle()); 
}); 

casper.run();