通過 PHP,可以把文件上傳到服務器。通過$_FILES
可以獲取文件上傳的相關信息;從而對文件進行操作。經過我的科學研究,發明了許多奇奇怪怪的問題;經過我的認真思考,終於;還是沒能解決。最後一邊百度一邊思考。
enctype="multipart/form-data"
進行編碼accept
設置文件上傳的類型,然並卵,設置了用戶還是能更改,所以需要php驗證(接收兩種值MINE TYPE和文件擴展名)isset
吞掉Undefined index
的警告$_SERVER['PHP_SELF']
提高代碼的魯棒性<?php if($_SERVER['REQUEST_METHOD']==='POST'){ echo '1111'; var_dump($_FILES['file']); } ?> ... <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="source">文件</label> <input type="file" name="file" accept="image/*"> </div> <button>保存</button> </form>
$_FILES["file"]["name"] - 上傳文件的名稱 $_FILES["file"]["type"] - 上傳文件的類型 $_FILES["file"]["size"] - 上傳文件的大小,以字節計 $_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱(這裏使用的是wampserver服務器,所以是wamp臨時文件夾,打開該文件夾,可以看到會有一個文件生成然後就清除了) $_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼
$file = $_FILES['file']; if(strpos($file['type'],'image/')!==0){ echo '文件不爲圖片類型'; }
if ($file['size'] > 1 * 1024 * 1024) { echo '上傳文件過大'; return; }
move_uploaded_file
移動文件// 1. 移動到我們網站根目錄下uploads文件夾下,爲了防止重名,使用產生uniqid隨機數 $tmp = $file['tmp_name']; $target = './uploads/'.uniqid().$file['name']; $moved = move_uploaded_file($tmp,$target);
iconv('UTF-8', 'GBK', $file['name']
很多時候我們都會報錯1,或則有時候發現文件移動不了,除了中文問題,基本是後臺進行了設置。
我移動圖片基本沒問題,但移動音樂文件時就報了1這個錯誤;後來我做了多次臨牀試驗…
發現是文件太大導致移動不成功;我查看了文檔修改了php限制問題
我這裏使用的是wampserver服務器,所以我找到wamp\bin\php\php5.4.12
下的php.ini
file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認爲ON即是開 upload_tmp_dir ;文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾 file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認爲ON即是開 upload_tmp_dir ;文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾
然而還是沒有成功,我轉頭一想,這是服務器的問題,應該是該Apache下的php.ini,所以我找到了wamp\bin\apache\Apache2.4.4\bin
下的php.ini;最好試驗成功了
如果在不行,可以在進一步配置
max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒 max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒 memory_limit = 8m ;每個PHP頁面所吃掉的最大內存,默認8M
當然文件上傳失敗我們也需要做處理
if ($file['error'] !== UPLOAD_ERR_OK) { echo '文件上傳失敗'; return; }
上傳成功在移動文件
使用multiple上傳多個文件;在name值裏面加上[]
來接收多個文件
<input type="file" name="image[]" accept="image/*" multiple>
結果打印var_dump($_FILES['image']);
的結果是不一樣
我們獲取關聯數組,右邊的值是一個數組,所以我們需要在進行遍歷,跟單個文件獲取是不一樣結果