PHP實現(xiàn)文件上傳與下載的示例代碼
PHP文件上傳下載
1、環(huán)境配置
修改 PHP.ini 配置文件可以定制上傳機制,通過 phpinfo() 函數(shù)可以查看到 PHP.ini 文件所在位置。
配置 | 說明 |
---|---|
file_uploads | 是否允許上傳文件,On 開啟 Off 禁止上傳 |
upload_tmp_dir | 文件上傳過程中臨時保存的目錄,默認保存位置為 /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 | 單個請求時,允許上傳的最大文件數(shù)量 |
2、超全局數(shù)組
上傳的文件保存在 $_FILES
超全局數(shù)組中,具體參數(shù)說明如下:
選項 | 說明 |
---|---|
tmp_name | 臨時文件名 |
name | 上傳文件原文件名 |
type | 文件 MIME 類型 |
error | 錯誤編號 |
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、錯誤說明
上傳出錯會在$_FILES[‘error’] 選項中體現(xiàn),具體錯誤說明如下:
UPLOAD_ERR_OK (0): 沒有錯誤,文件上傳成功。
UPLOAD_ERR_INI_SIZE (1): 上傳的文件大小超過了php.ini中upload_max_filesize指令所設(shè)置的大小限制。
UPLOAD_ERR_FORM_SIZE (2): 上傳的文件大小超過了HTML表單中MAX_FILE_SIZE指令所設(shè)置的大小限制。
UPLOAD_ERR_PARTIAL (3): 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE (4): 沒有文件被上傳。
UPLOAD_ERR_NO_TMP_DIR (6): 找不到臨時文件夾。
UPLOAD_ERR_CANT_WRITE (7): 文件寫入失敗。
UPLOAD_ERR_EXTENSION (8): 由于PHP擴展的限制,文件上傳被停止。
4、上傳安全
檢測文件是否是合法的上傳文件,以保證安全。
<?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í)行進一步的處理操作 // ... echo "文件上傳成功!"; } else { // 文件上傳失敗或未選擇文件 echo "文件上傳失?。?; } } ?>
5、處理類
下面是支持單文件、多文件上傳的處理類。
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']); // 遍歷每個上傳的文件 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í)行進一步的處理操作 // ... echo "文件 $fileName 上傳成功!<br>"; } else { // 文件上傳失敗或未選擇文件 echo "文件上傳失??!<br>"; } } } else { // 沒有文件被上傳 echo "沒有文件被上傳!<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實現(xiàn)文件上傳與下載的示例代碼的文章就介紹到這了,更多相關(guān)PHP文件上傳與下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用php自動備份數(shù)據(jù)庫表的實現(xiàn)方法
下面小編就為大家?guī)硪黄褂胮hp自動備份數(shù)據(jù)庫表的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07PHP swoole和redis異步任務(wù)實現(xiàn)方法分析
這篇文章主要介紹了PHP swoole和redis異步任務(wù)實現(xiàn)方法,結(jié)合具體實例形式對比分析了swoole和redis異步任務(wù)具體實現(xiàn)方法及區(qū)別,需要的朋友可以參考下2019-08-08PHP管理依賴(dependency)關(guān)系工具 Composer的自動加載(autoload)
Composer 是PHP的一個包依賴管理工具,類似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-12基于PHP實現(xiàn)JWT登錄鑒權(quán)的示例代碼
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下2022-04-04