Ghostscript 执行:PHP 与 Python
Posted
技术标签:
【中文标题】Ghostscript 执行:PHP 与 Python【英文标题】:Ghostscript exec: PHP vs Python 【发布时间】:2014-11-03 22:59:38 【问题描述】:我正在尝试执行一个简单的 Ghostscript 命令来获取 PDF 页面的数量。 这里是 php cmd:
$pages = 'sudo gs -q -dNODISPLAY -c "(' . $input . ') (r) file runpdfbegin pdfpagecount = quit"';
尝试过 exec()、system()、shell_exec() 和 passthru() - 没有一个返回标准输出。
对于 s&g,我尝试了 Python:
>>> import os
>>> os.system('sudo gs -q -dNODISPLAY -c "(/Users/me/Downloads/multi-page.pdf) (r) file runpdfbegin pdfpagecount = quit"')
得到 32 的输出。
主要目标是让它在 PHP 中工作 - 我错过了什么?
【问题讨论】:
想解释一下否决票? 检查您的 PHP 用户是否可以使用sudo
并具有登录 shell。如果它是类 Debian 系统上的网络服务器,则用户很可能是 www-data
。通常没有shell,不允许使用sudo
。
$input
的值是多少?另外,你确定 apache2 或任何可以使用 sudo 的东西吗?
你说得对,这是通过 Apache2 - 我删除了 sudo 部分,因为我只是从文件中读取。当我通过 PHP-CLI 执行时,它提供标准输出,但由于某种原因不通过 apache2 服务器。
输入值就是多页pdf。
【参考方案1】:
这是无法找到可执行文件的函数,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
调用 Python 脚本的 PHP 脚本:
$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];
这导致:“sh: gs: command not found”
感谢那个提示,我将 gs 更改为 /usr/local/bin/gs,它在 Python 中工作,在 PHP 中尝试了同样的事情,在 PHP 中工作。经验教训 - 使用二进制文件的绝对路径。
【讨论】:
以上是关于Ghostscript 执行:PHP 与 Python的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure php 服务器上使用 Imagick 安装 Ghostscript
奇怪的问题——PHP / ImageMagick / Ghostscript