PDFTk在本地可用但在私有服务器上无法工作。

3
我有一个私人服务器CentOS 6,并安装了pdftk程序来生成pdf文件。当我使用SSH客户端连接时,我可以成功运行pdftk程序。但是我无法在php中使用exec()函数。

我有一个非常简单的php文件,如下所示。这只是为了测试pdftk是否正常工作。当我在我的本地主机上使用xampp运行此文件时,它可以生成文件,但是当我尝试在我的私人服务器上运行时,它不会报错也不会生成文件。我不是专家,希望得到您的帮助。提前感谢您。

PHP代码:

<?php
exec("pdftk form.pdf output private.pdf");

错误看起来像这样:
Array ( [0] => Error: Failed to open output file:
  [1] => collated.pdf [2] => No output created.) 

注意:我已经在Putty SSH客户端上尝试过这段代码,它完美运行。

很可能SELinux没有设置允许httpd服务器运行此二进制文件(这是有道理的)。审核日志中的AVC将确认这一点。 - Jakuje
你现在的目录和在 PuTTY 中运行时一样吗? - Jakuje
@Jakuje 仍然是同样的问题。我使用了这样的方式; exec("pwd"); exec("pdftk代码在这里"); - Furkan KESKIN
但是 pwd 的输出是什么呢?它会打印出你的工作目录。 - Jakuje
@Jakuje 给出的是:/home/mysite/subdomain.mysite.com/ - Furkan KESKIN
显示剩余9条评论
1个回答

1
错误信息为:数组([0] => 错误:无法打开输出文件:[1] => collated.pdf [2] => 未创建任何输出。在putty上执行代码正常工作。

您可以发现的区别在于运行代码的用户。在PuTTY的情况下,您登录的用户与从Web访问时运行脚本的用户不同。由于您正在创建一个新文件,因此用户需要对目录具有写访问权限。通常不建议允许该用户将写入目录中的脚本,因此最好创建一个新目录(例如export),其中apache用户可以访问以进行写入:

mkdir export
chown apache:apache export
chmod 755 export

并修改您的脚本,将文件写入该目录:

exec("pdftk form.pdf output export/private.pdf");

chmod apache:apache export 给出错误信息 "chmod: invalid mode: `apache:apache'"。 - Furkan KESKIN
抱歉,显然,应该使用 chown 命令确保此目录归属于 apache 用户(我希望在 CentOS 上是正确的用户 -- 否则可以通过在脚本中执行 exec("id") 命令来找到正确的用户)。 - Jakuje
感谢您的帮助,但它仍然会出现相同的错误:数组([0] => 错误:无法打开输出文件:[1] => export/private.pdf [2] => 没有创建输出。[3] => 错误:无法为输出打开文件:export/private.pdf) - Furkan KESKIN
因此,请再次检查和验证 export 目录的权限,并使用 ls -ldZ export export/private.pdf 检查文件是否仍具有“错误的权限”。 - Jakuje
数组([0] => uid=99(nobody) gid=99(nobody) groups=99(nobody))id 给出这个。 - Furkan KESKIN
1
所以将所有者更改为“nobody”:例如chmod nobody:apache export - Jakuje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接