PHP – 上传文件
Table of Contents
/etc/php.ini 配置文件的信息
file_uploads = on upload_max_filesize = 100m # 允许上传文件大小的最大值 post_max_size = 100M # 指通过表单 POST 给 PHP 的所能接收的最大值 upload_tmp_dir = /tmp # 临时文件目录 max_file_uploads = 20 # 最大文件数目
max_execution_time = 600 # 每个 PHP 页面运行的最大时间值 (秒) memory_limit = 128M # 每个 PHP 页面所吃掉的最大内存 max_input_time = 60 # 数据允许的最大时间 (秒) max_input_nesting_level = 60 # 输入变量的嵌套深度
error 值
0 表示 ok 1 上传的文件大小超过了 upload_max_filesize 2 超过 MAX_FILE_SIZE # <input type="hidden" name="MAX_FILE_SIZE" value="30000"> 3 文件只有一部分被上传 4 文件没有被上传 6 没有找到临时目录 7 文件写入失败 (可能是权限问题) 8 被 php 扩展中断
上传文件
<form action="doAction.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"><br/> <input type="submit" value="upload file"> </form>
$filename = $_FILES[‘myfile‘][‘name‘]; $type = $_FILES[‘myfile‘][‘type‘]; $tmp_name = $_FILES[‘myfile‘][‘tmp_name‘]; $size = $_FILES[‘myfile‘][‘size‘]; $error = $_FILES[‘myfile‘][‘error‘]; $destination = dirname(__FILE__).‘/upload/‘.$filename; move_uploaded_file($tmp_name, $destination);
上传多个文件
<form action="doAction.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile[]"><br/> <input type="file" name="myfile[]"><br/> <input type="submit" value="upload file"> </form>
foreach ($myfile as $file) { $filename = $_FILES[‘file‘][‘name‘]; $type = $_FILES[‘file‘][‘type‘]; $tmp_name = $_FILES[‘file‘][‘tmp_name‘]; $size = $_FILES[‘file‘][‘size‘]; $error = $_FILES[‘file‘][‘error‘]; } ...
判断文件是否是 post 上来的
if (!is_uploaded_file($tmp_name)) { exit("文件不是由 HTTP POST 方式上传的"); }
设置允许的文件类型
- 通过表单
<input type="file" name="myfile" accept="MIME_TYPE" /> MIME_TYPE: image/jpeg,image/png,image/gif...
- 通过 php 验证
获取后缀名:
$ext = strtolower(end(explode(‘.‘, $filename))); $ext = pathinfo($filename)[‘extension‘];
$arrExt = [‘jpeg‘, ‘png‘, ‘gif‘]; if (! in_array($ext, $arrExt)) { exit("非法文件类型"); }
- 验证是否是真正的图片
if (!getimagesize($tmp_name)) { exit("不是真正的图片"); }