【问题标题】:Running PHP remotely via SSH通过 SSH 远程运行 PHP
【发布时间】: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”。

总结一下:

  1. 脚本在服务器上通过命令行运行时会对视频进行编码。
  2. 远程运行时,该脚本不会对视频进行编码。
  3. 脚本在远程运行时执行。
  4. 什么?

【问题讨论】:

    标签: php laravel nginx ssh


    【解决方案1】:

    我想通了。

    在我的 Laravel 应用程序中,我决定尝试echo exec('whoami');,看看它是否会向浏览器返回任何内容。确实如此,所以我知道 exec() 正在工作,我可以通过 SSH 包触发它。

    然后我意识到我的 ffmpeg 编码命令正在使用2&gt;&amp;1 抑制输出。我删除了它,终于看到发生了什么:我收到“找不到文件”错误,这很奇怪,因为 input.mpgindex.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 ");
    

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多