PHP 8.1升级后move_uploaded_file失效,tmp_name为空报Error 6
解决PHP 8.1中move_uploaded_file报错Error 6(tmp_name为空)的问题
首先明确,Error 6对应PHP内置的UPLOAD_ERR_NO_TMP_DIR错误,核心原因是PHP无法找到或访问上传临时文件的存储目录。结合你描述的tmp_name为空、文件size为0的现象,可按以下步骤排查修复:
检查PHP临时目录配置
查看php.ini中的upload_tmp_dir参数,确认它指向的目录存在且PHP进程拥有读写权限:- 执行
phpinfo()找到upload_tmp_dir的实际配置值 - 验证目录存在性:Linux用
ls -d [目录路径],Windows直接在文件管理器中查看 - 检查权限:Linux下目录权限至少为
700,且所属用户与PHP运行用户(如www-data)一致;Windows确保Web服务进程(IIS/Apache)有该目录的读写权限
- 执行
避免临时目录被自动清理
若upload_tmp_dir指向系统临时目录(如/tmp),可能被服务器定时任务自动清理。可将其修改为自定义的、不会被清理的目录,修改php.ini后重启Web服务。排查进程与安全模块限制
若使用PHP-FPM,需确保FPM进程用户对临时目录有读写权限。部分服务器的SELinux安全模块可能阻止PHP访问临时目录,可临时执行setenforce 0关闭测试,若问题解决,再配置SELinux规则允许访问。验证上传表单属性
确认文件上传表单包含enctype="multipart/form-data"属性,缺少该属性会导致PHP无法正确解析上传文件,出现tmp_name为空的情况。关于PHPExcel的特殊说明
你提到PHPExcel能手动获取数据,是因为它可能直接读取了原始POST数据,绕过了临时文件存储步骤;但move_uploaded_file必须依赖有效的临时文件路径,所以核心仍需解决临时目录的访问问题。
内容的提问来源于stack exchange,提问作者Aashir Azeem
相关产品推荐
相关产品推荐

