簡體   English   中英

通過SSH遠程運行PHP

[英]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”。

總結一下:

  1. 通過服務器上的命令行運行腳本時,該腳本將對視頻進行編碼。
  2. 該腳本在遠程運行時不會對視頻進行編碼。
  3. 該腳本在遠程運行時執行。
  4. 什么

我想到了。

從我的Laravel應用程序中,我決定嘗試echo exec('whoami'); 看看是否有任何東西返回瀏覽器。 它確實做到了,所以我知道exec()正在工作,並且可以通過SSH軟件包觸發它。

然后我意識到我的ffmpeg編碼命令正在抑制2>&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 ");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM