2014-11-03 46 views
-1

我試圖執行一個簡單的Ghostscript命令來獲取PDF頁面的數量。 這裏是PHP CMD:Ghostscript exec:PHP vs Python

$pages = 'sudo gs -q -dNODISPLAY -c "(' . $input . ') (r) file runpdfbegin pdfpagecount = quit"'; 

試圖EXEC(),系統(),了shell_exec()和中繼() - 沒有返回的標準輸出。

對於s &克,我試過的Python:

>>> import os 
>>> os.system('sudo gs -q -dNODISPLAY -c "(/Users/me/Downloads/multi-page.pdf) (r) file runpdfbegin pdfpagecount = quit"') 

的32

主要目標得到輸出得到這個在PHP中的工作 - 我錯過了什麼?

+0

小心解釋downvote? – egekhter 2014-11-03 23:01:01

+0

檢查您的PHP用戶是否可以使用'sudo'並擁有登錄shell。如果它是一個類似Debian的系統上的網絡服務器,那麼用戶很可能是'www-data'。它通常沒有外殼,不允許使用'sudo'。 – lxg 2014-11-03 23:03:22

+0

'$ input'的價值是什麼?另外,你確定apache2或任何可以使用sudo? – 2014-11-03 23:03:30

回答

0

這是可執行程序未定位的功能,沒有任何PHP指示。 我走了迂迴的方式:

Python腳本:

>>> #!/usr/bin/python 
>>> import sys 
>>> import os 
>>> input_file = sys.argv[1].replace("2>&1", "") 
>>> num_pages = os.system('gs -q -dNODISPLAY -c "(' + input_file + ') (r) file runpdfbegin pdfpagecount = quit"') 

>>> print num_pages 

PHP腳本envoking Python腳本:

$cmd_path = base_path('backend/misc/get_pdf_pages.py'); 
$pages_cmd = "python -u {$cmd_path} " . escapeshellarg($input) . " 2>&1"; 
exec($pages_cmd, $ret); 
echo $ret[0]; 

這就造成了: 「噓:GS:命令未找到」

感謝這個提示,我把gs改成了/ usr/local/bin/gs,它在Python中工作,在PHP中使用同樣的東西,在PHP中工作。獲得的教訓 - 使用二進制文件的絕對路徑。