PHP實(shí)現(xiàn)文件上傳與下載的示例代碼
PHP文件上傳下載
1、環(huán)境配置
修改 PHP.ini 配置文件可以定制上傳機(jī)制,通過 phpinfo() 函數(shù)可以查看到 PHP.ini 文件所在位置。
| 配置 | 說明 |
|---|---|
| file_uploads | 是否允許上傳文件,On 開啟 Off 禁止上傳 |
| upload_tmp_dir | 文件上傳過程中臨時保存的目錄,默認(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 | 單個請求時,允許上傳的最大文件數(shù)量 |
2、超全局?jǐn)?shù)組
上傳的文件保存在 $_FILES 超全局?jǐn)?shù)組中,具體參數(shù)說明如下:
| 選項(xiàng) | 說明 |
|---|---|
| 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àng)中體現(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擴(kuò)展的限制,文件上傳被停止。
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í)行進(jìn)一步的處理操作
// ...
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í)行進(jìn)一步的處理操作
// ...
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實(shí)現(xiàn)文件上傳與下載的示例代碼的文章就介紹到這了,更多相關(guān)PHP文件上傳與下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用php自動備份數(shù)據(jù)庫表的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄褂胮hp自動備份數(shù)據(jù)庫表的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
PHP swoole和redis異步任務(wù)實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP swoole和redis異步任務(wù)實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式對比分析了swoole和redis異步任務(wù)具體實(shí)現(xiàn)方法及區(qū)別,需要的朋友可以參考下2019-08-08
PHP管理依賴(dependency)關(guān)系工具 Composer的自動加載(autoload)
Composer 是PHP的一個包依賴管理工具,類似Ruby中的RubyGems或者Node中的NPM,它并非官方,但現(xiàn)在已經(jīng)非常流行。此文并不介紹如何使用Composer,而是關(guān)注于它的autoload的內(nèi)容吧。2014-08-08
php中http與https跨域共享session的解決方法
這篇文章主要介紹了http與https跨域共享session的解決方法,需要的朋友可以參考下2014-12-12
基于PHP實(shí)現(xiàn)JWT登錄鑒權(quán)的示例代碼
JWT(JSON Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)。本文將為大家介紹PHP如何實(shí)現(xiàn)JWT登錄鑒權(quán),需要的可以參考一下2022-04-04

