2017-03-09 59 views
1
  • ubuntu16.04 64位
  • php7.0.15
  • phantomjs2.1.1

我使用下面的命令來運行phantomJS。phantomjs PHP執行sh文件


$result=exec("/usr/bin/phantomjs /var/Phantom/baidu.js 2>&1"); 
var_dump($result); 

baidu.js

var page = require('webpage').create(); 
page.viewportSize = { 
    width: 1366, 
    height: 768 
}; 
page.open('https://www.baidu.com/', function(status) { 
    console.log("Status: " + status); 
    if(status === "success") { 
    page.render('baidu.png'); 
    } 
    phantom.exit(); 
}); 

結果是string(21) "Aborted (core dumped)"


$cmd = 'unset DYLD_LIBRARY_PATH ;'; 
$cmd.= ' /usr/bin/phantomjs'; 
$cmd.= ' /var/Phantom/baidu.js'; 
$cmd='phantomjs -v'; 
exec($cmd.' 2>&1', $output); 
var_dump($output); 

輸出是array(4) { [0]=> string(44) "QXcbConnection: Could not connect to display" [1]=> string(61) "PhantomJS has crashed. Please read the bug reporting guide at" [2]=> string(64) " and file a bug report." [3]=> string(21) "Aborted (core dumped)" }


$result2=exec("sh /var/Phantom/publish.sh 2>&1"); 
var_dump($result2); 

publish.sh

#!/bin/bash 
echo $PATH 
FILE_DIR="/var/data/Phantom" 
BIN_DIR="/usr/bin" 
DB_NAME="xxx" 
BCK_DIR="/var/data/Phantom" 

$BIN_DIR/phantomjs $FILE_DIR/baidu.js 
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME > $BCK_DIR/$DB_NAME.sql 

的resuult2是string(84) "mysqldump: [Warning] Using a password on the command line interface can be insecure."(mysqldump的消息).Mysqldump已成功執行,但phantomjs失敗。


  1. 我運行在終端的命令 「phantomjs baidu.js」,成功渲染圖像。
  2. 我在終端中運行命令「sh publish.sh」,成功呈現圖像。
  3. 所有有關權限是「777」

我發現有人已經successed從PHP the link執行phantomjs,但我不能執行它,所以這裏是我的問題嗎?

+0

我已經successed在exec中執行casperjs(「/ usr/local/bin/casperjs /var/www/test.js",$op,$er);'這裏有http://casperjs.org/ –

+0

你能解決這個問題? – Vaviloff

+0

是的,它成功 –

回答

0

你其實分別是能夠執行phantomjs腳本,由$output判斷;它只是因爲某種原因墜毀。

我從你的日誌谷歌的第一個錯誤(QXcbConnection:無法連接到顯示)和這裏的官方PhantomJS github上與工作解決方案這個問題的discussino,希望它有助於:https://github.com/ariya/phantomjs/issues/14376

+0

$輸出使我困惑了很長時間,但我認爲問題是使用php或ubuntu。現在,我確認問題是與phantomjs或我的js文件,謝謝! –

+0

4,你使用二進制PhantomJS還是你從源代碼編譯它? 二進制 - 將它安裝爲Ubuntu的一部分(使用apt).III二進制Phantomsj是什麼?它與'sudo apt-get install phantomjs'有什麼區別? –

+0

請更改您的最新評論,並不確定您的意思。但無論如何,你最好從官方回購獲得二進制。 – Vaviloff