簡體   English   中英

Php system()/ exec()不返回輸出

[英]Php system() / exec() don't return output

對於像'ls'這樣的常見命令,exec()工作正常,例如:

exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0

但是當試圖執行另一個程序時,我無法獲得輸出:

exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0

此命令在直接從命令行執行時打印一些行。 我知道命令已經成功,因為結果(一些文件更新,數據添加等),但我看不到輸出。

有任何想法嗎?

聽起來該程序正在將其警告輸出到標准錯誤而不是標准輸出。 exec只會捕獲標准輸出。 我不確定標准錯誤總是發送到apache錯誤日志,但似乎很可能。

如果您不需要與非* nix系統兼容,則可以通過在命令后附加2>&1將標准錯誤重定向到標准輸出:

exec('some_command --option 2>&1', $output, $ret);

這應該使您的php程序可以使用警告並防止不必要的日志記錄。

所有的輸出被發送到的httpd / error_log中當某種原因*,當應用程序發現了一個警告(內部的東西,即使不是致命的)

我的解決方案:當沒有輸出時,假設它失敗了。 我的apache日志會變臟,但無論如何。

暫無
暫無

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

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