在php中文件上傳我們都是利用表單的post來實例了,注意:標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型.在表單需要二進制數據時,比如文件內容,請使用 /"multipart/form-data/"
這是一種非常簡單文件上傳方式.基于安全方面的考慮,您應當增加有關什么用戶有權上傳文件的限制.
實例代碼如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <meta http-equiv="Content-Language" content="zh-cn" />
- </head>
- <body>
- <form action="/upload.php" method="post" enctype="multipart/form-data">
- <label for="file">Filename:</label>
- <input type="file" name="file" id="file" /><br />
- <input type="submit" name="submit" value="Submit" />
- </form>
- <?php
- if($_POST){
- if ( $_FILES["file"]["size"] < 2000000 )
- {
- if ($_FILES["file"]["error"] > 0)
- {
- echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
- }
- else
- {
- echo "Upload: " . $_FILES["file"]["name"] . "<br />";
- echo "Type: " . $_FILES["file"]["type"] . "<br />";
- echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
- echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
- if (file_exists("upload/" . $_FILES["file"]["name"]))
- {
- echo $_FILES["file"]["name"] . " already exists. ";
- }
- else
- {
- move_uploaded_file($_FILES["file"][],
- "upload/" . $_FILES["file"]["name"]);
- echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
- }
- }
- }
- else
- {
- echo "Invalid file";
- }
- }
- ?>
- </body>
- </html>
第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error".就像這樣:
$_FILES["file"]["name"] - 被上傳文件的名稱
$_FILES["file"]["type"] - 被上傳文件的類型
$_FILES["file"]["size"] - 被上傳文件的大小,以字節計
$_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱
$_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼
首先是上傳的提交頁面upfile.html
實例代碼如下:
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <form action="upload.php" enctype="multipart/form-data" method="POST">
- <input type="hidden" name="max_file_size" value="33554432">
- <input type="file" name="file">
- <input type="submit" name="submit" value="上傳" />
- </form>
1. PHP支持HTML以POST的方法傳輸文件,但是form中必須聲明enctype的屬性="multipart/form-data",否則整個form表單將不起任何作用.
2. form表單中必須含有一個name為MAX_FILE_SIZE的隱藏域,這個隱藏域用來指定用戶最大能上傳的文件大小,必須聲明在所有其他input標簽之前.如果文件超大的話,瀏覽器直接就可以給出提示,不必浪費上傳的時間.
下面就是上傳處理文件upload.ph,實例代碼如下:
- <?php
- /* 設定上傳目錄 */
- $dest_dir='uploads';
- /* 檢測上傳目錄是否存在 */
- if( !is_dir($dest_dir) || !is_writeable($dest_dir) )
- {
- die("上傳目錄 ".$dest_dir." 不存在或無法寫入");
- }
- /* 設置允許上傳文件的類型 */
- $type=array("rar","zip","txt","c");
- /* 獲取上傳文件信息 */
- $upfile=&$HTTP_POST_FILES['file'];
- /* 獲取文件后綴名函數 */
- function fileext($filename)
- {
- return substr(strrchr($filename, '.'), 1);
- }
- /* 判斷上傳文件類型 */
- if( !in_array( strtolower( fileext($upfile['name'] ) ),$type) )
- {
- $text=implode(",",$type);
- echo "對不起,您只能上傳以下類型文件: ",$text,"<br>";
- }
- else
- {
- /* 設置文件名為"日期_文件名" */
- $dest=$dest_dir.'/'.date("ymdHis")."_".$upfile['name'];
- /* 移動上傳文件到指定文件夾 */
- $state=move_uploaded_file($upfile['tmp_name'],$dest);
- if ($state)
- {
- print("文件上傳成功!<br>");
- print("文件名:".$dest."<br>");
- print("上傳的文件大小:".( round($upfile['size'] / 1024,2) )." KB<br>");
- }
- else
- {
- /* 處理錯誤信息 */
- switch($upfile['error'])
- {
- case 1 : die("上傳文件大小超出 php.ini:upload_max_filesize 限制<br>");
- case 2 : die("上傳文件大小超出 MAX_FILE_SIZE 限制<br>");
- case 3 : die("文件僅被部分上傳<br>");
- case 4 : die("沒有文件被上傳<br>");
- case 5 : die("找不到臨時文件夾<br>");
- case 6 : die("文件寫入失敗<br>");
- }
- }
- }
- ?>
新聞熱點
疑難解答