Linux下的編程PHP高級技巧全放送(二)

四、PHP和文件系統的維護

PHP中有許多與文件系統有關的函數,這些函數不僅可以打開文件,還可以顯示目錄中的內容、移動文件和其他一些功能,許多人甚至用PHP開發基于互聯網的文件資源管理器。

關于文件路徑的解釋:在Windows中,可以在路徑中使用/和符號,而在其他的操作系統中只能使用/符號。出于一致性的緣故,我們統一使用/符號。

下面的腳本樣例可以顯示一個目錄清單,注釋已經包含在代碼中:

<? /*把要讀取的目錄的全路徑名存入一個名字爲$dir_name的變量中。 */

$dir_name = "/home/me/";

/* 創建一個句柄,其值是打開一個給定目錄的結果*/

$dir = opendir($dir_name);

/* 建立一個文字塊,用以放置列表元素(文件名字)*/

$file_list = "<ul>";

/* 使用一個while語句,讀取已經打開的目錄中的所有元素,如果文件的名字不是“.”或“..”,則顯示列表中的名字*/

while ($file_name = readdir($dir)) {

if (($file_name != ".") && ($file_name != "..")) {

$file_list .= "<li>$file_name";

}

}

$file_list .= "</ul>";

/*關閉打開的目錄,結束PHP模塊*/

closedir($dir);

?>

<!-- Start your HTML -->

<HTML>

<HEAD>

<TITLE>Directory Listing</TITLE>

</HEAD>

<BODY>

<!-- Use PHP to print the name of the directory you read -->

<P>Files in: <? echo "$dir_name"; ?></p>

<!-- Use PHP to print the directory listing -->

<? echo "$file_list"; ?>

</BODY>

</HTML>

好了,我們已經得到了一個目錄清單。需要注意的是,要讀取一個文件(稍後我們將進行講解)或目錄的內容,PHP運行的系統上的用戶必須至少有讀取文件的權限。

下面是一個如何拷貝文件的例子:

<? /*把你要拷貝的原文件的全路徑賦給一個名字爲$original的變量中,把拷貝的文件的全路徑賦予一個名字爲$copied的變量中*/

$original = "/home/me/mydatabasedump";

$copied = "/archive/mydatabasedumo_1010";

/* 使用copy()函數拷貝原始文件,如果拷貝沒有完成則會顯示一個錯誤信息*/

@copy($original, $copied) or die("Couldn't copy file.");

?>

這個例子是一個文件備份系統的原型。在這段腳本運行時,它把文件拷貝到一個不同的位置進行保存。稍微修改一下守護程序,就可以在一天中你指定的時刻執行它,而無需用戶的幹預。

假定你在系統上安裝了Lynx,可以創建一個守護程序的條目訪問這個文件,訪問這個文件會運行這個腳本並建立一個拷貝文件,下面的例子將在上午5點鍾運行這個腳本,然後關閉Lynx:

0 5 * * * [username] lynx -dump http://localhost/copyfile.php 1>/dev/null 2>&1

如果運行的是CGI版本的PHP,可以跳過Lynx部分,而直接調用二進制文件:

0 5 * * * [username] php /path/to/copyfile.php 1>/dev/null 2>&1

五、豐富的數組函數

PHP 4.0中新添加了30個與組數有關的函數,其中一些常見的函數可以判斷一個數組中是否包含某個元素,對一個數組中的元素進行計數,添加或刪除數組中的元素或者對數組中的元素進行排序。

如果有一個很大的數組,而你需要找出其中是否包含一個特定的元素,就可以使用in_array()。下面的例子將顯示“Not found in this array”,因爲在一個名字爲$namesArray的數組中查找Albert,而在$namesArray數組中不存在這樣一個元素。

<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");

$lookingFor = "Albert";

if (in_array($lookingFor, $namesArray)) {

echo "You've found it!";

} else {

echo "Not found in this array!";

}

?>

如果把$lookingFor的值改爲Mary,就會得到“You've found it!”的信息,因爲Mary是$namesArray數組中的一個元素。

如果要對一個數組中的元素個數進行計數,只要簡單地使用count()函數即可:

<? $namesArray = array("Joe", "Jane", "Bob", "Mary", "Paul", "Eddie", "John");

$count = count($namesArray); ?>

返回的$count的值爲7。

可以在一個數組的開頭或結尾處添加元素,還可以使用array_merge()來建立一個包含二個或更多數組中元素的新數組,合並時,元素的順序會按指定的順序排列,如果原來的數組是被排過序的,在合並後需要對它重新排序。

我們可以首先利用array_push()在數組的結尾處添加一個元素:

<? /* 建立一個數組 */

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 向數組中添加元素 */

array_push($fruitArray, "grape", "pineapple", "tomato");

/*顯示每個元素及其序號*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

?>

運行上面的程序將得到下面的結果:

0 : apple

1 : orange

2 : banana

3 : kiwi

4 : pear

5 : grape

6 : pineapple

7 : tomato

如果需要在數組的開頭添加元素,其代碼與上面的代碼差不多,唯一的不同之處是需要用array_unshift()代替array_push()。

<?

/* 建立一個數組*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 向數組中添加元素*/

array_unshift($fruitArray, "grape", "pineapple", "tomato");

/* 顯示每個元素及其序號*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

?>

運行上面的程序將得到下面的結果:

0 : grape

1 : pineapple

2 : tomato

3 : apple

4 : orange

5 : banana

6 : kiwi

7 : pear

array_merge()函數可以把二個或更多的數組合並爲一個數組。

<? /*建立第一個數組*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/*/建立第二個數組*/

$vegArray = array("carrot", "green beans", "asparagus", "artichoke", "corn");

/*把這二個數組合並爲一個數組*/

$goodfoodArray = array_merge($fruitArray, $vegArray);

/* 顯示每個元素及其序號*/

while (list($key,$value) = each($goodfoodArray)) {

echo "$key : $value<br>";

}

?>

運行上面的腳本將得到下面的結果:

0 : apple

1 : orange

2 : banana

3 : kiwi

4 : pear

5 : carrot

6 : green beans

7 : asparagus

8 : artichoke

9 : corn

現在我們已經掌握了如何添加元素和合並數組,我們再來看看如何從一個數組中刪除元素。從一個數組的末尾刪除一個元素可以使用array_pop()函數,使用array_shift()函數可以從一個數組的開頭刪除一個元素。盡管使用array_pop()或 array_shift()從數組中刪除了一個元素,你還可以把這個元素當作一個變量來使用。

使用array_pop()從一個數組的末尾刪除一個元素:

<?

/*建立一個數組*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 從數組的末尾刪除一個元素*/

$popped = array_pop($fruitArray);

/* 顯示刪除後數組的內容和你刪除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

echo "<br>and finally, in $popped: $popped";

?>

運行上面的腳本會得到下面的結果:

0 : apple

1 : orange

2 : banana

3 : kiwi

and finally, in $popped: pear

我們再來討論一個從一個數組的末尾刪除元素的例子:

<?

/* 建立一個數組*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/*從一個數組的開始刪除一個元素*/

$shifted = array_shift($fruitArray);

/* 顯示刪除後數組的內容和你刪除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";

}

echo "<br>and finally, in $shifted: $shifted";

?>

運行上述腳本會得到如下的顯示結果:

0 : orange

1 : banana

2 : kiwi

3 : pear

and finally, in $shifted: apple

另外還有幾個函數可以對數組中的元素進行排序,但在這裏我們將只簡要介紹基本的排序函數,說明排序的過程:

<? /*建立一個數組*/

$fruitArray = array("apple", "orange", "banana", "kiwi", "pear");

/* 對數組進行排序*/

sort($fruitArray);

/*顯示每個元素及其序號*/

while (list($key,$value) = each($fruitArray)) {

echo "$key : $value<br>";<

Linux下的編程PHP高級技巧全放送(二)
  四、PHP和文件系統的維護  PHP中有許多與文件系統有關的函數,這些函數不僅可以打開文件,還可以顯示目錄中的內容、移動文件和其他一些功能,許多人甚至用PHP開發基于互聯網的文件資源管理器。  關于文件路徑...查看完整版>>Linux下的編程PHP高級技巧全放送(二)
 
Linux下的編程PHP高級技巧全放送(三)
  六、動態圖像的創建  只要安裝一些第三方的庫文件並具有一定的幾何知識,就可以利用PHP來創建和處理圖像了。事實上,這不需要太多的幾何知識,因爲我大學沒有畢業,仍然可以利用PHP創建圖像。  在使用基本的...查看完整版>>Linux下的編程PHP高級技巧全放送(三)
 
PHP高級技巧全放送(1)
全球超過300萬個互聯網網站的管理員都在使用PHP,使得它成爲最爲普及的服務器端腳本語言之一。其特點是運行速度快、穩定可靠、跨平台,而且是開放源代碼軟件。隨你使用的水平不同,PHP可以很簡單,也可以很複雜,可以...查看完整版>>PHP高級技巧全放送(1)
 
PHP高級技巧全放送(2)
三、文件是我們的朋友無論你在開發的網站規模的大小,都應該意識到代碼重用的重要性,無論這些代碼是HTML、還是PHP代碼。例如,你必須至少每年改變一次包含版權信息的頁腳,如果你的網站含有1000個頁面,每年修改一次...查看完整版>>PHP高級技巧全放送(2)
 
PHP高級技巧全放送(3)
六、動態圖像的創建只要安裝一些第三方的庫文件並具有一定的幾何知識,就可以利用PHP來創建和處理圖像了。事實上,這不需要太多的幾何知識,因爲我大學沒有畢業,仍然可以利用PHP創建圖像。在使用基本的圖像創建函數...查看完整版>>PHP高級技巧全放送(3)
 
PHP高級技巧全放送
全球超過300萬個互聯網網站的管理員都在使用PHP,使得它成爲最爲普及的服務器端腳本語言之一。其特點是運行速度快、穩定可靠、跨平台,而且是開放源代碼軟件。隨你使用的水平不同,PHP可以很簡單,也可以很複雜,可以...查看完整版>>PHP高級技巧全放送
 
構建Linux下的安全 PHP配置漏洞攻擊
  這些站點的問題主要出在允許使用system(),exec()等等這些函數,熟悉PHP的朋友應該知道,這些函數是調用系統指令的(雖然通過web server PHP程序只能有nobody權限),而且一般用戶只要申請一個空間就可以獲取...查看完整版>>構建Linux下的安全 PHP配置漏洞攻擊
 
linux編程:PHP執行root命令
  在玩C以前玩過一段時間的PHP,哪個時候需要用PHP來運行root命令,一直未果,直到有一天搜索到了super這個插件.  隨著玩C的日子多了.發現可以用C語言來包裹要運行的外部命令.實驗了一下.成功了.  不需要任何外部...查看完整版>>linux編程:PHP執行root命令
 
構建Linux下的安全,PHP配置漏洞攻擊
  這些站點的問題主要出在允許使用system(),exec()等等這些函數,熟悉php的朋友應該知道,這些函數是調用系統指令的(雖然通過web server php程序只能有nobody權限),而且一般用戶只要申請一個空間就可以獲取局部的可寫...查看完整版>>構建Linux下的安全,PHP配置漏洞攻擊
 
 
回到王朝網路移動版首頁