我遇到了一个奇怪的问题。我在我的服务器上安装了ffmpeg。当我从SSH(PuTTY)运行“ffmpeg
”时,它确认安装:
然后我将以下代码放在同一服务器上的网站内的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 )授予其访问服务器的权限
我在这里缺少什么?
答案 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服务器用户可用的另一个目录。