PHP文件上传成功为什么页面却找不到

最近处理一个企业后台上传附件的问题,用户上传合同后,接口明确返回"上传成功",数据库里也有文件记录,但重新打开详情页时,图片和 PDF 全部显示 404。刚开始怀疑是前端地址拼错,后来直接登录服务器检查,文件其实已经真实存在。

问题出在保存路径和访问路径不是一回事。PHP 把文件写到了项目里的 storage/uploads 目录,但 Nginx 的网站运行目录指向 public。程序生成访问地址时却直接拼成 /storage/uploads/xxx.pdf,浏览器访问的实际上是 public/storage/uploads,这个目录根本不存在,所以文件虽然上传成功,网页却永远找不到。

后来把文件存储规则重新整理了一遍。上传时只保存相对路径,服务器上的真实目录和前端访问 URL 分开配置。公开文件统一放到可访问目录,私有合同、客户资料则不再直接暴露地址,而是通过 PHP 接口校验登录状态和权限后再读取文件。同时把文件是否存在、目录是否可写、生成后的访问地址都加入上传日志。

这类问题在 PHP 项目部署时很常见,尤其是宝塔、Laravel 或者项目存在 public 运行目录时。看到"上传成功"并不能说明文件一定能访问,还要确认三个东西:文件到底存在哪里、Nginx 从哪里对外提供文件、程序最后返回的 URL 指向哪里。

#PHP开发 #文件上传 #Nginx #后台系统

相关推荐
向上的车轮几秒前
Python 大数据处理不慢:Polars + DuckDB + Arrow 实战指南
开发语言·python
Nebula_g5 分钟前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
程序猿乐锅35 分钟前
【从0-1学习Python | 第六篇】 Python 函数:定义、参数与返回值
开发语言·python·学习
G018_star sky♬36 分钟前
java中的字符串常见方法
java·开发语言
熊猫钓鱼>_>38 分钟前
Kotlin Multiplatform for OpenHarmony 实战:kotlinx-serialization JSON 适配
开发语言·华为·kotlin·华为云·json·harmonyos·code
.Bryce.2 小时前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
银河技术2 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
GIS数据转换器4 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
Wang's Blog9 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
砚底藏山河9 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven