[英]Execute background php script with shell_exec command that works with SSH
[英]Command works in SSH terminal, but not in PHP script
我有一個奇怪的問題。 我已經在服務器上安裝了ffmpeg。 當我從SSH(PuTTY)運行“ ffmpeg
”時,它會確認安裝:
然后,將以下代碼放在同一服務器上的網站內的PHP文件中:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$output = exec('ffmpeg -h');
echo "<pre>$output</pre>";
?>
但是,當我運行PHP腳本時,頁面為空白,沒有輸出。 我可以確認exec
工作正常,因為當我運行php -v | grep cli
在PHP和終端中的php -v | grep cli
都輸出相同的內容。
我正在使用Plesk(網絡主機版)來管理站點,並已通過SSH( / bin / sh )授予它對服務器的訪問權限
我在這里想念什么?
您想使用ffmeg
的完整路徑,因為它可能不在Web服務器用戶的path環境變量中。
另外, exec()
的返回是輸出的最后一行,可能永遠是空白行,您永遠不會知道。 因此,使用第二個參數捕獲數組中的所有輸出:
exec('/path/to/ffmpeg -h', $output);
echo implode('<br>', $output);
或者,您可以嘗試system()
或passthru()
直接輸出:
echo "<pre>" . system('/path/to/ffmpeg -h') . "</pre>";
我建議嘗試
$command = escapeshellcmd('/root/bin/ffmpeg -h');
$output = shell_exec($command);
echo "<pre>$output</pre>";
編輯-添加
但是,在這種情況下,問題是出於安全原因,/ root用戶中的文件不可用於Web服務器用戶。 ffmpeg可執行文件應進入/usr/local/bin
或Web服務器用戶可用的其他目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.