【发布时间】:2016-10-02 10:31:18
【问题描述】:
我在 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”。
总结一下:
- 脚本在服务器上通过命令行运行时会对视频进行编码。
- 远程运行时,该脚本不会对视频进行编码。
- 脚本将在远程运行时执行。
- 什么?
【问题讨论】: