也許您可以幫我解決一個令人沮喪的問題。我無法編譯一個可執行文件,我們稱之爲$$execprob
,在我正在測試的Linux主機上編譯它,然後將它編譯到不同的主機上,並將可執行文件移動過來。它運行良好與我的SSH用戶,但是當Web服務器使用雖然權限正確,但Web PHP實例無法運行可執行文件
exec("/home/$$username/usr/local/bin/$$execprob", $output, $return);
我沒有得到任何$output
和$return
是127,或者找不到文件。
這裏是我的測試的信息列表,可以幫助:
- 的文件運行正常SSH模式罰款。
- 通過SSH的權限是
-rwxr-xr-x
。 - 運行
exec('ls -l')
的網絡服務器表明,該文件是存在具有相同權限的SSH 在SSH
- :
${USER}
是文件所有者$$用戶名 - 在PHP中:
${USER}
返回任何 - 運行
exec('if [-x /home/$$username/usr/local/bin/$$execprob]; then echo "thing";fi')
打印出「事情'; - 在SSH運行
php -a
和進入正常運行exec("/home/$username/usr/local/bin/$$execprob", $output, $return);
$$ execprob,與$output
顯示輸出和$return
== 0, - 我在我的.bashrc行正確加載
$LD_LIBRARY_PATH
:export LD_LIBRARY_PATH=$HOME/usr/local/lib:$LD_LIBRARY_PATH;
這是必要的可執行文件運行時使用動態庫。我的.bashrc不是由網絡服務器運行;但是,在運行:
exec("export LD_LIBRARY_PATH=$HOME/usr/local/lib:$LD_LIBRARY_PATH; /home/$$username/usr/local/bin/$$execprob", $output, $return);
仍然具有相同的失敗結果。
如果還有其他事情可以爲您收集更多疑難解答信息,請讓我知道。
謝謝!
在您的PHP腳本中,嘗試'print'/ home/$$ username/usr/local/bin/$$ execprob「'以確保它正確解析任何變量名稱。 –
Thanks,@JoelC for thinking about問題。實際上我根本不使用任何變量名。我剛剛在這裏使用這些佔位符來表示我的用戶名和可執行文件名。即。我真的只是在運行'''/ home/jonnybajonny/usr/local/bin/execfilename''',並且這不起作用。 – reor
您能否確保其他人對文件夾鏈中的所有文件夾擁有rx權限?否則,PHP用戶將無法看到要運行的文件。同時檢查你的網絡服務器錯誤日誌,看看有沒有PHP錯誤。 –