[英]PHP on Ubuntu AWS Server: POPEN fails with “sh: <command>: not found”
[英]popen fails with “sh: <command>: not found”
我正在開發一個服務器應用程序,我最近在測試服務器(Debian Squeeze)上遇到了這個奇怪的錯誤。
我傳遞給popen的每個可執行文件都失敗了一個msg:
sh: sort: not found // happens to any command
無論我是指向“類型”返回的完整路徑還是保持簡短,都會發生這種情況。 如前所述,這只發生在一個測試環境中,增加了混亂,運行相同的操作系統並且沒有任何問題。
Popen顯然是使用sh來執行命令,但如果我通過命令行(bash或sh)運行相同的命令,一切都很好
提前致謝
(PS:甚至嘗試使用Python os.popen只是為了解決這個問題,並且它有效!)
編輯這是一個失敗的簡單調用:
$command="tail -10 myfile";
$handle = popen($command.' 2>&1','r');
if($handle){
while (!feof($handle)){
....//process buffer
}
}
收益:
sh: tail: not found
在調用popen時,可能沒有正確配置PATH。 我想這是一個PHP配置問題,但您可以通過以下方式繞過它:
which tail
以確定尾程序的完整路徑。 popen
。 我在搜索關於完全相同輸出的我自己的答案時發現了這個問題。 雖然我在C編碼,但我仍在使用popen()。 我是C的初學者,發現我犯了以下錯誤。
我正在回答這個問題,希望對搜索相同錯誤消息的其他人有用。 這就是我遇到,發現和糾正問題的方法。
我聲明了一個字符串,並用它連接其他字符串來制定我的命令行。
我將這行打印到stdout以驗證它是我想要的命令。 從stdout復制並執行時,該行有效。 那么為什么來自popen()的shell窒息?
我將輸出傳送到文件並在編輯器中打開文件,並看到當我的空字符串被初始化時,使用字符串創建了特殊字符“^ A”,該字符串未顯示在終端上。
我改變了我從這里聲明char數組的方式:
char varname [];
對此:
char varname [512] = {“”};
這解決了這個問題。 我鼓勵有類似問題的人在popen()使用的字符串中查找隱藏的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.