程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中的exec函數並不想我想像的那樣

php中的exec函數並不想我想像的那樣

編輯:關於PHP編程

用php(做為現在的主流開發語言)時間不短了,但親自做過的東西不多,exec等函數以前沒有接觸過,只是看別人的文章中提到了一些。現在要寫一個修改apache(Unix平台最流行的WEB服務器平台)密碼的小功能,實現的方法早就明確了,但在使用exec函數的時候遇到了問題。

exec函數的作用是執行系統命令行命令,其語法為:
string exec ( string command [, array &output [, int &return_var]] )

其中command為要執行的命令字符串,output是執行命令的輸出內容,數組格式,一行為數組中的一條記錄,return_var是執行命令的返回值。

在dos下,直接執行htpasswd命令,不加任何參數,會得到類似如下的幫助:
E:cvsworksvntools>htpasswd
Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
……

因此,出於測試目的,先用exec同樣執行一下這個命令看看效果,php(做為現在的主流開發語言)代碼如下:
exec(’ e:cvsworksvntoolshtpasswd.exe’, $ar, $status);
for ($i=0; $i < count($ar); $i++) $ar[$i] = htmlspecialchars($ar[$i]);
$msg = implode(’<br />’ . “ ”, $ar);
echo $msg;

代碼執行沒有錯誤,但同樣什麼輸出也沒有,為什麼呢?把命令換成dir或cd都能夠正確執行,把htpasswd.exe換成pk.exe也沒有問題,難道這個和htpasswd有關系?摸索1個來小時後,終於發現了問題所在。

當使用exec執行不帶任何參數的htpasswd.exe的時候,返回值$status是2,而帶上參數“-nsb 1 1”以後,返回值是0,並且輸出信息正常
1:{SHA}NWoZK3kTsExUV00Ywo1G5jlUKKs=

而執行htpasswd1.exe這個並不存在的文件的時候,返回值是1,並且沒有任何輸出信息。

因此,我的結論就是,當exec函數執行命令正常,返回值為0的時候,才有輸出信息,而當函數執行命令不存在或者返回錯誤代碼的時候,就沒有輸出信息了。而htpasswd.exe恰好在不帶任何參數執行的時候,雖然能夠print出幫助信息,但返回狀態為2,所以exec函數就沒有返回任何輸出信息了。

和exec類似的system,passthru,shell_exec等函數應該也是類似的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved