1. 屬性:enctype=“multipart/from-data”
<?php
if ($_SERVER['REQUEST_METHOD']=== 'POST') {
// 接收文件 使用一個叫做 $_FILE 超全局成員
var_dump($_FILE);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件</title>
</head>
<body>
<!-- 如果一個表單中有文件域(文件上傳),必須將表單中的 method 設(shè)置為 post ,enctype 設(shè)置為 multipart/form-data -->
<!-- enctype 默認為 urlencoded 格式 ->發(fā)送前編碼所有字符(默認)
key1=value1&key2=value2 -->
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/from-data">
<!-- 1 -->
<input type="text" name="foo">
<input type="text" name="bar">
<!-- 2 -->
<input type="file" name="img">
<button>提交</button>
</form>
</body>
</html>
2. 文件上傳
案例:文件上傳處理基本邏輯
展示
選擇文件
傳到./upload中
代碼
<?php
function upload () {
if (!isset($_FILES['avatar'])) {
$GLOBALS['message'] = '別玩我了';
// 客戶端提交的表單內(nèi)容中根本沒有文件域
return;
}
$avatar = $_FILES['avatar'];
// $avatar => array(5) {
// ["name"]=>
// string(11) "icon-02.png"
// ["type"]=>
// string(9) "image/png"
// ↓↓↓↓↓↓ 存到服務(wù)器的臨時位置 ↓↓↓↓↓↓
// ["tmp_name"]=>
// string(27) "C:\Windows\Temp\php1138.tmp"
// ["error"]=>
// int(0)
// ["size"]=>
// int(4398)
// }
echo $avatar['error'];
if ($avatar['error'] !== UPLOAD_ERR_OK) {
// 服務(wù)端沒有接收到上傳的文件
$GLOBALS['message'] = '上傳失敗';
return;
}
// 接收到了文件
// 將文件從臨時目錄移動到網(wǎng)站范圍之內(nèi)
$source = $avatar['tmp_name']; // 源文件在哪
// => 'C:\Windows\Temp\php1138.tmp'
$target = './uploads/' . $avatar['name']; // 目標(biāo)放在哪
// => './uploads/icon-02.png'
// 移動的目標(biāo)路徑中文件夾一定是一個已經(jīng)存在的目錄
$moved = move_uploaded_file($source, $target);
if (!$moved) {
$GLOBALS['message'] = '上傳失敗';
return;
}
// 移動成功(上傳整個過程OK)
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 接收文件 使用一個 叫做 $_FILES 超全局成員
// var_dump($_FILES);
upload();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上傳</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="file" name="avatar">
<button>上傳</button>
<?php if (isset($message)): ?>
<p style="color: hotpink"><?php echo $message; ?></p>
<?php endif ?>
</form>
</body>
</html>
上傳文件大小限制問題
http:///manual/zh/features.file-upload.php
注意:php.ini就在php的安裝目錄下,我的wamp都在D盤
修改 php.ini 中的 post_max_size 配置,讓服務(wù)端可以接受更大的請求體體積
修改 php.ini 中的 upload_max_filesize 配置,讓服務(wù)端支持更大的單個上傳文件*暫時作為了解
type 屬性
type 屬性為 file 的 input 元素可以通過表單提交文件(上傳文件),服務(wù)端 PHP 可以通過 $_FILES 獲取上
傳的文件信息。
<?php
// 如果選擇了文件 $_FILES['file']['error'] => 0
// 詳細的錯誤碼說明:http:///manual/zh/features.file‐upload.errors.php
if ($_FILES['file']['error'] === 0) {
// PHP 在會自動接收客戶端上傳的文件到一個臨時的目錄
$temp_file = $_FILES['file']['tmp_name'];
// 我們只需要把文件保存到我們指定上傳目錄
$target_file = '../static/uploads/' . $_FILES['file']['name'];
if (move_uploaded_file($temp_file, $target_file)) {
$image_file = '/static/uploads/' . $_FILES['file']['name'];
}
}
$_FILES 同樣也是一個關(guān)聯(lián)數(shù)組,鍵為表單的 name ,內(nèi)容如下:
array(1) {
["avatar"]=> array(5) {
["name"]=>string(17) "demo.jpg"
["type"]=>
string(10) "image/jpeg" ["tmp_name"]=>
string(27) "C:\Windows\Temp\php786C.tmp" ["error"]=>
int(0) ["size"]=> int(29501)
}
}