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
