淺談P教程之十大經驗技巧(3)_PHP教程
推薦:如何在PHP中實現文件的上傳功能PHP同樣支持上傳文件的功能,但并不是所有支持PHP的網站都支持此功能,特別是免費的網站。 實現上傳,首先要在HTML上加入上傳文件的FORM>表格。 form method=post action=upload.php ENCTYPE=multipart/form-data> input type=file name=upload_file> inp
三、文件是我們的朋友
無論你在開發的網站規模的大小,都應該意識到代碼重用的重要性,無論這些代碼是HTML、還是PHP代碼。例如,你必須至少每年改變一次包含版權信息的頁腳,如果你的網站含有1000個頁面,每年修改一次也是個很煩人的事兒。
在PHP中,至少有幾個函數可以幫助你實現代碼重用的目的,所使用的函數取決于你所重用的代碼,主要的函數有:
* include() and include_once()
* require() and require_once()
include()函數包含并對給定的文件進行計算,例如:
include('/home/me/myfile');
在include文件中的任何代碼都在include()出現的代碼范圍內執行,你可以通過聯合使用include()和fopen()在自己的服務器上包含靜態文件,在另一臺服務器上包含目標文件。
include_once()的功能與include()相同,二者之間的區別在于它會檢查一個文件中的代碼是否已經包含在現有的腳本中,如果代碼已經存在,則不會再次包含它。
require()函數用給定文件的內容取代它本身,這一代替過程發生在PHP引擎編譯代碼期間,而不是在執行期間進行,它不象include()那樣會首先進行計算。require()函數更多地用在靜態元素中,而include()更多地用于動態元素中。與include_once()類似的是,require_once()將首先檢查是否已經插入給定的代碼,如果代碼已經存在,就不再插入了。
為也了解其內容,在版權信息、靜態文字和其他不包含變量的元素或者依賴其他正在執行的腳本的元素中我更趨向于使用require函數。例如:
<HTML>
<HEAD><TITLE>Something</TITLE></HEAD>
<BODY>
[a lot of content]
<?
// insert copyright
require('/home/me/mycopyright');
?>
</BODY>
</HTML>
另一方面,我經常在文件的開始使用include()來控制許多的函數:
<?
//得到函數庫
include('/home/me/myfunctions');
// do PHP things with my functions ?>
<HTML>
<HEAD><TITLE>Something</TITLE></HEAD>
<BODY>
[a lot of content]
</BODY>
</HTML>
下一個問題就該是“include和require文件在哪里?”,對這個問題簡單的回答是,“系統中的任意地方。”如果你的代碼中包含有帶有用戶名和口令的數據庫連接,你肯定不會將它們都放在文檔根目錄中向所有的人都開放。
included或required文件可以在系統上的任何地方,只要PHP運行的系統上的用戶可以訪問這些文件即可,你可以使這些文件具有任何后綴,或者不使用后綴。
使用include()和require()對在網站中的元素進行具體化是一種普遍的現象,并在需要對網站升級時,給你帶來很大的方便。
四、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個與組數有關的函數,其中一些常見的函數可以判斷一個數組中是否包含某個元素,對一個數組中的元素進行計數,添加或刪除數組中的元素或者對數組中的元素進行排序。
分享:談PHP本地調試環境簡易安裝配置對于PHP的應用,我個人比較傾向于使用Linux的操作系統下的Apache PHP Mysql(或者Oracle)配置,而不建議使用Windows系統構建PHP作業服務器。理由很簡單,PHP的原型就是基于Linux系統開發的一個Web服務工具,雖然也為了方便移植到window系統,但是卻有相當部分
- 相關鏈接:
- 教程說明:
PHP教程-淺談P教程之十大經驗技巧(3)
。