2014-11-03 49 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中工作。获得的教训 - 使用二进制文件的绝对路径。