先看nginx是否真在找对路径:检查root指令与宝塔网站目录设置是否完全一致,确认运行目录为/public(laravel/tp6等),并验证index.php存在且权限正确;再排查php-fpm权限、open_basedir限制、伪静态路径重复及bom头问题。

宝塔里访问PHP文件报“文件不存在”,先看Nginx是否真在找对路径
不是PHP报错,是Nginx压根没把请求转发给PHP-FPM——它连入口文件的物理位置都没找到。典型表现是浏览器返回404,而错误日志里出现 open() "/www/wwwroot/xxx/index.php" failed (2: No such file or directory)。
- 用
grep "root" /www/server/panel/vhost/nginx/your-site.com.conf确认 Nginx 的root指令和宝塔面板「网站目录」里填的一模一样(注意大小写、末尾斜杠、空格) - 执行
ls -l /www/wwwroot/your-site.com,确保该路径真实存在,且包含index.php或其他默认索引文件 - 如果用了 ThinkPHP/Laravel 等框架,运行目录必须设为
public子目录(如/www/wwwroot/your-site.com/public),而不是项目根目录
PHP-FPM 拒绝访问文件,常见于权限或 open_basedir 限制
路径对了,但 PHP 进程没权限读,或者被安全策略拦住,就会返回“Primary script unknown”或直接 404。这不是文件真丢了,是 PHP 被挡在门外。
- 检查 PHP 运行用户:宝塔里「网站」→「设置」→「PHP版本」→「运行用户」应为
www,且该用户对/www/wwwroot/your-site.com目录有读取权限(ls -ld /www/wwwroot/your-site.com看属组是否为www:www) - 查
open_basedir是否过窄:在 PHP 配置中搜索open_basedir,若值是/www/wwwroot/your-site.com,但实际入口文件在/www/wwwroot/your-site.com/public,就得改成/www/wwwroot/your-site.com/:/tmp/:/proc/ - 上传的
index.php可能带 BOM 头:用file /www/wwwroot/your-site.com/index.php查类型,若显示with UTF-8 Unicode (with BOM) text,就用 vim 或 notepad++ 转成 UTF-8 无 BOM 格式再上传
伪静态或防跨站设置干扰了真实路径解析
宝塔默认开启的「防跨站攻击」会强制限制 PHP 脚本只能访问指定目录,一旦配置不匹配,哪怕文件就在那儿,PHP 也会假装看不见。
- 临时关闭「网站」→「设置」→「PHP版本」→「防跨站攻击(open_basedir)」,看是否立刻恢复——如果好了,说明是 open_basedir 规则问题,不是文件真丢失
- 伪静态规则(如 ThinkPHP 的
thinkphp.conf)若写成rewrite ^(.*)$ /index.php/$1;,而 Nginx 的root指向的是项目根目录(非 public),就会导致请求被重写到不存在的/index.php/xxx - 检查是否误启用了「子目录部署」:比如网站域名绑在
example.com,却把运行目录设成/www/wwwroot/example.com/blog,又在伪静态里加了/blog前缀,造成路径重复拼接
PHP 代码里 require 或 file_get_contents 报错,和 Web 服务器无关
如果是 PHP 脚本执行时报“找不到文件”,比如 require 'config.php' 失败,那问题出在脚本内部路径逻辑,跟宝塔配置无关。
-
require和include不走open_basedir检查,但受include_path影响;优先用绝对路径:require __DIR__ . '/config.php'; - 用
is_readable()替代file_exists()判断后再读取,因为后者不校验读权限,容易误判 - 动态拼接路径时,避免硬编码斜杠:
__DIR__ . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . $file
/www/wwwlogs/your-site.com.error.log),里面那行 failed (2: No such file or directory) 后面的路径,就是 Nginx 实际想找却没找到的地方——从那里开始逆推,比盲目改配置快得多。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











