php exec無法執行的解決方法:1、找到php設定檔php.ini,在檔案裡搜尋“disable_functions”,並把“exec”和“shell_exec”去掉;2、到伺服器修改檔案權限;3、修改配置中的安全模式為「safe_mode=On」。
本教學操作環境:Windows7系統、PHP8.1版、Dell G3電腦。
php exec無法執行怎麼辦?
PHP exec執行系統指令失敗原因分析
#問題背景:
##由於專案需求,需要將html頁面產生圖片,使用phantomjs(點擊了解)工具對頁面進行截圖,在cmd視窗下運行沒有任何問題。但在php中exec運行失敗,提示phantomjs不是內部指令。問題解決:
在百度中找到各種解:方案1:
# 1、修改php.ini 找到php設定檔php.ini,如果是用星外php自動安裝程式設定php環境,這個檔案就在C:\WINDOWS\這個目錄裡。 在檔案中搜尋“disable_functions”,找到它後把“exec”、“shell_exec”去掉,然後儲存檔案。 2、修改cmd.exe檔案屬性 進入C:\WINDOWS\system32,找到cmd.exe這個文件,右鍵->屬性,在「安全性」設定裡新增Internet 來賓帳戶,也就是IUSR_******那個帳戶,然後賦予「讀取與運行」、「讀取」的權限。方案2:
有說是權限問題。 解決方案:https://www.php.cn/php-weizijiaocheng-498092.html
#方案3:
#php的內建函數exec,system都可以呼叫系統指令(shell指令),當然還有passthru,escapeshellcmd等函數。 在很多時候利用php的exec,system等函式呼叫系統指令可以幫助我們更好、更快的完成工作。例如前二天筆者在批次處理.rar檔時exec就幫我了大忙了。 今天整理一下常用的呼叫系統函數發出來和大家分享經驗。 注意:要想使用這二個函數php.ini中的安全模式必須關閉,不然為了安全起見php是不讓呼叫系統指令的。 先看一下php手冊對這二個函數的解釋:exec --- 執行外部程式###语法 : string exec ( string command [, array &output [, int &return_var]] )###說明:######exec( )執行給予的命令command,不過它並不會輸出任何東西,它簡單的從命令的結果中傳回最後一行,如果你需要去執行一個命令,並且從命令去取得所有資料時,可以使用passthru( )這個函數。 ######如果有給予參數array,則指定的陣列將會被指令所輸出的每一行填滿,注意: 如果陣列先前已經包含了一些元素的話,exec( )會將它附加在陣列的後面,如果你不想要此函數附加元素的話,你可以在傳遞此陣列給exec( )之前呼叫unset( )。 ######如果有給予參數array和return_var,則傳回執行的狀態指令將會寫到這個變數。 ######注意: 如果你允許來自使用者輸入的資料,可以傳遞到此函數,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。 ######注意: 如果你使用此函數來啟動一個程序,而且希望在背景裡(background)執行的時候離開它,你必須確定此程序的輸出是轉向(redirected)到一個文件或是一些輸出的資料流,否則PHP將會懸掛(hang)直到程式執行結束。 ######system --- 執行外部程式並且顯示輸出###
语法 : string system ( string command [, int &return_var] )###說明 :######system( )執行給予的命令command,並且輸出結果。如果有給予參數return_var,執行指令的狀態碼將會寫入這個變數。 ######注意: 如果你允許來自使用者輸入的資料,可以傳遞到此函數,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。 ######注意: 如果你使用此函數來啟動一個程序,而且希望在背景裡(background)執行的時候離開它,你必須確定此程序的輸出是轉向(redirected)到一個文件或是一些輸出的資料流,否則PHP將會懸掛(hang)直到程式執行結束。 ######如果PHP是運作成伺服器模組,在輸出每一行後,system( )會試著自動清除web伺服器的輸出緩衝。 ######成功則傳回指令的最後一行,失敗則傳回false。 ######如果你需要去執行一個指令,並且從指令去取得所有資料時,可以使用passthru( )這個函數。 ###
这二个都是用来调用系统shell命令,
不同点:
exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败
systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1为失败
exec示例:
以下为引用的内容:
<?php $a = exec("dir",$out,$status); print_r($a); print_r($out); print_r($status); ?>
system示例:
以下为引用的内容:
<?php $a = system("dir",$out); print_r($a); print_r($out); ?>
总结:
以上三个解决方案都是从百度搜索到的。
第一个解决方案我查看了配置,不存在这种情况,pass。
第二个解决方案由于需要改服务器权限,情况不允许,没试。
第三个解决方案参考了一下,修改了配置中的安全模式,safe_mode=On;然后问题迎刃而解。
OK,以上是我解决问题的过程。希望可以帮到广大像我一样的小白。
推荐学习:《PHP视频教程》
以上是php exec無法執行怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!