批改状态:合格
老师批语:对于服务器来说, 用户的任何操作都是不可信任的, 必须要过滤, 特别是商业项目中
简单地上传一个文件,做简单的判断
<?php// phpinfo();// 查看上传的值// printf('<pre>%s</pre>', print_r($_FILES, true));// 查看系统对文件大小的限制// echo '文件限制:'.ini_get('upload_max_filesize');// 取得文件的参数,把参数简化一点;$a=$_FILES['upfile'];// printf('<pre>%s</pre>', print_r($a, true));// 1)判断文件已上传if ($a['error'] !==0) echo '没有文件上传;';// 2)判断文件大小switch ($a['error']){case 1:echo '文件超过指定的大小:'.ini_get('upload_max_filesize');break;case 2:echo '文件超过表单要求的大小';break;default:// echo '文件符合要求的大小';}// 3)判断文件格式是图片if (strstr($a['type'],'/',true) !=='image') echo '文件不是图片;';// 4) 判断是不是post上来的;if (!is_uploaded_file($a['tmp_name'])) die('上传方式合法');// 5) 把临时文件移到目标文件夹中,并重新生成文件名称$targetfilename='../upload/'.md5(time().mt_rand(1,1000)).strstr($a['name'], '.');if (move_uploaded_file($a['tmp_name'],$targetfilename )) {// 6)预览一下图片echo '<p>'.$a['name'].' : 上传成功~~</p>';echo "<img src='{$targetfilename}' width='200'>";}?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="" method="post" enctype="multipart/form-data"><fieldset><legend>文件上传</legend><input name="upfile" type="file"><button>上传</button></fieldset></form></body></html>
在上面的基础上,加入自定义异常数判断,让代码更加完整
<?php// $_FILES$a=$_FILES['upfile'];// printf('<pre>%s</pre>', print_r($a, true));// 自定义上传异常类class UploadException extends Exception{public function __toString(){return <<< UPLOAD<ul>文件上传出错信息:<li>代码:$this->code</li><li>信息:$this->message</li><li>文件:$this->file</li><li>行号:$this->line</li></ul>UPLOAD;}}try {// 上传出错的代码$errorCode = $a['error'];if ($errorCode > 0) {switch ($errorCode) {case 1:throw new UploadException('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值', 1);break;case 2:throw new UploadException('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值', 2);break;case 3:throw new UploadException('文件只有部分被上传', 3);break;case 4:throw new UploadException('没有文件被上传', 4);break;case 5:throw new UploadException('找不到临时文件夹', 6);break;case 7:throw new UploadException('文件写入失败', 7);break;default:throw new UploadException('未知类型错误', 8);}}else{// 判断文件类型if (strstr($a['type'], '/', true) !== 'image') {throw new UploadException('文件类型错误', 9);}// 判断是不是post上来的;if (!is_uploaded_file($a['tmp_name'])) {throw new UploadException('请从表单上提交', 10);}}}catch (UploadException $e) {echo $e;}// 如果没报错,就称动文件if (!$e){ // 将文件从临时目录 移动到用户自定义的目标目录中if (is_uploaded_file($a['tmp_name'])) {$destFileName = '../upload/'.md5(time().mt_rand(1, 1000)).strstr($a['name'], '.');// 移动文件到目标目录使用的函数if (move_uploaded_file($a['tmp_name'], $destFileName)) {echo "<p>{$a['name']}: 上传成功~~</p>";echo "<img src='{$destFileName}' width='200'>";}}}?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="" method="post" enctype="multipart/form-data"><fieldset><legend>文件上传</legend><input name="upfile" type="file"><input type="hidden" name="MAX_FILE_SIZE" value="500000"><button>上传</button></fieldset></form></body></html>
<?php// $_FILES$a=$_FILES['upfiles'];// printf('<pre>%s</pre>', print_r( $a, true));if ($a){foreach ($a['error'] as $key => $error) {// 只要判断 error === 0 ,即就是有上传的if ($error === 0) {// 目标文件名,重新命名if (is_uploaded_file($a['tmp_name'][$key])) {$destFileName = '../upload/'.md5(time().mt_rand(1, 1000)).strstr($a['name'][$key], '.');// 移动文件,如果是图片就移动,不是图片不移动if (strstr($a['type'][$key], '/', true) === 'image') {move_uploaded_file($a['tmp_name'][$key], $destFileName);echo "<div>图片{$a['name'][$key]}上传成功:<img src='{$destFileName}' width='50'></div>";} else {echo "<div>文件{$a['name'][$key]}不是图片,上传不成功</div>";}}}else{echo "<div>文件{$a['name'][$key]}上传不成功</div>";}}}?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="" method="post" enctype="multipart/form-data"><fieldset><legend>文件上传</legend><input type="file" name="upfiles[]" multiple><input type="hidden" name="MAX_FILE_SIZE" value="500000"><button>上传</button></fieldset></form></body></html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号