命令在SSH终端中工作,但在PHP脚本中不起作用

时间:2017-01-12 21:15:47

标签: php linux ssh ffmpeg plesk

我遇到了一个奇怪的问题。我在我的服务器上安装了ffmpeg。当我从SSH(PuTTY)运行“ffmpeg”时,它确认安装:

ffmpeg via ssh

然后我将以下代码放在同一服务器上的网站内的PHP文件中:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$output = exec('ffmpeg -h');
echo "<pre>$output</pre>";
?>

但是当我运行PHP脚本时,页面为空白,没有输出。我可以确认exec工作正常,因为当我在PHP和终端中运行php -v | grep cli时,它们都输出相同的内容。

我正在使用Plesk(网络主机版)来管理网站,并通过SSH( / bin / sh )授予其访问服务器的权限

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您希望使用ffmeg的完整路径,因为它可能不在网络服务器用户的路径环境变量中。

此外,exec()的返回是输出的最后一行,可能是一个空行,你永远不知道。因此,使用第二个参数捕获数组中的所有输出:

exec('/path/to/ffmpeg -h', $output);
echo implode('<br>', $output);

或者您可以尝试system()passthru()直接输出:

echo "<pre>" . system('/path/to/ffmpeg -h') . "</pre>";

答案 1 :(得分:0)

我建议尝试

$command = escapeshellcmd('/root/bin/ffmpeg -h');
$output = shell_exec($command);
echo "<pre>$output</pre>";

编辑 - 添加

但是,在这种情况下的问题是出于安全原因,Web服务器用户无法使用/ root中的文件。 ffmpeg可执行文件应该进入/usr/local/bin或Web服务器用户可用的另一个目录。