PHP-上传文件
php.ini中和和文件上传相关的选项
指令名 | 默认值 | 描述 |
file_uploads | ON | 服务器上的php脚本是否可以接受文件上传 |
max_execution_time | 30 | PHP脚本在注册一个致命错误之前可以执行的最长时间,以秒为单位 |
memory_limit | 128MB | 设置PHP脚本可以分配到的最大内存,以MB为单位,这样可以防止失控的脚本独占服务器内存 |
upload_max_filesize | 2MB | 设置上传文件的大小的最大值,以MB为单位。此指令必须小于post_max_size |
upload_tmp_dir | NULL | 设置文件上传后存放的临时目录 |
post_max_size | 8M | 通过POST方式发送信息的大小,以MB为单位 |
用来上传文件的php脚本
<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> 上传文件:<input type="file" name="userfile" /> <input type="submit" value="上传" /> </form>
POST方式发送文件到upload.php进行处理
选择本地的一个shell.jpg文件
upload.php中的内容
<?php //打印文件信息的数组 print_r($_FILES); ?>
点击上传
全局数组$_FILES中的元素说明
数组 | 描述 |
$_FILES['userfile']['name'] | 上传的文件的文件名 |
$_FILES['userfile']['type'] | 上传的文件的文件类型 |
$_FILES['userfile']['tmp_name'] | 上传的文件临时存放地址 |
$_FILES['userfile']['error'] | 上传的文件的错误类型 |
$_FILES['userfile']['size'] | 上传的文件的大小 |
对上传的文件进行过滤和处理
<?php //允许上传的文件类型 $allow_type = ['image/jpeg', 'image/png', 'image/pjpeg', 'image/x-png', 'image/gif']; //判断上传的类型是否被允许 if (!in_array($_FILES['userfile']['type'], $allow_type)){ echo "<script>alert('只允许上传jpg/png/gif类型的图片')</script>"; exit; } //判断上传过程中是否发生错误 if ($_FILES['userfile']['error'] != 0){ switch ($_FILES['userfile']['error']) { case 1: echo "<script>alert('上传文件的大小超过了php.ini中upload_max_filesize的约定值')</script>"; break; case 2: echo "<script>alert('上传文件的大小超过了上传表单max_file_size规定的最大值')</script>"; break; case 3: echo "<script>alert('文件只被部分上传')</script>"; break; case 4: echo "<script>alert('文件没有被上传')</script>"; break; } exit; } //用来再次判断上传文件的大小 define('MAX_SIZE', 2000000); if ($_FILES['userfile']['size'] > MAX_SIZE){ echo "<script>alert('上传的文件大小不能超过2M')</script>"; exit; } //判断目录是否存在 define('URL', dirname(__FILE__).'\files'); if (!is_dir(URL)) { mkdir(URL); } //把文件从临时文件夹移动到指定文件夹 if (is_uploaded_file($_FILES['userfile']['tmp_name'])){ if (!@move_uploaded_file($_FILES['userfile']['tmp_name'], URL.'/'.$_FILES['userfile']['name'])){ echo "<script>alert('移动失败');history.back();</script>"; exit; } }else { echo "<script>alert('临时文件夹找不到文件');history.back();</script>"; exit; } //经过以上过滤,符合条件的文件上传成功,执行以下语句 echo "<script>alert('文件上传成功');location.href='url.php?url=files/".$_FILES['userfile']['name']."'".";</script>"; ?>
上传文件
然后跳转到http://127.0.0.1/upload/url.php?url=files/shell.jpg