當前位置:首頁 » 編程語言 » php調用cmd

php調用cmd

發布時間: 2023-04-01 19:56:09

① 怎麼在CMD里運行php

window7解決方案,XP沒試,不過想來也是同理,差不了多少:
1、你的php.exe文件的路徑,比如d:\php5.3\
2、打開計算機右鍵 > 屬性 > 高級系統設置 > 高級 > 環境變數
3、在系統變數中找到Path看看有沒有你的php路徑,如果沒有,則在Path中加入你的php路徑,如:d:\php5.3\,保存即可
4、在cmd命令行下進入到你的站點目錄,直接輸入文件名即可,如:F:\www\socket>php.exe s.php

② 如何使用PHP打開一個新的CMD窗口

<?
execInBackground('startcmd.exe@cmd/k"ping127.0.0.1"');functionexecInBackground($cmd){
枝扮if(substr(php_uname(),0,頃沒7)=="Windows"){
雀搭納pclose(popen("start/B".$cmd,"r"));
}
else{
exec($cmd.">/dev/null&");
}
}
?>

③ 菜鳥求助:PHP中調用系統命令為何有些命令總是失敗

PHP執行系統命令(簡介及方法)
在PHP中調用外部命令,可以用如下三種方法來實現:
方法一:用PHP提供的專門函數(四個):
PHP提供4個專門的執行外部命令的函數:exec(), system(), passthru(), shell_exec()
1)exec()
原型: string exec ( string $command [, array &$output [, int &$return_var ]] )
說明: exec執行系統外部命令時不會輸出結果,而是返回結果的最後一行。如果想得到結果,可以使用第二個參數,讓其輸出到指定的數組。此數組一個記錄代表輸出的一行。即如果輸出結果有20行,則這個數組就有20條記錄,所以如果需要反復輸出調用不同系統外部命令的結果,最好在輸出每一條系統外部命令結果時清空這個數組unset($output),以防混亂。第三個參數用來取得命令執行的狀態碼,通常執行成功都是返回0。
<?php
exec("dir",$output);
print_r($output);
?>
2)system()
原型: string system ( string $command [, int &$return_var ] )
說明: system和睜和exec的區別在於,system在執行系統外部命令時,直接將結果輸出到游覽器,如果執行命令成功則返回true,否則返回false。第二個參數與exec第三個參數含義一樣。
<?php
system("pwd");
?>
3)passthru()
原型: void passthru ( string $command [, int &$return_var ] )
說明: passthru與system的區別,passthru直接將結果輸出到游覽器,不返回任何值,且其可以輸出二進制,比如圖像數據。第二個參數可選,是狀態碼。
<?php
header("Content-type:image/gif");
passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");
?>
4)shell_exec()
原型: string shell_exec ( string $cmd )
說明: 直接執行命令$cmd
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
方法二:反撇號
原型: 反撇號`(和~在同一個鍵)執行系統外部命令
說明: 在使用這種方法執行系統外部命令時,要確保shell_exec函數可用,否則是無法使用這種反撇號執行系統外部命令的。
<?php
echo `dir`;
?>
方法三:用popen()函數打開進程
原型: resource popen ( string $command , string $mode )
說明: 能夠和命令進行交互。之前介紹的方法只能簡單地執行命令,卻不能與命令交互。有時須向命令輸入一些東西,如在增加系統用戶時,要調用su來把當前用戶換到root用戶,而su命令必須要在命令行上輸入root的密碼。這種情況下,用之前提到的方法顯然是不行的。
popen( )函數打開一個進程管道來執行給定的命令,返迅粗回一個文件句柄,可以對它讀和寫。返回值和fopen()函數一樣,返回一個文件指針。除非使用的是單一的模式打開(讀or寫),否則必須使用pclose()函數關閉。該指針可以被fgets(),fgetss(),fwrite()調用。出錯時,返回FALSE。
<?php
error_reporting(E_ALL);
/* Add redirection so we can get stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>
要考慮兩個問題悉昌盯:安全性和超時
1)安全性
由於PHP基本是用於WEB程序開發的,所以安全性成了人們考慮的一個重要方面 。於是PHP的設計者們給PHP加了一個門:安全模式。如果運行在安全模式下,那麼PHP腳本中將受 到如下四個方面的限制:
執行外部命令
在打開文件時有些限制
連接MySQL資料庫
基於HTTP的認證
在安全模式下,只有在特定目錄中的外部程序才可以被執行,對其它程序的調用將被拒絕。這個目錄可以在PhP.ini 文件中用safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項來指定。
當你使用這些函數來執行系統命令時,可以使用escapeshellcmd()和escapeshellarg()函數阻止用戶惡意在系統上執行命令,escapeshellcmd()針對的是執行的系統命令,而escapeshellarg()針對的是執行系統命令的參數。這兩個參數有點類似addslashes()的功能。
2)超時
當執行命令的返回結果非常龐大時,可以需要考慮將返回結果輸出至其他文件,再另行讀取文件,這樣可以顯著提高程序執行的效率。
如果要執行的命令要花費很長的時間,那麼應該把這個命令放到系統的後台去運行。但在默認情況下,象system()等函數要等到這個命令運行完才返回(實際上是在等命令的輸出結果),這肯定會引起PHP腳本的超時。解決的辦法是把命令的輸出重定向到另外一個文件或流中,如:
<?php
system("/usr/local/bin/order_proc > /tmp/abc ");
?>
但我調用的DOS命令需要幾分鍾的時間,而且為了批處理不能簡單的把結果寫入文件了事,要順序執行以下的程序
PHP設置了調用系統命令的時間限制,如果調用命令超時,雖然這個命令還是會被執行完,但PHP沒有得到返回值,被終止了(最可恨的是,不顯示任何錯誤)
修改php.ini並重啟Apache以允許系統命令運行更長的時間
max_execution_time = 600
我的程序是後台運行的,邏輯OK就成了

④ PHP的exec函數調用cmd命令之後返回的狀態碼為128是怎麼回事

那要看具體調用的是什麼命令
exec(<cmd>, <&output>, <&exit_code>)
如果執行的命令是有輸出信息的,你可以把 output輸出出來看看錯誤信息

⑤ PHP使用exec執行cmd命令成功後結果也出來了,但cmd.exe進程一直不結束無法執行後面的代碼

調用cmd.exe /前讓c gpg.exe 這樣當gpg.exe執行完成後,cmd.exe就會因為有/c參數而自動茄檔關閉。
如果gpg.exe是一顫悔亂個不會自動關閉的程序,那麼cmd.exe也會一直等著。

⑥ 如何在cmd命令行下運行php

把你安裝後的php.exe文件路徑添加到系統PATH下,就行了

⑦ request請求相應無法調用cmd

看你的代碼,應該是前台頁面訪問backend.php,參數是「q=home&sid=隨機帶缺數」信行中,你在php里應該取$_REQUEST["q"],而不是$_REQUEST["cmd"],滑山試試.

⑧ 在伺服器上用php調用cmd執行某exe文件,求代碼!!!!

很多情況下需要php調用其他程序如shell命令、shell腳本、可執行程序等等,此時需要使用到諸如exec/system/popen/proc_open等函數,每種函數有各自適合使用的場景以及需要注意的地方。

前提:PHP沒有運行在安全模式
如果PHP運行在安全模式下,那麼在執行外部命令、打開文件、連接資料庫、基於HTTP的認證這4個方面將會受到制約,可能在調用外部程序時無法獲取預期的結果,此時需要設置特定目錄,可以在php.ini中編輯safe_mode_exec_dir參數來指定。

1. exec
原型:string exec ( string command [, array &output [, int &return_var]] )
描述:返回值保存最後的輸出結果,而所有輸出結果將會保存到$output數組,$return_var用來保存命令執行的狀態碼(用來檢測成功或失敗)。
例子:$ret = exec("ls -al", $output, $var);
注意:
A. 輸出結果會逐行追加到$output中,因此在調用exec之前需要unset($output),特別是循環調用的時候。
B.

如果想通過exec調用外部程序後馬上繼續執行後續代碼,僅僅在命令里加"&"是不夠的,此時exec依然會等待命令執行完畢;需要再將標准輸出
做重定向才可以,例如:exec("ls -al >/dev/null &", $output, $var);
C.
要學會善用EscapeShellCmd()和EscapeShellArg()。函數EscapeShellCmd把一個字元串
中所有可能瞞過Shell而去執行另外一個命令的字元轉義。這些字元在Shell中是有特殊含義的,象分號(|),重定向(>)和從文件讀入
(<)等。函數EscapeShellArg是用來處理命令的參數的。它在給定的字元串兩邊加上單引號,並把字元串中的單引號轉義,這樣這個字元串
就可以安全地作為命令的參數。

2. system
原型:string system ( string command [, int &return_var] )
描述:執行給定的命令,返回最後的輸出結果;第二個參數是可選的,用來得到命令執行後的狀態碼。
例子:$ret = system("ls -al", $var);
注意:略。

3. passthru
原型:void passthru (string command [, int return_var])
描述:執行給定的命令,但不返回任何輸出結果,而是直接輸出到顯示設備上;第二個參數可選,用來得到命令執行後的狀態碼。
例子:passthru("ls -al", $var);
注意:略。

4. popen
原型:resource popen ( string command, string mode )

述:打開一個指向進程的管道,該進程由派生給定的 command 命令執行而產生。 返回一個和 fopen()
所返回的相同的文件指針,只不過它是單向的(只能用於讀或寫)並且必須用 pclose() 來關閉。此指針可以用於 fgets(),fgetss()
和 fwrite()。
例子:$fd = popen("command", 'r'); $ret = fgets($fd);
注意:只能打開單向管道,不是'r'就是'w';並且需要使用pclose()來關閉。

5. proc_open

型:resource proc_open ( string cmd, array descriptorspec, array
&pipes [, string cwd [, array env [, array other_options]]] )
描述:與popen類似,但是可以提供雙向管道。具體的參數讀者可以自己翻閱資料,比如該博客:http://hi..com/alex_wang58/blog/item/a28657de16fec55195ee372a.html。
注意:
A. 後面需要使用proc_close()關閉資源,並且如果是pipe類型,需要用pclose()關閉句柄。
B. proc_open打開的程序作為php的子進程,php退出後該子進程也會退出。
C. 筆
者在使用的時候遇到獲取外部程序輸出阻塞的問題,也就是在例子中的fgets($pipes[1])語句阻塞了,無法繼續進行。經過多方查證後發現,問題
一般出在外部程序中,比如外部程序是C程序,使用fprintf(stdin, "****
\n");輸出結果,此時需要加上fflush(stdout);才行,否則輸出結果可能會暫留緩存中,無法真正輸出,而php也就無法獲取輸出了。
例子:
///< 打開管道
$pwd = "*****";
$pipes = array();
$command = "*****";
$desc = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w'));
$handle = proc_open($command, $desc, $pipes, $pwd);
if (!is_resource($handle)) {
fprintf(STDERR, "proc_open failed.\n");
exit(1);
}
///< 讀寫
fwrite($pipes[0], "*****\n");
$ret = rtrim(fgets($pipes[1]), "\n");
///< 關閉管道
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($handle);

⑨ 如何在cmd下面寫php代碼

首先要把php目錄放到環境變數path下面:

我的電腦-》屬性-》高級-》環境變數-》系統變數->Path->編輯->

查看路徑下有沒有php目錄,如果沒有加上

比如我的php路徑是E:AppServphp5 所以要在最後面加上E:AppServphp5;

成功後win+r 調出命令行,輸入php-v 查看版本,如果不對請檢查壞境變數是否設置正確

運行php文件php-f 路徑+文件名 或者php路徑+文件名

(小技巧:windows下面可以把文件直接拖進去,省去cd/命令,或者慢慢拼寫完整路徑)

兩種方法都可以執行命令,如果是.php文件則執行php代碼,否則直接以字元串形式讀取文件

4在命令行直接寫並運行PHP代碼,在windows環境下,盡量使用雙引號, 在linux環境下則盡量使用單引號來完成。php-r 「echo getcwd();」

⑩ 我用php調用了cmd,請問如何獲得他的輸出值

是用system()函數調用的? 如果調用的cmd有輸出,在侍握帶執行php程序的時候 會自動輸出來 如果想在php程序裡面獲老蘆取這個輸出,貌似不行,因為皮返這個函數的返回值是 是否執行成功 可以支一招:調用cmd的時候 順便將輸出寫入一個臨時文件,然後php再讀這個文件

求採納

熱點內容
我的世界怎麼用草來炸伺服器 發布:2024-06-22 00:42:24 瀏覽:238
和平精英伺服器沒響應什麼情況 發布:2024-06-22 00:24:22 瀏覽:794
我的世界國服電腦版怎麼建伺服器 發布:2024-06-22 00:19:13 瀏覽:365
五月安卓手機怎麼樣 發布:2024-06-22 00:17:44 瀏覽:425
安卓系統如何發超長視頻 發布:2024-06-22 00:12:35 瀏覽:425
一字板編程 發布:2024-06-22 00:00:57 瀏覽:815
郭強買源碼 發布:2024-06-21 23:59:01 瀏覽:274
手機里的帳號和密碼在哪裡 發布:2024-06-21 23:54:02 瀏覽:57
伺服器高頻率點擊會怎麼樣 發布:2024-06-21 23:53:50 瀏覽:152
達林控制演算法 發布:2024-06-21 23:41:05 瀏覽:224