教你使文件PHP上傳生效
PHP經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解PHP了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。PHP是一種用于創(chuàng)建動(dòng)態(tài)WEB頁面的服務(wù)端腳本語言。如同ASP 和ColdFusion,用戶可以混合使用PHP和HTML編寫WEB頁面,當(dāng)訪問者瀏覽到該頁面時(shí),服務(wù)端會(huì)首先對頁面中的PHP命令進(jìn)行處理,然后把處理后的結(jié)果連同HTML內(nèi)容一起傳送到訪問端的瀏覽器。
#T#但是與ASP或ColdFusion不同,PHP是一種源代碼開放程序,擁有很好的跨平臺(tái)兼容性。用戶可以在Windows NT系統(tǒng)以及許多版本的Unix系統(tǒng)上運(yùn)行PHP,而且可以將PHP作為Apache服務(wù)器的內(nèi)置模塊或CGI程序運(yùn)行。除了能夠精確的控制WEB頁面的顯示內(nèi)容之外,用戶還可以通過使用PHP發(fā)送HTTP報(bào)頭。用戶可以通過PHP設(shè)置cookies,管理用戶身份識(shí)別,并對用戶瀏覽頁面進(jìn)行重定向。PHP具有非常強(qiáng)大的數(shù)據(jù)庫支持功能,能夠訪問幾乎目前所有較為流行的數(shù)據(jù)庫系統(tǒng)。此外,PHP可以與多個(gè)外接庫集成,為用戶提供更多的實(shí)用功能,如生成PDF文件等。
用戶可以直接在WEB頁面中輸入PHP命令代碼,因而不需要任何特殊的開發(fā)環(huán)境。在WEB頁面中,所有PHP代碼都被放置在“”中。此外,用戶還可以選擇使用諸如 等的形式。PHP引擎會(huì)自動(dòng)識(shí)別并處理頁面中所有位于PHP定界符之間的代碼。
PHP腳本語言的語法結(jié)構(gòu)與C語言和Perl語言的語法風(fēng)格非常相似。用戶在使用變量前不需要對變量進(jìn)行聲明。使用PHP創(chuàng)建數(shù)組的過程也非常簡單。PHP還具有基本的面向?qū)ο蠼M件功能,可以極大的方便用戶有效組織和封裝自己編寫的代碼。這里給大家介紹一下關(guān)于PHP上傳的問題。
例子1. 使文件PHP上傳生效
請查閱函數(shù) is_uploaded_file() 和 move_uploaded_file() 以獲取進(jìn)一步的信息。以下范例處理由表單提供的文件上傳。
- <?php
- // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
- // of $_FILES.
- $uploaddir = '/var/www/uploads/';
- $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
- echo '<pre>';
- if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
- echo "File is valid, and was successfully uploaded.\n";
- } else {
- echo "Possible file upload attack!\n";
- }
- echo 'Here is some more debugging info:';
- print_r($_FILES);
- print "</pre>";
- ?>
接受PHP上傳文件的腳本為了決定接下來要對該文件進(jìn)行哪些操作,應(yīng)該實(shí)現(xiàn)任何邏輯上必要的檢查。例如可以用 $_FILES['userfile']['size'] 變量來排除過大或過小的文件,也可以通過 $_FILES['userfile']['type'] 變量來排除文件類型和某種標(biāo)準(zhǔn)不相符合的文件,但只把這個(gè)當(dāng)作一系列檢查中的***步,因?yàn)榇酥低耆煽蛻舳丝刂贫?PHP 端并不檢查。自 PHP 4.2.0 起,還可以通過 $_FILES['userfile']['error'] 變量來根據(jù)不同的錯(cuò)誤代碼來計(jì)劃下一步如何處理。不管怎樣,要么將該文件從臨時(shí)目錄中刪除,要么將其移動(dòng)到其它的地方。
如果表單中沒有選擇上傳的文件,則 PHP 變量 $_FILES['userfile']['size'] 的值將為 0,$_FILES['userfile']['tmp_name'] 將為空。如果該文件沒有被移動(dòng)到其它地方也沒有被改名,則該文件將在表單請求結(jié)束時(shí)被刪除。