php shell_exec 中的蹩脚编码器命令无法通过 http 服务器工作


Lame encoder command in php shell_exec doesn't work via http server

我在 php 中通过脚本运行蹩脚的编码器时遇到问题shell_exec。

并且将我的问题分解为这个脚本,并注意到如果我在终端中通过 php 命令运行它,该脚本可以工作,但如果我在浏览器中打开它,则脚本不起作用。我允许将所有文件设置为 777 以防万一。

这是代码

< ?php
exec('lame -f -V 9 ../furniture/sound/107887.wav ../furniture/sound/107887.ogg');

问题是,如果我使用 php 命令在终端中运行它,脚本就可以工作,但不通过浏览器运行。

哦,这个 scirpt 最多需要两秒钟,所以它不可能是超时或其他任何东西。我也没有收到php或nginx错误。

我该如何解决这个问题?

php 的执行PATH是蹩脚的吗?尝试用/usr/bin/lame或其他方式替换lame

文件参数的相对路径名如何?PHP 看到的当前目录中的../furniture/等是否正确?如果有疑问,请将它们也替换为完整的路径名,看看是否可以解决问题。

不太可能但值得一提:您可能需要检查lame本身是否设置了所有可执行位。如果您拥有该文件,并且该文件只能由所有者执行,则 apache 将无法运行它。

它可能有很多

原因导致它无法从网络服务器工作,可能与资源或权限有关。您可以使用 exec 的第二个可选参数来找到这一点:

<?php
$output = "";
exec('lame -f -V 9 ../furniture/sound/107887.wav ../furniture/sound/107887.ogg',$output);
echo $output;
?>