exec php執行不了的解決方法:1.修改yii檔案首行,直接指明php解釋器;2、修改exec呼叫方法,直接指明php解釋器。
本文操作環境:Windows7系統、PHP7.1版、Dell G3電腦。
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 在哪裡;
【推薦學習:《PHP影片教學》】
#!/usr/bin/env php
修改為## !/usr/local/bin/php
,即直接指明php 解釋器所在位置(在程式碼發佈時修改也可以);exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output); print_r($output);
$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);
為安全起見,通常設定nginx 使用者的shell 為/sbin/nologin
定時任務和OSS 後台管理頁面上的點擊操作之間的關係處理的一直不太好;
以上是exec php 執行不了怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!