首頁  >  文章  >  後端開發  >  exec php 執行不了怎麼辦

exec php 執行不了怎麼辦

藏色散人
藏色散人原創
2021-03-01 09:34:082446瀏覽

exec php執行不了的解決方法:1.修改yii檔案首行,直接指明php解釋器;2、修改exec呼叫方法,直接指明php解釋器。

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影片教學》】

#解決方案
  • 方案一:修改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 錯誤」;
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);
關於/usr/bin/env(可移植性高?)
  • 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 使用者

為安全起見,通常設定nginx 使用者的shell 為/sbin/nologin

定時任務和Web 作業的關係?

定時任務和OSS 後台管理頁面上的點擊操作之間的關係處理的一直不太好;

  1. yii 框架console 和web 的兩種處理方式;
    如何提升crontab 可測試性的問題;
    如何改善crontab 使用體驗的問題;
    如何合理復用crontab 任務和API(Controller/Action)代碼的問題;
  2. 前台和後台分享Controller/Action 的方式;
    或說多項目之間方便共享程式碼庫的問題;
#啟示
    ##php-fpm does not work exec, system, shell_exec, only CLI;
  • PHP exec() does not run all commands;
  • #

以上是exec php 執行不了怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn