【发布时间】: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)。
当我运行命令 echo 或 ls -l 或 dir 或 even 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