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 调用 Ghostscript:无法打开初始设备

奇怪的问题——PHP / ImageMagick / Ghostscript

PHP检查Ghostscript是不是安装在服务器上

使用 PHP(ghostscript) 将 PDF 转换为图像耗时太长

PHP exec 错误,可能是 MAMP 使用 ghostscript