PHP上传报UPLOAD_ERR_NO_TMP_DIR错误码6 临时目录可访问却上传失败
- Web服务运行身份权限问题
你手动执行测试代码时使用的是当前登录用户身份,而Web请求触发的PHP代码运行身份为www-data、apache、nobody等Web服务专属用户,两者权限完全不同。需要检查sys_get_temp_dir()返回的临时目录是否对Web运行用户开放读、写、执行权限,Linux系统下默认临时目录/tmp权限应为1777,如果权限被篡改会直接导致无法写入临时文件。同时如果服务器开启了SELinux,需要检查Web进程的安全上下文规则是否允许访问临时目录。 - PHP配置覆盖或限制问题
检查站点对应的PHP配置是否存在局部覆盖:比如php-fpm的pool配置中通过php_admin_value[upload_tmp_dir]指定了不存在或无权限的路径,这类配置优先级高于全局php.ini,仅查看全局phpinfo可能无法识别。同时检查open_basedir配置是否包含临时目录路径,如果临时目录被排除在open_basedir允许路径外,PHP也无法正常创建上传临时文件。 - 临时目录资源耗尽问题
检查临时目录所在磁盘分区的状态:执行df -h确认磁盘是否已满,执行df -i确认分区inode是否耗尽,两种情况都会导致无法创建新的临时文件。部分场景下临时文件清理脚本刚好在上传请求执行间隙释放了资源,会出现手动测试正常、上传请求失败的偶发/必现问题。 - 临时文件清理规则冲突问题
如果服务器配置了高频的临时目录清理规则(比如systemd-tmpfiles、tmpreaper设置为每秒清理一次/tmp目录下的空文件),可能会出现在PHP接收上传文件的过程中,未写完的临时文件被清理工具提前删除,最终触发无临时目录的报错。 - 近期更新的兼容问题
若故障出现前有过PHP版本升级、Web服务器升级、新增安全扩展(如suhosin、防火墙扩展)的操作,需要排查新版本的配置限制,部分安全扩展默认会禁止PHP写入未预设的目录,或对临时文件的创建规则有额外要求。
内容的提问来源于stack exchange,提问作者Skadie
相关产品推荐
相关产品推荐

