You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel文件上传后访问图片出现404错误求助

排查图片访问404问题的步骤

根据你提供的信息,文件已上传到服务器但访问返回404,可按以下步骤逐一排查:

1. 确认目标文件实际存在

你通过ls -ila列出的文件是4CBU96b0Ec7HHD7q7wt0T6MhPiK.jpg和9LxUUR5UnwST7y1XItgdORNevyy.jpg,但你尝试访问的是d3QCvZT8DilZm7qQ5moHMJa1jeC.jpg。先执行命令确认该文件是否真的存在于目标目录:

ls -ila /home/server/website/site/public/images/covers/d3QCvZT8DilZm7qQ5moHMJa1jeC.jpg

如果文件不存在,说明PHP代码没有成功写入该文件,需要检查代码逻辑。

2. 核对Web根目录映射

多数Web应用会将public目录设为Web根目录,也就是说服务器上的/home/server/website/site/public/对应访问路径的根目录https://www.example.com/,而非带/public/的路径。尝试访问:
https://www.example.com/images/covers/d3QCvZT8DilZm7qQ5moHMJa1jeC.jpg
如果能访问,说明你之前的URL多了public前缀。

3. 检查目录权限链

虽然你给目录设置了chmod -R 777,但Web服务器的运行用户(如www-data、apache)可能无法访问父目录。用以下命令检查路径每一层的权限:

namei -l /home/server/website/site/public/images/covers/d3QCvZT8DilZm7qQ5moHMJa1jeC.jpg

确保每一层目录都对Web服务器用户有读权限。

4. 修复PHP代码逻辑问题

你的代码存在两个潜在问题:

  • 先请求https://example.com的地址,只有请求成功才会写入tmdb的图片,这可能导致你需要的图片因前置请求失败而未写入
  • 重复调用file_get_contents,且没有错误日志,无法排查写入失败原因

修改代码增加错误日志:

$posterPath = $media['poster_path'];
$tmdbUrl = 'https://image.tmdb.org/t/p/original/' . $posterPath;
$posterContent = file_get_contents($tmdbUrl);

if ($posterContent !== false) {
    $savePath = '/home/server/website/site/public/images/covers/' . $posterPath;
    $writeResult = file_put_contents($savePath, $posterContent);
    
    if ($writeResult === false) {
        error_log('写入图片失败:' . $savePath);
    } else {
        error_log('图片写入成功:' . $savePath);
    }
} else {
    error_log('获取TMDB图片失败:' . $tmdbUrl);
}

查看服务器的PHP错误日志,确认是否有下载或写入失败的记录。

5. 检查Web服务器配置与缓存

  • 查看Web服务器(Nginx/Apache)的配置文件,确认是否有重写规则将请求导向框架入口(如index.php),导致静态文件被错误处理
  • 用curl命令直接请求URL,查看返回的详细404信息:
curl -I https://www.example.com/public/images/covers/d3QCvZT8DilZm7qQ5moHMJa1jeC.jpg
  • 清除浏览器缓存后重新访问,避免缓存导致的404。

内容的提问来源于stack exchange,提问作者Julien Machin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:24:47