【问题标题】:PDFTk works on local but not working on private serverPDFTk 适用于本地但不适用于私人服务器
【发布时间】:2017-04-03 15:01:45
【问题描述】:

我有私人服务器 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
  • 输入谷歌并不能解决问题。你要么想了解这个问题,所以你应该找出什么是 SELinux,正如我已经写过的,查看审计日志什么被拒绝以及为什么,可能使用 selinux-troubleshootaudit2allow 工具解决它(没有来自一般建议这里)。或者直接关闭 SELinux,如果你不关心安全性(这会让它神奇地工作)。
  • @Jakuje 我暂时关闭了 selinux 并重新启动了我的服务器,但仍然是同样的问题。我认为还有另一个问题。你怎么看?
  • 你是如何关闭 SELinux 的?

标签: php pdf ssh pdftk


【解决方案1】:

错误是:数组([0] => 错误:无法打开输出文件:[1] => collat​​ed.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'”
  • 对不起,很明显,应该有chown来确保这个目录归apache用户所有(我希望它在CentOS上是正确的——否则找出正确的使用脚本中的exec("id"))。
  • 感谢您的帮助,但它仍然给出相同的错误数组([0] => 错误:无法打开输出文件:[1] => export/private.pdf [2] => 无输出已创建。[3] => 错误:无法打开输出文件:export/private.pdf)
  • 所以再次检查并验证export 目录的权限是什么,以及使用ls -ldZ export export/private.pdf 是否存在“错误权限”的文件。
  • 所以将所有者更改为nobody:例如chmod nobody:apache export
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多