【问题标题】:Execute qpdf in php shell_execute在 php shell_execute 中执行 qpdf
【发布时间】:2015-09-30 09:09:27
【问题描述】:

我在我的 OpenSuse 13.2 操作系统中安装了 Lampp-x64-5.6.3。我已经构建了一个程序,它需要执行我从 OpenSuse 存储库本身安装的 qpdf

好吧,当我运行命令(如下所示)时,我没有得到任何响应,也没有任何工作,而我能够执行 /usr/bin/ 目录中的其他二进制文件。

   $execQuery =  "/usr/bin/qpdf --decrypt --stream-data=uncompress --force-version=1.4 ".escapeshellarg('/opt/lampp/htdocs/test/test.pdf')." ". escapeshellarg('/opt/lampp/htdocs/test/temptest.pdf');
   shell_exec($execQuery);
#OR
   $execQuery =  "/usr/bin/qpdf '/opt/lampp/htdocs/test/test.pdf' '/opt/lampp/htdocs/test/temptest.pdf'";
   shell_exec($execQuery);

PHP 安全模式已关闭,shell_exec、exec、系统等已启用。我仍然无法运行这个特定的二进制文件 (/usr/bin/qpdf)。

当我运行命令 echols -ldireven skype 时,我得到了输出在 php shell_execute 函数中。 该文件的权限为:-rwxr-xr-x 1 root root 85248 Jun 18 10:31 /usr/bin/qpdf

但是我可以通过操作系统的终端执行 qpdf 命令。它完美地创建了文件。

目录 /opt/lampp/htdocs/test/ 对 qpdf 和 apache/lampp 都是可写的

我几乎尝试了各种论坛中提到的所有方法,但仍然无法让这个可执行文件运行该文件。

提前致谢。

更新:

按照建议尝试了这个:

$command =  "/usr/bin/qpdf --decrypt --stream-data=uncompress --force-version=1.4 ".escapeshellarg('/opt/lampp/htdocs/test/test.pdf')." ". escapeshellarg('/opt/lampp/htdocs/test/temptest.pdf');
shell_exec($command. " > /opt/lampp/htdocs/debug.log 2>&1");

错误已记录!

......    
/opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
...... 

解决方案:

我只需要删除 /usr/lib/libstdc++.so.6 文件或重命名它。

在终端中运行:

sudo mv /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6___

【问题讨论】:

  • 正如我提到的,我已经测试了在线找到的所有方法,其中包括您标记为重复的问题。没有任何效果。
  • @mario 这是我所做的: $command = "/usr/bin/qpdf --decrypt --stream-data=uncompress --force-version=1.4 ".escapeshellarg('/opt /lampp/htdocs/test/test.pdf')。" "。 escapeshellarg('/opt/lampp/htdocs/test/temptest.pdf'); shell_exec($command." > /home/username/debug.log 2>&1");什么都没发生。没有创建日志文件。但是当我使用终端时会生成日志
  • 如果无法发现错误消息,那么这里没有人可以提供帮助。 (除了没有具体可调查的猜测答案之外,您不会收到任何信息。SuSE 发行版最常见的猜测是:当然是 SELinux,还要检查系统日志。)
  • 先生。 @mario 你救了我的命。我所做的只是从 /opt/lampp/lib/ 中删除 libstdc++.so.6 。这个文件造成了麻烦。我相信有一天其他人会为这个问题寻找解决方案。我只是将解决方案留在这里。 :) 再次感谢
  • 这个问题还是有点模糊。几乎没有人会意外地用谷歌搜索它。但是,如果您现在有具体的错误消息,请更新问题。并将解决方案总结为明天的自我回答。如果你能列出你的调试步骤和最终修复,那么它对未来的用户绝对有用。

标签: php linux file-permissions shell-exec opensuse


【解决方案1】:

我只需要删除 /usr/lib/libstdc++.so.6 文件或重命名它。

在终端中运行:

sudo mv /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6___

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2011-02-11
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多