導航:首頁 > 程序命令 > php運行linux命令

php運行linux命令

發布時間:2023-02-14 00:05:48

『壹』 php如何執行linux的curl指令

curl 不是即時的輸入輸出的命令,php 有運行時間限制, curl 運行會導致 curl 運行時間不夠而被殺掉的。

php 有運行 linux 命令的函數,記得 system() 是一個,之後還有另外一個。注意這兩個命令是可以在 php.ini/php.conf 裡面設置禁止使用的。

『貳』 php執行linux命令並輸出終端屏幕顯示的內容(實時)

PHP在linux上執行命令

目錄:
一、PHP中調用外部命令介紹
二、關於安全問題
三、關於超時問題
四、關於PHP運行linux環境中命令出現的問題

一、PHP中調用外部命令介紹
在PHP中調用外部命令,可以用,1>調用專門函數、2>反引號、3>popen()函數打開進程,三種方法來實現:

方法一:用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在執行系統外部命令時,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到命令執行後的狀態碼。
<?php
system("pwd",$result);
print $result;//輸出命令的結果狀態碼
?>
關於第二個參數結果狀態碼的簡單介紹:
如果返回0是運行成功,
在Bash中,當錯誤發生在致命信號時,bash會返回128+signal number做為返回值。
如果找不到命令,將會返回127。
如果命令找到了,但該命令是不可執行的,將返回126。
除此以外,Bash本身會返回最後一個指令的返回值。
若是執行中發生錯誤,將會返回一個非零的值。
Fatal Signal : 128 + signo
Can't not find command : 127
Can't not execute : 126
Shell script successfully executed : return the last command exit status
Fatal ring execution : return non-zero

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);
?>

『叄』 php如何實現隨意執行linux命令(任意讀寫,刪除等)

顯然,你要靠php操作其范圍外的文件或目錄是不可能的,這是因為php的運行身份是apache,因此沒辦法操作root許可權的文件或目錄。
我們採取的辦法是,用VC寫個服務,該服務的運行身份是root,也就是給其最大許可權,php調用該服務做操作。
當然還有另外的辦法,這是我的猜測,你不妨試看看,
1、把php的運行用戶改為root,這樣可能會存在一定的風險。
2、在apache裡面指定可以對某個root許可權的文件或目錄做操作,該辦法沒試驗過。如果你能試驗成功的話,希望反饋一下哦。

『肆』 如何通過PHP執行linux命令

首先先要給大家介紹PHP執行linux系統命令的幾個基本函數。
system函數
說明:執行外部程序並顯示輸出資料。
語法:string system(string command, int [return_var]);
返回值: 字元串
詳細介紹:
本函數就像是 C 語中的函數 system(),用來執行指令,並輸出結果。若是 return_var 參數存在,則執行 command 之後的狀態會填入 return_var 中。同樣值得注意的是若需要處理用戶輸入的資料,而又要防止用戶耍花招破解系統,則可以使用 EscapeShellCmd()。若 PHP 以模塊式的執行,本函數會在每一行輸出後自動更新 Web 伺服器的輸出緩沖暫存區。若需要完整的返回字元串,且不想經過不必要的其它中間的輸出界面,可以使用 PassThru()。
實例代碼:
< ?php

$last_line = system('ls', $retval);
echo 'Last line of the output: ' . $last_line;
echo '<hr/>Return value: ' . $retval;
?>
exec函數
說明:執行外部程序。
語法:string exec(string command, string [array], int [return_var]);
返回值: 字元串
詳細介紹:
本函數執行輸入 command 的外部程序或外部指令。它的返回字元串只是外部程序執行後返回的最後一行;若需要完整的返回字元串,可以使用 PassThru() 這個函數。
要是參數 array 存在,command 會將 array 加到參數中執行,若不欲 array 被處理,可以在執行 exec() 之前呼叫 unset()。若是 return_var 跟 array 二個參數都存在,則執行 command 之後的狀態會填入 return_var 中。
值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用 EscapeShellCmd()。
實例代碼:
< ?php
echo exec('whoami');
?>
popen函數
說明:打開文件。
語法:int popen(string command, string mode);
返回值: 整數
詳細介紹:
本函數執行指令開檔,而該文件是用管道方式處理的文件。用本函數打開的文件只能是單向的 (只能讀或只能寫),而且一定要用 pclose() 關閉。在文件操作上可使用 fgets()、fgetss() 與 fputs()。若是開檔發生錯誤,返回 false 值。
實例代碼:
< ?
$fp = popen( "/bin/ls", "r" );
?>
通過上述函數,PHP可以執行linux系統的shell命令。

『伍』 如何通過Linux命令行使用和運行PHP腳本

1. 在安裝完PHP和Apache2後,我們需要安裝PHP命令行解釋器。

復制代碼 代碼如下:

# apt-get install php5-cli
[Debian 及類似系統]# yum install php-cli
[CentOS 及類似系統]

接下來我們通常要做的是,在 /var/www/html (這是 Apache2 在大多數發行版中的工作目錄)這個位置創建一個內容為 <?php phpinfo(); ?> ,名為 infophp.php 的文件來測試(PHP是否安裝正確),執行以下命令即可。

復制代碼 代碼如下:

# echo '<?php phpinfo(); ?>' > /var/www/html/infophp.php

然後,將瀏覽器訪問 http://127.0.0.1/infophp.php ,這將會在網路瀏覽器中打開該文件。

檢查PHP信息

不需要任何瀏覽器,在Linux終端中也可以獲得相同的結果。在Linux命令行中執行 /var/www/html/infophp.php ,如:

復制代碼 代碼如下:

# php -f /var/www/html/infophp.php

從命令行檢查PHP信息

由於輸出結果太大,我們可以通過管道將上述輸出結果輸送給 less 命令,這樣就可以一次輸出一屏了,命令如下:

復制代碼 代碼如下:

# php -f /var/www/html/infophp.php | less

檢查所有PHP信息

這里,『-f『選項解析並執行命令後跟隨的文件。

2. 我們可以直接在Linux命令行使用 phpinfo() 這個十分有價值的調試工具而不需要從文件來調用,只需執行以下命令:

復制代碼 代碼如下:

# php -r 'phpinfo();'

PHP調試工具

這里,『-r『 選項會讓PHP代碼在Linux終端中不帶 < 和 > 標記直接執行。

3. 以交互模式運行PHP並做一些數學運算。這里,『-a『 選項用於以交互模式運行PHP。

復制代碼 代碼如下:

# php -aInteractive shellphp > echo 2+3;5php > echo 9-6;3php >
echo 5*4;20php > echo 12/3;4php > echo 12/5;2.4php > echo
2+3-1;4php > echo 2+3-1*3;2php > exit

輸入 『exit『 或者按下 『ctrl+c『 來關閉PHP交互模式。

啟用PHP交互模式

4. 你可以僅僅將PHP腳本作為shell腳本來運行。首先,創建在你當前工作目錄中創建一個PHP樣例腳本。

復制代碼 代碼如下:

# echo -e '#!/usr/bin/php\n<?php phpinfo(); ?>' > phpscript.php

注意,我們在該PHP腳本的第一行使用 #!/usr/bin/php ,就像在shell腳本中那樣( /bin/bash )。第一行的 #!/usr/bin/php 告訴Linux命令行用 PHP 解釋器來解析該腳本文件。

其次,讓該腳本可執行:

復制代碼 代碼如下:

# chmod 755 phpscript.php

接著來運行它,

復制代碼 代碼如下:

# ./phpscript.php

5. 你可以完全靠自己通過交互shell來創建簡單函數,這你一定會被驚到了。下面是循序漸進的指南。

開啟PHP交互模式。

復制代碼 代碼如下:

# php -a

創建一個函數,將它命名為 addition 。同時,聲明兩個變數 $a 和 $b 。

復制代碼 代碼如下:

php > function addition ($a, $b)

使用花括弧來在其間為該函數定義規則。

復制代碼 代碼如下:

php > {

定義規則。這里,該規則講的是添加這兩個變數。

復制代碼 代碼如下:

php { echo $a + $b;

所有規則定義完畢,通過閉合花括弧來封裝規則。

復制代碼 代碼如下:

php {}

測試函數,添加數字4和3,命令如下:

復制代碼 代碼如下:

php > var_mp (addition(4,3));

樣例輸出

復制代碼 代碼如下:

7NULL

你可以運行以下代碼來執行該函數,你可以測試不同的值,你想來多少次都行。將里頭的 a 和 b 替換成你自己的值。

復制代碼 代碼如下:

php > var_mp (addition(a,b));
php > var_mp (addition(9,3.3));

樣例輸出

復制代碼 代碼如下:

12.3NULL

創建PHP函數

你可以一直運行該函數,直至退出交互模式(ctrl+z)。同時,你也應該注意到了,上面輸出結果中返回的數據類型為 NULL。這個問題可以通過要求 php 交互 shell用 return 代替 echo 返回結果來修復。

只需要在上面的函數的中 『echo『 聲明用 『return『 來替換

替換

復制代碼 代碼如下:

php { echo $a + $b;



復制代碼 代碼如下:

php { return $a + $b;

剩下的東西和原理仍然一樣。

這里是一個樣例,在該樣例的輸出結果中返回了正確的數據類型。

PHP函數

永遠都記住,用戶定義的函數不會從一個shell會話保留到下一個shell會話,因此,一旦你退出交互shell,它就會丟失了。

『陸』 如何讓PHP有許可權執行Linux下的命令

php執行linux的命令用system或exec就可以,只要打開safemode,但是一些系統底層的沒有執行命令的不允許調用哦,實在有些命令例如zip之類想用的話,直接用php寫入一個shell腳本文件再exec那個sh就好了。

閱讀全文

與php運行linux命令相關的資料

熱點內容
js如何運行時編譯 瀏覽:915
引力app在哪裡下載 瀏覽:607
編寫app如何得到錢 瀏覽:800
吉利汽車軟體放哪個文件夾安裝 瀏覽:223
多文件編譯c 瀏覽:541
頭頂加密後為什麼反而更稀疏 瀏覽:793
離心機壓縮機揚程高 瀏覽:658
xshell連接linux命令 瀏覽:5
把多個文件夾的內容合並在一起 瀏覽:483
基於單片機的澆花系統設計ppt 瀏覽:685
卷積碼編解碼及糾錯性能驗證實驗 瀏覽:354
請在刪除驅動器之前暫停加密什麼意思 瀏覽:787
光催化pdf 瀏覽:98
java字元串包含某字元 瀏覽:528
ssm身份認證源碼 瀏覽:466
預排序遍歷樹演算法 瀏覽:671
加密裝置如何打開ping功能 瀏覽:479
python下載372 瀏覽:902
u盤子文件夾隱藏 瀏覽:296
本地誤刪svn文件夾 瀏覽:687