2015-04-22 95 views
0

我想在Linux Web服務器上使用PHP運行PhantomJS。這最終將作爲一個cron作業運行,但現在我通過一個PHP腳本運行它,我通過FTP上傳到服務器。與PHP服務器端運行PhantomJS

PHP腳本:

$cmd = '/usr/local/bin/phantomjs /home/accountname/public_html/myscript.js'; 
$result = exec($cmd); 
var_dump($result); 

(請注意,我在路徑已更改的帳戶名以上「ACCOUNTNAME」爲保護隱私,這是我的真實腳本正確的 - 並從無數的複製其它PHP腳本,所有工作完美)

myscript.js內容:

console.log('Hello, world!'); 
phantom.exit(); 

輸出的結果是:

string(0) "" 

我已經嘗試了很多例子來自PhantomJS網站上的我從來沒有得到任何輸出 - 無論是在屏幕上,在控制檯或爲創建截圖的PNG文件不會出現在正確的地方的例子 - 即使我正在指定確切的路徑。

我也嘗試返回PhantomJS版本和返回正確的版本:

$cmd = '/usr/local/bin/phantomjs --version'; 
$result = exec($cmd); 
var_dump($result); 

返回:

string(5) "1.9.2" 

我知道,「執行」是不是在運行PHP的東西的一種安全的方式 - 但我只是試圖測試PhantomJS的工作開始,然後我們會調整一切安全工作。

任何想法?提前致謝。

+0

這並不完全清楚。你是否直接運行myscript.js並輸出正確的字符串?你在什麼操作系統/平臺上? –

+0

那麼,myscript.js有一個PhantomJS特定的調用「phantom.exit();」但如果我直接調用JS文件,那麼它是有效的。 如果我運行包含我的原始示例中顯示的代碼的PHP,並使用cron作業運行該腳本,那麼它工作正常。它只是從導致問題的瀏覽器中執行它。 我通過運行常規的cron作業來解決問題,並更新PHP以引用充當隊列的MySQL表來傳遞JS文件,並計劃何時需要此任務。 這是託管託管服務器運行CENTOS 5.11 –

回答

0

嘗試使用:

$cmd = 'unset DYLD_LIBRARY_PATH ;'; 
$cmd.= ' /usr/local/bin/phantomjs'; //where is isntalled phantomjs 
$cmd.= ' /var/www/rasterize.js'; //where is your script 
exec($cmd.' 2>&1', $output); 
print_r($output); 

這個劇本是在Ubuntu 12.04測試與PHP 5.4。