ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## HTTP POST 文件上传 PHP 使用超全局变量 $_FILES 接收 HTTP POST 方式提交的文件。 * `$_FILES['file']['name']` 客户端机器文件的原名称。 * `$_FILES['file']['type']` 文件的 MIME 类型 * `$_FILES['file']['size']` 已上传文件的大小,单位为字节。 * `$_FILES['file']['tmp_name']` 文件被上传后在服务端储存的临时文件名。 * `$_FILES['file']['error']` 和该文件上传相关的错误代码。 系统返回的错误码详解: | 错误码 | 说明 | | --- | --- | | UPLOAD_ERR_OK(0)| 文件上传成功 | | UPLOAD_ERR_INI_SIZE(1)| 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 | | UPLOAD_ERR_FORM_SIZE(2)| 上传文件的大小超过了 表单中 MAX_FILE_SIZE 选项指定的值 | | UPLOAD_ERR_PARTIAL(3)| 只有部分文件被上传 | | UPLOAD_ERR_NO_FILE(4)| 文件没有被上传 | | UPLOAD_ERR_NO_TMP_DIR(6)| 找不到临时文件夹 | | UPLOAD_ERR_CANT_WRITE(7)| 文件写入失败 | 上传文件表单的基本结构: ``` <form action="file.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="file"> <input type="submit" value="submit"> </form> ``` 注意事项: * form 表单中的参数 method 必须为 POST * enctype 须为 multipart/form-data * MAX_FILE_SIZE 隐藏字段必须放在文件输入字段之前 上传示例: ``` <?php $form = <<<EOT <form action="test.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <p><input type="file" name="file"></p> <p>只允许 gif,jpg,png 格式文件,大小不超过 2M</p> <p><input type="submit" name="submit" value="submit"></p> </form> EOT; if (isset($_POST['submit'])) { if ($_FILES['file']['error'] > 0) { exit('上传文件出错'); } $MAX_FILE_SIZE = 2000000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { exit('文件超出指定大小'); } $allowExts = array('jpg', 'gif', 'png'); $parts = explode('.', $_FILES['file']['name']); $ext = array_pop($parts); if (!in_array($ext, $allowExts)) { exit('文件后缀名不符'); } $mimeTypes = array( "image/jpg", "image/jpeg", "image/gif", "image/png", ); if (!in_array($_FILES['file']['type'], $mimeTypes)) { exit('文件格式不正确,请检查'); } $tmpName = $_FILES['file']['tmp_name']; $targetName = '/home/koogua/tmp/' . uniqid() . '.' . $ext; if (!is_uploaded_file($tmpName)) { echo '不是上传文件'; } if (move_uploaded_file($tmpName, $targetName)) { echo '上传成功'; } else { echo '上传失败'; } } else { echo $form; } ?> ``` php.ini 上传配置项 | 配置项 | 功能说明 | | --- | --- | | file_uploads | on 为开启文件上传功能,off 为关闭 | | post_max_size | 系统允许的 POST 传参的最大值 | | upload_max_filesize | 系统允许的上传文件的最大值 | | memory_limit | 内存使用限制 | 建议配置: file_size < upload_max_filesize < post_max_size < memory_limit