php上傳檔案常見問題總結

2022-10-06 11:03:19 字數 2893 閱讀 4371

把php上傳檔案時經常碰到的幾個問題總結一下吧,以後用到時不用再去找了。

1.先做個最簡單的上傳檔案

複製** **如下:  

enctype="multipart/form-data">

filename:   

複製** **如下:

<?php

if (($_files["file"]["size"] < 20000)

else

else

}}else

?>

2.然後了解超級全域性變數$_files的值

複製** **如下:

$_files['userfile']['name']

$_files['userfile']['type']

$_files['userfile']['size']

$_files['userfile']['tmp_name']

$_files['userfile']['error']

其中,$_files['userfile']['error']的所有值:

upload_err_ok 其值為 0,沒有錯誤發生,檔案上傳成功。

upload_err_ini_size 其值為 1,上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。

upload_err_form_size 其值為 2,上傳檔案的大小超過了 html 表單中 max_file_size 選項指定的值。

upload_err_partial 其值為 3,檔案只有部分被上傳。

upload_err_no_file 其值為 4,沒有檔案被上傳。

upload_err_no_tmp_dir 其值為 6,找不到臨時資料夾。php 4.3.10 和 php 5.0.3 引進。

upload_err_cant_write 其值為 7,檔案寫入失敗。php 5.1.0 引進。

3.很多情況:需要嚴格判斷上傳檔案型別

我們知道使用$_files['userfile']['type']判斷上傳檔案型別是乙個很不明智的做法,因為該判斷依據是檔案的字尾名,任何人都可以將乙個***檔案的字尾改成jpg從而偽裝成進行上傳,因此php官方建議使用php的擴充套件php_fileinfo來判斷檔案的mime,開啟拓展的方法百度一下有很多,win和linux略有不同。

4.情景一:上傳檔案重名後自動重新命名

複製** **如下:

if (file_exists("./upload/" . $_files["file"]["name"])) 

$upload_filename = $_files['file']['name'];                                           

$filename = substr($upload_filename,0,strrpos($upload_filename,".")).$suffix.".".substr($upload_filename,strrpos($_files["file"]["name"],".")+1);

}while(file_exists("./upload/".$filename)); 

move_uploaded_file($_files["file"]["tmp_name"],"./upload/" . $filename); 

}else 

5.情景二:根據日期分目錄上傳檔案

複製** **如下:

$structure = './'.date("y").'/'.date("m").'/'.date("d").'/';

if (!mkdir($structure, 0777, true))

move_uploaded_file($_files["file"]["tmp_name"],$structure . $_files["file"]["name"]);

6.情景三:多檔案上傳

複製** **如下:

複製** **如下:

<?php

foreach ($_files["pictures"]["error"] as $key => $error)

} ?>

有的情況下多檔案的這種變數結構並不好用:

複製** **如下:

array(1)

["type"]=>array(2)

}}很多情況下我們需要的是類似這樣的結構

複製** **如下:

array(1) ,

[1]=>array(2) }}

使用下面的函式就能輕鬆轉化結構

複製** **如下:

function diverse_array($vector)

$upload = diverse_array($_files["upload"]);

7. 有的時候:需要配置伺服器修改最大上傳檔案大小

首先,在表單上

"max_file_size" value="位元組" />

可以限制上傳檔案大小(可以被繞過)。

然後在伺服器上也需要調整一下配置

php.ini:

max_execution_time = 30 每個指令碼執行的最長時間,單位秒

max_input_time = 60,每個指令碼可以消耗的時間,單位也是秒

memory_limit = 128m,這個是指令碼執行最大消耗的記憶體

post_max_size = 8m,表單提交最大資料為 8m,此項不是限制上傳單個檔案的大小,而是針對整個表單的提交資料進行限制的。

upload_max_filesize = 2m ,上載檔案的最大許可大小

nginx:

複製** **如下:

location /

以上就是常見的問題的處理方法了,希望大家能夠喜歡。

本文標題: php上傳檔案常見問題總結

本文位址:

安裝php常見問題總結

php7.1版本出現call to undefined function mysql connect 通過通過第三方yum remi源 安裝指定7.1版本的php。用資料庫連線不上,是寫用了mysqli擴充套件去連線的。顯示未成功定義mysqli connect 的!rpm qa grep mysq...

PHP函式之CURL 常見問題總結

一.請求返回 400 bad request 錯誤,可能原因 1.url位址有誤.手動在位址列裡輸入url看看請求是否正常.注意 如果url位址裡面包含換行符也有可能返回400.2.https請求需要設定對應引數 3.url中傳遞的字串需要url encode轉碼 二.允許url重定向的設定 cur...

PHP函式之CURL 常見問題總結

一.請求返回 400 bad request 錯誤,可能原因 1.url位址有誤.手動在位址列裡輸入url看看請求是否正常.注意 如果url位址裡面包含換行符也有可能返回400.2.https請求需要設定對應引數 3.url中傳遞的字串需要url encode轉碼 二.允許url重定向的設定 cur...