PHP實(shí)現(xiàn)文件上傳與下載的示例代碼
PHP文件上傳下載
1、環(huán)境配置
修改 PHP.ini 配置文件可以定制上傳機(jī)制,通過 phpinfo() 函數(shù)可以查看到 PHP.ini 文件所在位置。
| 配置 | 說明 |
|---|---|
| file_uploads | 是否允許上傳文件,On 開啟 Off 禁止上傳 |
| upload_tmp_dir | 文件上傳過程中臨時(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 | 單個請求時(shí),允許上傳的最大文件數(shù)量 |
2、超全局?jǐn)?shù)組
上傳的文件保存在 $_FILES 超全局?jǐn)?shù)組中,具體參數(shù)說明如下:
| 選項(xiàng) | 說明 |
|---|---|
| tmp_name | 臨時(shí)文件名 |
| 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): 找不到臨時(shí)文件夾。
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í)現(xiàn)的微信紅包算法分析(非官方)
這篇文章主要介紹了php實(shí)現(xiàn)的微信紅包算法,以實(shí)例形式分析了拼手氣紅包的相關(guān)隨機(jī)算法技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
PHP正則匹配中英文、數(shù)字及下劃線的方法【用戶名驗(yàn)證】
這篇文章主要介紹了PHP正則匹配中英文、數(shù)字及下劃線的方法,可用于針對用戶名的驗(yàn)證操作,需要的朋友可以參考下2017-08-08
php echo, print, print_r, sprintf, var_dump, var_expor的使用區(qū)別
本篇文章是對php中echo, print, print_r, sprintf, var_dump, var_expor的使用區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php實(shí)現(xiàn)mysql事務(wù)處理的方法
這篇文章主要介紹了php實(shí)現(xiàn)mysql事務(wù)處理的方法,以實(shí)例形式實(shí)現(xiàn)了事務(wù)回滾的技巧,代碼簡單實(shí)用,需要的朋友可以參考下2014-12-12
PHP Laravel框架異步執(zhí)行的實(shí)現(xiàn)詳解
Laravel是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構(gòu)建一個完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達(dá)力2022-07-07
使用PHP獲取當(dāng)前url路徑的函數(shù)以及服務(wù)器變量
本篇文章是對使用PHP獲取當(dāng)前url路徑的函數(shù)以及服務(wù)器變量的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

