PHP實(shí)現(xiàn)文件上傳與下載的示例代碼
PHP文件上傳下載
1、環(huán)境配置
修改 PHP.ini 配置文件可以定制上傳機(jī)制,通過(guò) phpinfo() 函數(shù)可以查看到 PHP.ini 文件所在位置。
配置 | 說(shuō)明 |
---|---|
file_uploads | 是否允許上傳文件,On 開(kāi)啟 Off 禁止上傳 |
upload_tmp_dir | 文件上傳過(guò)程中臨時(shí)保存的目錄,默認(rèn)保存位置為 /tmp |
upload_max_filesize | 允許上傳的最大文件大小,可以使用 K、M、G 單位如 2M |
post_max_size | PHP 將接受的最大 POST 數(shù)據(jù)大小,包括上傳文件、表單數(shù)據(jù)。所以 post_max_size 要大于 upload_max_filesize |
max_file_uploads | 單個(gè)請(qǐng)求時(shí),允許上傳的最大文件數(shù)量 |
2、超全局?jǐn)?shù)組
上傳的文件保存在 $_FILES
超全局?jǐn)?shù)組中,具體參數(shù)說(shuō)明如下:
選項(xiàng) | 說(shuō)明 |
---|---|
tmp_name | 臨時(shí)文件名 |
name | 上傳文件原文件名 |
type | 文件 MIME 類(lèi)型 |
error | 錯(cuò)誤編號(hào) |
size | 文件大小,單位字節(jié) |
//index.html <form action="./server.php" enctype="multipart/form-data" method="post"> <label> <input type="file" name="files" value="" > </label> <button type="submit">提交</button> </form> //server.php print_r($_FILES); /* Array ( [files] => Array ( [name] => Key.txt [full_path] => Key.txt [type] => text/plain [tmp_name] => C:\wamp64\tmp\php665C.tmp [error] => 0 [size] => 54 ) ) */
3、錯(cuò)誤說(shuō)明
上傳出錯(cuò)會(huì)在$_FILES[‘error’] 選項(xiàng)中體現(xiàn),具體錯(cuò)誤說(shuō)明如下:
UPLOAD_ERR_OK (0): 沒(méi)有錯(cuò)誤,文件上傳成功。
UPLOAD_ERR_INI_SIZE (1): 上傳的文件大小超過(guò)了php.ini中upload_max_filesize指令所設(shè)置的大小限制。
UPLOAD_ERR_FORM_SIZE (2): 上傳的文件大小超過(guò)了HTML表單中MAX_FILE_SIZE指令所設(shè)置的大小限制。
UPLOAD_ERR_PARTIAL (3): 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE (4): 沒(méi)有文件被上傳。
UPLOAD_ERR_NO_TMP_DIR (6): 找不到臨時(shí)文件夾。
UPLOAD_ERR_CANT_WRITE (7): 文件寫(xiě)入失敗。
UPLOAD_ERR_EXTENSION (8): 由于PHP擴(kuò)展的限制,文件上傳被停止。
4、上傳安全
檢測(cè)文件是否是合法的上傳文件,以保證安全。
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 檢查文件是否成功上傳 if (isset($_FILES['file_name']) && $_FILES['file_name']['error'] === UPLOAD_ERR_OK) { // 文件上傳成功 $tempFilePath = $_FILES['file_name']['tmp_name']; $fileName = $_FILES['file_name']['name']; // 執(zhí)行進(jìn)一步的處理操作 // ... echo "文件上傳成功!"; } else { // 文件上傳失敗或未選擇文件 echo "文件上傳失??!"; } } ?>
5、處理類(lèi)
下面是支持單文件、多文件上傳的處理類(lèi)。
index.html
<form action="./server.php" method="post" enctype="multipart/form-data"> <input type="file" name="image"> <input type="file" name="image[]"> <input type="file" name="image[]"> <button class="btn">提交</button> </form>
server.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 檢查是否有文件上傳 if (isset($_FILES['images'])) { $fileCount = count($_FILES['images']['name']); // 遍歷每個(gè)上傳的文件 for ($i = 0; $i < $fileCount; $i++) { // 檢查文件是否成功上傳 if ($_FILES['images']['error'][$i] === UPLOAD_ERR_OK) { $tempFilePath = $_FILES['images']['tmp_name'][$i]; $fileName = $_FILES['images']['name'][$i]; // 執(zhí)行進(jìn)一步的處理操作 // ... echo "文件 $fileName 上傳成功!<br>"; } else { // 文件上傳失敗或未選擇文件 echo "文件上傳失??!<br>"; } } } else { // 沒(méi)有文件被上傳 echo "沒(méi)有文件被上傳!<br>"; } }
6、文件下載
$file = "dog.jpg"; $fileName = basename($file); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename={$fileName}"); header("Accept-ranges: bytes"); header("Content-Length: " . filesize($file)); readfile($file);
到此這篇關(guān)于PHP實(shí)現(xiàn)文件上傳與下載的示例代碼的文章就介紹到這了,更多相關(guān)PHP文件上傳與下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php模擬用戶自動(dòng)在qq空間發(fā)表文章的方法
這篇文章主要介紹了php模擬用戶自動(dòng)在qq空間發(fā)表文章的方法,可實(shí)現(xiàn)模擬用戶提交表單發(fā)布文章的功能,代碼中包含有較為詳盡的注釋便于理解,需要的朋友可以參考下2015-01-01使用php自動(dòng)備份數(shù)據(jù)庫(kù)表的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇使用php自動(dòng)備份數(shù)據(jù)庫(kù)表的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07PHP swoole和redis異步任務(wù)實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP swoole和redis異步任務(wù)實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式對(duì)比分析了swoole和redis異步任務(wù)具體實(shí)現(xiàn)方法及區(qū)別,需要的朋友可以參考下2019-08-08PHP管理依賴(lài)(dependency)關(guān)系工具 Composer的自動(dòng)加載(autoload)
Composer 是PHP的一個(gè)包依賴(lài)管理工具,類(lèi)似Ruby中的RubyGems或者Node中的NPM,它并非官方,但現(xiàn)在已經(jīng)非常流行。此文并不介紹如何使用Composer,而是關(guān)注于它的autoload的內(nèi)容吧。2014-08-08php中http與https跨域共享session的解決方法
這篇文章主要介紹了http與https跨域共享session的解決方法,需要的朋友可以參考下2014-12-12php打印一個(gè)邊長(zhǎng)為N的實(shí)心和空心菱型的方法
這篇文章主要介紹了php打印一個(gè)邊長(zhǎng)為N的實(shí)心和空心菱型的方法,實(shí)例分析了php循環(huán)語(yǔ)句繪制圖形的技巧,需要的朋友可以參考下2015-03-03基于PHP實(shí)現(xiàn)JWT登錄鑒權(quán)的示例代碼
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實(shí)現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下2022-04-04