本文分為五個部分針對php上傳文件進行分析講解,具體內容如下
文件上傳變量
將服務器上的臨時文件移動到指定目錄下
php.ini上傳相關配置
error錯誤號
單文件上傳實例
1.文件上傳變量
- //$_FILES:文件上傳變量
- #name 文件的名稱
- #type 文件的類型
- #tmp_name 臨時文件名
- #size 文件的大小
- #error 錯誤信息
- //Vevb.com
- $filename = $_FILES["myFile"]["name"];
- $type = $_FILES["myFile"]["type"];
- $tmp_name = $_FILES["myFile"]["tmp_name"];
- $size = $_FILES["myFile"]["size"];
- $error = $_FILES["myFile"]["error"];
2.將服務器上的臨時文件移動到指定目錄下
- //1.move_uploaded_file($tmp_name,$destination):將服務器上的臨時文件移動到指定目錄下
- #上傳后文件名字,移動成功返回true,否則返回false
- move_uploaded_file($tmp_name,"D:/".$filename);
- //2.copy($tmp_name,$destination)
- copy($tmp_name,"D:/".$filename);
3.php.ini上傳相關配置
- # file_uploads=On 支持HTTP上傳
- # upload_tmp_dir="" 臨時文件保存的目錄
- # upload_max_filesize=2M 允許上傳文件的最大值
- # max_file_uploads=20 允許一次上傳的最大文件數
- # post_max_size=8M post方式發送數據的最大值
- # max_execution_time = 1 設置了腳本被解析器終止之前允許的最大執行時間,單位為秒,防止程序寫的不好而占盡服務器資源
- # max_input_time = 60 腳本解析輸入數據允許的最大時間,單位為秒
- # max_input_nesting_level = 64 設置輸入變量的嵌套深度
- # max_input_vars = 1000 接受多少輸入的變量
- # memory_limit = 128M 最大單線程的獨立內存使用量
4.error錯誤號
- # 0,沒有錯誤發生,文件上傳成功。
- # 1,上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
- # 2,上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
- # 3,文件只有部分被上傳。
- # 4,沒有文件被上傳。
- # 6,找不到臨時文件夾。
- # 7,文件寫入失敗。
- # 8,上傳的文件被PHP擴展程序中斷
5.單文件上傳實例
form.html
- <meta charset="UTF-8">
- <title>Document</title>
- <form action="fileUpload.php" method="post" enctype="multipart/form-data">
- 請選擇你要上傳的文件:
- <input type="file" name="myFile"><br>
- <input type="submit" value="上傳文件">
- <!--限制客戶端上傳文件的最大值 隱藏域另起一行-->
- <!--<input type="hidden" name="MAX_FILE_SIZE" value="字節數">-->
- <!--accept設置上傳文件的類型-->
- <!--<input type="file" name="myfile" accept="image/jpg,image/png,image/gif">-->
- </form>
fileUpload.php
- header("content-type:text/html;charset:utf-8");
- $fileInfo = $_FILES["myFile"];
- $filename = $fileInfo["name"];
- $type = $fileInfo["type"];
- $error = $fileInfo["error"];
- $size = $fileInfo["size"];
- $tmp_name = $fileInfo["tmp_name"];
- $maxSize=2*1024*1024;//允許的最大值
- $allowExt=array("jpeg","jpg","gif");
- $flag = true;//檢測是否為真實的圖片類型
- //判斷錯誤號
- if($error == 0){
- //判斷上傳文件的大小
- if($size>$maxSize){
- exit("上傳文件過大");
- }
- //檢測文件類型
- //取出文件擴展名
- $ext = pathinfo($filename,PATHINFO_EXTENSION);
- if(!in_array($ext,$allowExt)){
- exit("非法文件類型");
- }
- //檢測是否為真實的圖片類型
- if($flag){
- if(@!getimagesize($tmp_name)){
- exit("不是正的圖片類型");
- }
- }
- //創建目錄
- $path = "D:/test/";
- if(!file_exists($path)){
- mkdir($path,0777,true);
- chmod($path,0777);
- }
- //確保文件名唯一,防止重名覆蓋
- $uniName = md5(uniqid(microtime(true),true)).".".$ext;
- $destination = $path.$uniName;
- if(@move_uploaded_file($tmp_name,$destination)){
- echo "上傳成功";
- }else{
- echo "上傳失敗";
- }
- }else{
- switch($error){
- case 1:
- case 2:
- case 3:
- case 4:
- case 6:
- case 7:
- case 8:
- echo "上傳錯誤";
- break;
- }
- }
新聞熱點
疑難解答