php中exec,system等函式的作用

2022-01-22 06:20:58 字數 2565 閱讀 3107

php的內建函式exec,system都可以呼叫系統命令(shell命令),當然還有passthru,escapeshellcmd等函式。

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( )這個函式。

二者不同點:

exec可以把執行的結果全部返回到$output函式裡(陣列),$status是執行的狀態 0為成功 1為失敗

systerm不需要提供$output函式,他是直接把結果返回出來,同樣$return_var是執行的狀態碼 0為成功 1為失敗

下面用實際例子來說明,先來看看html資料夾下都有哪些內容

[root@centos html]# ls

exec.php index.php phpmyadmin system.php

[root@centos html]#

exec.php內容如下:

[root@centos html]# vi exec.php 

<?php

$a = exec("

ls",$out

,$status);

print_r($a);

echo "\n

";print_r($

out);

echo "\n

";print_r($status);

echo "\n

";?>

結果如下:

[root@centos html]# php exec.php 

system.php

array

( [

0] =>exec.php

[1] =>index.php

[2] =>phpmyadmin

[3] =>system.php)0

[root@centos html]#

system.php內容如下:

[root@centos html]# vi system.php 

<?php

$a = system("ls"

,$return_val);

echo

"----------------\n";

print_r($a);

echo "\n

";print_r($return_val);

echo "\n

";?>

結果如下:

[root@centos html]# php system.php 

exec.php

index.php

phpmyadmin

system.php

----------------system.php

0[root@centos html]#

這下就很清晰明白了吧

php中redis memcache等快取的應用

在web開發的過程中快取是必不可少的工具,無論是mamcache還是redis我想大家都很有所涉略。我分享一下我個人在工作中的一些使用後的想法。緩衝應用設計 對於快取的使用我想大家應該都會使用,簡單的key value 我就不多說什麼了 不會用的可以看下手冊 快取無外乎就是在應用於資料庫之間建立乙個...

php中時間戳等相關小概念筆記

獲取當前的時間戳是最簡單的 格式如下 test time 它返回當前的 unix 時間戳.這是返回的結果1487839316 獲取當前日期下的零時零點零分的時間戳 格式如下 tmp1 date y m d h i s mktime 0,0,0,date m date d date y 這個獲取的是當...

ZF等常用php框架中存在的問題

從zend framework v0.13版本開始,我就開始學習使用zend framework。當時公司的乙個專案也恰好用到了zend framework。到了0.6的版本之後就再沒有關注細節了。前些日子聽說zend 公司將在5月份正式推出zend framework,今天特意叫同學 下來測試。最...