原始错误信息是
sh: 1: pdftk: 未找到
这显然导致这。这不是我第一次遇到这个问题,而且我确信这不是pdftk或php-pdftk的问题。
这是背景故事,我在 linuxmint 上使用 php 5.4 开发 Web 应用程序。然后该项目停止了。我已经有一个该项目的存储库,所以我删除了所有文件。几个月后,我决定在 php 7 上编写一个全新的项目,准确地说是 7.3。
突然我不得不制作新的补丁。然后,这是我获取 pdftk 的方式。在终端上,我可以使用 pdftk cli,例如打印当前版本。但是,Web 服务器仍然显示相同的错误。
评论中澄清:
我认为这与权限有关,二进制文件已经安装。我可以通过终端使用它。
答案1
如果pdftk
可以从用户登录(如您所说的在终端上)使用,那么有几个选项:
权限:检查文件是否具有正确的权限,让每个人都能执行。
环境:当您pdftk
在命令行中键入时,解释器(Shell、Bash 等)知道在各个位置查找二进制文件。例如,它将在中查找/usr/bin
。查找的位置在环境变量中设置PATH
(请参阅echo $PATH
)。但是,那是在您的用户配置中。在 Apache Web 服务器下运行的 PHP 可能没有此环境。因此,在您的代码中,最好调用完整路径。路径是什么?您可以通过which pdftk
在终端中运行来查找。在 PHP 代码中提供完整路径将避免此PATH
问题。
与权限相关的其他可能相关的帖子:
- https://stackoverflow.com/questions/17151946/executing-a-shell-script-from-a-php-script
- https://stackoverflow.com/questions/11649884/shell-exec-allow-specific-program-to-run-under-apache-user
- https://stackoverflow.com/questions/28639918/allow-php-apache-to-shell-execute-commands-on-ubuntu
- https://stackoverflow.com/questions/44529612/web-local-application-apache-run-a-shell-script
答案2
我获取 pdftk 的方式是通过 snap,遗憾的是它有一些限制。即使在提到的文章中也建议通过 snap 安装,但遗憾的是它也会出现这个问题。
现在 pdftk 可以在 mint 上使用,然后您可以通过 snap 卸载 pdftk,然后直接通过 apt 安装 pdftk。
apt install pdftk