PHP中move_uploaded_file函数无法正常运行问题求助
解决PHP move_uploaded_file失败且$_FILES["fileToUpload"]["tmp_name"]为空的问题
首先得明确:$_FILES["fileToUpload"]["tmp_name"]为空,说明文件根本没完成上传环节,move_uploaded_file自然无法执行,这才导致页面跳转到错误地址。下面是一步步排查和解决的方法:
1. 检查表单的enctype属性
这是最容易忽略的关键!如果你的表单没有设置enctype="multipart/form-data",服务器根本不会接收上传的文件。确保表单代码是这样的:
<form method="POST" enctype="multipart/form-data" action="你的上传处理脚本路径"> <input type="file" name="fileToUpload"> <button type="submit">上传</button> </form>
2. 验证PHP上传配置限制
如果文件大小超过了PHP的配置上限,上传会直接失败,tmp_name也会为空。你可以通过以下方式检查:
- 在代码里添加
echo ini_get('upload_max_filesize') . '<br>' . ini_get('post_max_size');,查看当前的上传大小限制 - 确保
post_max_size的值大于upload_max_filesize(因为POST请求的总大小包括文件和其他表单数据) - 如果需要调整,修改
php.ini文件或者在.htaccess里设置(如果服务器允许的话):upload_max_filesize = 10M post_max_size = 12M
3. 检查表单文件输入的name属性
确认你的文件输入框的name属性确实是fileToUpload,和代码里$_FILES["fileToUpload"]的键完全一致。如果name写错了(比如写成fileupload),那$_FILES里就不会有对应的字段。
4. 查看上传错误码
PHP会通过$_FILES["fileToUpload"]["error"]返回上传失败的具体原因,你可以在代码里先打印这个值来定位问题:
session_start(); // 先检查上传错误 if (isset($_FILES["fileToUpload"])) { $errorCode = $_FILES["fileToUpload"]["error"]; if ($errorCode !== UPLOAD_ERR_OK) { // 打印错误码对应的说明 $errorMessages = [ UPLOAD_ERR_INI_SIZE => '文件超过upload_max_filesize限制', UPLOAD_ERR_FORM_SIZE => '文件超过表单设置的MAX_FILE_SIZE限制', UPLOAD_ERR_PARTIAL => '文件仅部分上传', UPLOAD_ERR_NO_FILE => '未选择上传文件', UPLOAD_ERR_NO_TMP_DIR => '找不到临时文件夹', UPLOAD_ERR_CANT_WRITE => '无法写入临时文件', UPLOAD_ERR_EXTENSION => 'PHP扩展阻止了文件上传' ]; echo '上传失败原因:' . ($errorMessages[$errorCode] ?? '未知错误'); exit; } } // 后续的文件处理逻辑...
5. 检查临时文件夹权限
PHP需要将上传的文件先保存到临时目录,如果这个目录没有读写权限,也会导致tmp_name为空。你可以用echo sys_get_temp_dir();查看当前临时目录,然后确认该目录对PHP运行的用户(比如www-data)有读写权限。
按照上面的步骤排查,应该能找到问题所在,解决后tmp_name就会有值,move_uploaded_file也能正常执行了。
内容的提问来源于stack exchange,提问作者user6944995
相关产品推荐
相关产品推荐

