![](/img/trans.png)
[英]SSH Script runs fine manually running it but does not when exec with PHP remotely
[英]Running PHP remotely via SSH
我在Laravel Forge上使用nginx设置了视频编码服务器。 我正在尝试使用LaravelCollective SSH软件包运行测试脚本以通过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”。
总结一下:
我想到了。
从我的Laravel应用程序中,我决定尝试echo exec('whoami');
看看是否有任何东西返回浏览器。 它确实做到了,所以我知道exec()
正在工作,并且可以通过SSH软件包触发它。
然后我意识到我的ffmpeg编码命令正在抑制2>&1
输出。 我删除了它,最后看到了怎么回事:我收到一个“找不到文件”错误,这很奇怪,因为input.mpg
与index.php
在同一目录中。
这已经在其他三台服务器上工作,但是在用Forge创建的那台服务器上却没有。
因此,我将完整路径添加到输入文件中,瞧! 有用!
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 ");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.