求助:解决filemtime(): stat failed报错的代码修复问题
排查filemtime() stat failed报错的解决办法
你说得没错,这个报错确实和文件路径/文件状态密切相关,filemtime()函数需要能读取目标文件的元数据,一旦做不到就会抛出这个警告。我给你整理几个常见的排查方向:
先确认文件是否真实存在
直接去服务器上核对路径:/var/www/vhosts/example.tk/httpdocs/manager/css/general.css,可以用命令行执行ls -l /var/www/vhosts/example.tk/httpdocs/manager/css/general.css,看看输出里有没有这个文件。也可以在代码里加个前置判断快速验证:// 在第49行之前加入 if (!file_exists($temp_path)) { error_log("目标文件不存在:" . $temp_path); // 或者临时输出调试信息 echo "文件找不到:" . $temp_path; exit; }如果真的不存在,要么是路径拼写错误,要么是文件被误删了,补全文件或者修正路径即可。
检查文件和目录的权限
就算文件存在,Web服务器的运行用户(比如Apache的www-data、Nginx的nginx用户)可能没有读取这个文件的权限。用ls -l命令查看文件权限:ls -l /var/www/vhosts/example.tk/httpdocs/manager/css/general.css确保输出里的权限位包含读权限(比如
-rw-r--r--),且文件所有者或组是Web服务器用户。如果权限不对,可以执行:# 给文件添加读权限 chmod 644 /var/www/vhosts/example.tk/httpdocs/manager/css/general.css # 或者修改文件所有者为Web用户(以www-data为例) chown www-data:www-data /var/www/vhosts/example.tk/httpdocs/manager/css/general.css核对路径的大小写和完整性
Linux系统的路径是严格区分大小写的!如果实际文件名是General.css,但代码里写的是general.css就会报错。另外可以临时把$temp_path的值输出来看看,确认变量拼接的路径完全正确:var_dump($temp_path); // 输出后就能看到实际的路径字符串 exit;排查符号链接或文件系统异常
如果这个文件是符号链接,要确认链接指向的真实文件存在且有权限。极端情况下可能是磁盘文件系统出问题,可以尝试重新创建这个文件,或者用fsck命令检查磁盘状态(注意执行前最好备份数据)。
内容的提问来源于stack exchange,提问作者Orkhan Orkhan

