我在Laravel Forge上使用nginx设置了一个视频编码服务器。我正在尝试使用LaravelCollective SSH package运行测试脚本以通过SSH远程编码视频。
这是我的测试脚本(index.php)
<?php
exec("ffmpeg -I input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 output.mp4 1> output.txt 2>&1");
当我通过SSH连接到服务器并从命令行运行脚本时,它可以工作:视频已编码;脚本正在运行。
$ php /home/forge/mydomainname.com/public/test/index.php
然而,当我在我的Laravel应用程序中本地运行相同的命令 - 使用SSH软件包 - 它没有编码,我没有收到任何输出;浏览器只返回一个白页。
SSH::run('php /home/forge/mydomainname.com/public/test/index.php', function($line) {
echo $line.PHP_EOL;
});
但是,如果我打开index.php
,请注释掉FFmpeg命令并添加一些代码以检查是否启用了exec
,将执行并发送输出,所以我知道SSH包实际上正在工作并远程执行脚本。
<?php
// exec("ffmpeg -I input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 output.mp4 1> output.txt 2>&1");
if(function_exists('exec')) {
echo "exec is enabled";
} else {
echo "exec is disabled";
}
它将向我的浏览器返回“exec is enabled”。
总结一下:
答案 0 :(得分:0)
我明白了。
在我的Laravel应用程序中,我决定尝试echo exec('whoami');
并查看是否向浏览器返回任何内容。它确实如此,所以我知道exec()
正在工作,我可以通过SSH包触发它。
然后我意识到我的ffmpeg编码命令用2>&1
抑制了输出。我删除了它,最后看到了发生了什么:我收到了“找不到文件”错误,这很奇怪,因为input.mpg
与index.php
在同一目录中。
这已经在其他三台服务器上运行了,但在使用Forge创建的服务器上却没有。
所以我添加了输入文件的完整路径并vo!它有效!
exec("ffmpeg -i /home/forge/mydomainname.com/public/test/input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 /home/forge/mydomainname.com/public/test/output.mp4 1> /home/forge/mydomainname.com/public/test/output.txt ");