您好,登錄后才能下訂單哦!
本文將為大家詳細介紹“exec php執行不了的解決方法”,內容步驟清晰詳細,細節處理妥當,而小編每天都會更新不同的知識點,希望這篇“exec php執行不了的解決方法”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內容如下,一起去收獲新知識吧。
php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。
exec php執行不了的解決辦法:1、修改yii文件首行,直接指明php解釋器;2、修改exec調用方法,直接指明php解釋器。
php exec 為何執行不了?
有一個定時任務,想在 OSS 后臺管理頁面可以點擊啟動,可是試了幾種方法都不行;無論 system 還是 exec(手工在 shell command line 執行沒問題);最初懷疑 Web Server nginx 用戶的權限問題,后來發現是環境變量找不到 php 可執行文件(因為 nginx 用戶是受限用戶);
exec("/home/app/example/api/app/yii demand/virtual {$id}", $output); print_r($output);
以上腳本執行后僅輸出 Array(),顯然是沒有執行到業務代碼(業務代碼的第一行就有輸出);
// http://oss.example.com/index.php?r=demand/demand-ip/msg&id=1929 點擊后執行 exec("/home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output); print_r($output);
以上腳本執行后有錯誤輸出:Array ( [0] => /usr/bin/env: php: No such file or directory );
/usr/bin/env: php 這句話出自 yii 文件的首行 #!/usr/bin/env php,本意是用于指明執行 yii 文件的 php 腳本解釋器在哪里;可是錯誤輸出/usr/bin/env: php: No such file or directory 說明找不到 php 在哪里;
方案一:修改 yii 文件首行,直接指明 php 解釋器;
由 #!/usr/bin/env php 修改為#!/usr/local/bin/php,即直接指明 php 解釋器所在位置(在代碼發布時修改也可以);
方案二:修改 exec 調用方法,直接指明 php 解釋器
exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output); print_r($output);
注意:在實際執行中,exec 命令還有點問題,見下文 “504 錯誤”;
當 exec 時間執行過長時(如超過 60 秒),頁面上會出現 504 錯誤(Gateway Timeout);
需要將標準輸出、標準錯誤重定向,然后就會在 后臺進程執行命令,頁面上會輸出處理進程號;
$cmd = '/usr/local/bin/php /home/app/example/yapp/yii demand/finish 2057'; $pid_file = 'msgrepeat.pid'; $exec_cmd = sprintf("%s > /dev/null 2>&1 & echo $! > %s & cat %s", $cmd, $pid_file, $pid_file); exec($exec_cmd);
Why is it better to use “#!/usr/bin/env NAME” instead of “#!/path/to/NAME” as my shebang?
How does /usr/bin/env know which program to use?
為安全起見,通常設置 nginx 用戶的 shell 為 /sbin/nologin
定時任務和 OSS 后臺管理頁面上的點擊操作之間的關系處理的一直不太好;
yii 框架 console 和 web 的兩種處理方式;
如何提升 crontab 可測試性的問題;
如何改善 crontab 使用體驗的問題;
如何合理復用 crontab 任務和 API(Controller/Action)代碼的問題;
前臺和后臺共享 Controller/Action 的方式;
或者說多項目之間方便共享代碼庫的問題;
php-fpm does not work exec, system, shell_exec, only CLI;
PHP exec() does not run all commands;
如果你能讀到這里,小編希望你對“exec php執行不了的解決方法”這一關鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領會,如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。