批改状态:合格
老师批语:
文件上传的两个前提
1.必须以POST方式提交,method: POST
2.必须将编码类型转为多种数据提交,enctype="multipart/form-data"multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据
form表单
<!-- action 服务端地址 这里在同一个文件中处理,可以不指定php服务端地址 --><form action="" method="POST" enctype="multipart/form-data"><fieldset>单文件上传</fieldset><!-- name="my_pic":给服务器编程语言用的变量名,php中可通过$_FILES来访问 --><input type="file" name="my_pic"><button>上传</button></form>
PHP服务端
<?phpnamespace fielUpload;// 格式化输出 $_FILES 相关信息printf('<pre>%s</pre>', print_r($_FILES, true));// 判断是否为空if (isset($_FILES['my_pic'])) {if ($_FILES['my_pic']['error'] === 0) {// 获取扩展名$ext = pathinfo($_FILES['my_pic']['name'])['extension'];// 重置文件命及扩展名$fileName = md5($_FILES['my_pic']['name']) . '.' . $ext;// 目标文件目录$dest = 'uploads/' . $fileName;// 移动到目标目录中// 参数1:临时文件目录// 参数2:目标文件目录move_uploaded_file($_FILES['my_pic']['tmp_name'], $dest);// 预览echo "<img src='$dest' width='200'>";}}?>
$_FILES数据
// 前端传过来的变量名[my_pic] => Array(// 文件名[name] => 1 (1).jpg// 文件类型[type] => image/jpeg// 临时文件名[tmp_name] => D:\AnZhuangLuJi\AAAPHP\phpEnv\temp\php\php18C4.tmp// 错误处理代码 0表示成功[error] => 0// 文件大小[size] => 5850144)

form表单
<!-- action 服务端地址 这里在同一个文件中处理,可以不指定php服务端地址 --><form action="" method="POST" enctype="multipart/form-data"><fieldset>单文件上传</fieldset><input type="file" name="my_pic1"><input type="file" name="my_pic2"><input type="file" name="my_pic3"><button>上传</button></form>
PHP服务端
<?phpnamespace fielUpload;// 格式化输出 $_FILES 相关信息printf('<pre>%s</pre>', print_r($_FILES, true));foreach ($_FILES as $file) {// 只要判断$file['error'] === 0 表示上传成功if ($file['error'] === 0) {// 获取扩展名$ext = pathinfo($file['name'])['extension'];// 重置文件命及扩展名$fileName = md5($file['name']) . '.' . $ext;// 目标文件目录$dest = 'uploads/' . $fileName;// 移动到目标目录中move_uploaded_file($file['tmp_name'], $dest);// 预览echo "<img src='$dest' width='200'>";}}?>

form表单
<!-- action 服务端地址 这里在同一个文件中处理,可以不指定php服务端地址 --><form action="" method="POST" enctype="multipart/form-data"><fieldset>单文件上传</fieldset><!-- 以数组的方式存放 --><!-- multiple: 允许同时选择多个 --><input type="file" name="my_pic[]" multiple><button>上传</button></form>
PHP服务端
<?phpnamespace fielUpload;// 格式化输出 $_FILES 相关信息printf('<pre>%s</pre>', print_r($_FILES, true));// 判断是否为空if (isset($_FILES['my_pic'])) {//循环遍历foreach ($_FILES['my_pic']['error'] as $key => $error) {// 0 => UPLOAD_ERR_OKif ($error === UPLOAD_ERR_OK) {// 临时文件名$tmpName = $_FILES['my_pic']['tmp_name'][$key];// 获取扩展名$ext = pathinfo($_FILES['my_pic']['name'][$key])['extension'];// 重置文件命及扩展名$fileName = md5($_FILES['my_pic']['name'][$key]) . '.' . $ext;// 目标文件目录$dest = 'uploads/' . $fileName;// 移动到目标目录中move_uploaded_file($tmpName, $dest);// 预览echo "<img src='$dest' width='200'>";}}}?>

// 判断上传的数据是否为空if (isset($_FILES['my_pic'])) {// 原始文件名$name = $_FILES['my_pic']['name'];// 临时文件名$tmpName = $_FILES['my_pic']['tmp_name'];// 错误代码$error = $_FILES['my_pic']['error'];//判断错误代码是否大于0,如果大于0 表示上传失败if ($error >0) {$tips = '<span style="color:red">上传失败!</span><br>';// 不同的错误代码 输出不同的错误信息// 其中错误代码5 是预留的自定义错误信息switch ($error) {case 1:$tips .= '大小超过了php.ini中的允许上传的文件大小';break;case 2:// MAX_FILE_SIZE:前端中传过来的最大文件大小限制的变量$tips .= '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';break;case 3:$tips .= '文件只有部分被上传';break;case 4:$tips .= '没有文件被上传';break;case 6:$tips .= '找不到临时目录';break;case 7:$tips .= '文件写入失败,请检查目录权限';break;}echo "<p>$tips</p>";} else {//1 判断上传方式是否合法? POSTif (is_uploaded_file($tmpName)) {// 文件类型白名单$allow = ['jpg','jpeg','png','gif'];// 扩展名$ext = pathinfo($name)['extension'];// 判断文件上传的扩展名是否为图片的扩展名if (in_array($ext, $allow)) {// 如果上传方式合法,且是允许的类型,则可以移动到指定的目录中了$path = 'uploads/';// 为了防止同名覆盖,应该给目标文件名重命名$dest =$path. md5($name) . '.' . $ext;// 判断将文件从临时目录移动到目标目录中是否成功if (move_uploaded_file($tmpName, $dest)) {echo '<p>上传成功</p>';// 预览echo "<img src='$dest' width='300'>";} else {echo '<p>上传失败</p>';}} else {echo '<p>文件类型错误</p>';}} else {echo '<p>上传方式非法</p>';}}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号