[英]php shell_exec() command is not working
我試圖從PHP運行.sh文件。 我嘗試用shell_exec()來做。 但它不起作用我在堆棧溢出中提到了許多與此相關的問題,但無法解決
我的PHP代碼是(web.php)
<?php
echo shell_exec('/var/www/project/xxe.sh');
echo "done";
?>
只打印完成。 但它是從終端工作(php /var/www/project/web.php)
在xxe.sh中我調用了一個python文件
python vin.py
我也將.sh n .py文件的文件權限更改為777,請幫忙
如果你說它適用於終端而不是apache,那么apache的php.ini
文件可能會禁用shell_exec()
。
請參見http://www.php.net/manual/en/ini.core.php#ini.disable-functions
您的apache的php.ini
文件可能看起來像
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
從此列表中刪除shell_exec
並重新啟動Web服務器,盡管這存在安全風險,我不建議這樣做。
如果它在shell中運行良好,我認為apache是chroot。 所以php無法找到/ var / ...
或者httpd用戶的用戶無權輸入/ var / ...
如果你擅長PHP。 打開dir / var / ...並且readdir()並檢查dir是否存在並且檢查文件是否存在。
這個問題可能對你有幫助。 掃描/ home / with opendir()
在嘗試運行由github post-receive webhook觸發的腳本時。
這是我的項目目錄所在的位置(克隆git repo):
/var/www/html/my-repo
我在上面的目錄中創建了一個名為webhook.php的腳本:
<?php
#webhook.php
$cmd = shell_exec("git pull 2>&1");
#for debugging
echo $cmd;
?>
在/ var / www / html中執行以下命令
sudo chown www-data:www-data -R my-repo/
請訪問http://www.myserver.com/my-repo/webhook.php進行測試
將腳本的路徑添加到github webhooks。
問題通常在於,當您從php中執行代碼時,它會作為很多Linux發行版中的webservers用戶www-data運行。 Normaly此用戶沒有設置環境,因此沒有PATH。 通過在文件中使用完整路徑,您通常可以克服這個問題。
xxe.sh
/usr/bin/python /path/to/script/vin.py
我已經陷入這個問題好幾個小時了。
我考慮過一個解決方案。 1.將您的腳本移動到python文件“script.py”並將此文件放入您的服務器根目錄。 2. shell_exec(“python script.py”);
無論如何,它對我有用。
我在這里試了一切,沒有任何效果。 最終為我解決的是在shell_exec之前使用以下內容:
putenv('PATH=/usr/local/bin');
在我的主機上,我必須為我的php文件提供一個不同的路徑,以便從shell_exec()執行。 這不起作用shell_exec('/usr/bin/php backgroundtask.php');
。
雖然這做了shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');
。
您可以訪問此參考。
我有同樣的問題,因為PHP反斜杠。
PHP轉義反斜杠,因此命令到達shell
'COPY E:path1\path2\file.prn /B \127.0.0.1\"PRINTER NAME"'
所以我給了這樣的命令
'COPY E:\\path1\\path2\\file.prn /B \\\\127.0.0.1\"PRINTER NAME"'.
你必須雙重轉義反斜杠:一次用於PHP,一次用於shell。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.