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

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

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

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

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

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

相关推荐
爱笑的源码基地1 小时前
云 PACS 源码实践:HL7 对接 HIS / 电子病历
源码·开发·信创·pacs·医学影像
打工仔折腾 AI2 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问3 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab
Want5953 小时前
Python跳动的爱心②
开发语言·python·数学建模
小羊没烦恼!4 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
爱吃香菜的初学者4 小时前
十六.Linux——多线程(2)
linux·运维·开发语言
jeo陽4 小时前
04-循环实战:素数、最大公约数、级数求和与枚举法
c语言·开发语言·数据结构
xixingzhe24 小时前
Nginx 看懂请求耗时瓶颈
服务器·前端·nginx
暖核5 小时前
kubeadm 集群运维:Worker 节点下线删除、整套集群销毁重建指南
运维·开发语言·php
tachibana25 小时前
Go 语言里的 Context 是什么?
开发语言·后端·golang·go·语言