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

使用file_get_contents读取json文件失败,如何正确读取目标文件?

问题解决方法

核心原因

PHP解析相对路径时默认以入口文件(即你的项目根目录下的index.php)所在的目录为基准,而非当前写代码的脚本文件(比如assets/html/top_news.php)所在的目录,因此直接写相对于脚本文件的路径会找不到目标文件。

最优解决方案

使用PHP的魔法常量__DIR__拼接路径,该常量的值为当前写代码的脚本文件所在的绝对目录路径,不受入口文件位置影响,且兼容你使用的PHP5.4及以上所有版本。

情况1:保持原目录结构(data目录在assets/html/data下)

直接在assets/html目录下的脚本中用如下代码读取:

<?php
$path = __DIR__ . '/data/news.json';
$data = file_get_contents($path);
?>

情况2:已将data目录移动到assets/data下

修改路径为:

<?php
$path = __DIR__ . '/../data/news.json';
$data = file_get_contents($path);
?>

额外注意事项

  • 路径验证:如果不确定拼接的路径是否正确,可以临时加一行var_dump($path);打印路径,核对和实际文件路径是否一致即可。
  • 服务器权限:部署到CentOS服务器时,需要给data目录及内部json文件授予读权限,一般目录设为755权限、文件设为644权限即可正常读取。
  • 全局路径统一建议:可以在入口文件index.php的顶部定义项目根目录常量,后续所有文件引用都基于该常量拼接,避免多处路径写错:
<?php
// index.php 顶部添加
define('PROJECT_ROOT', __DIR__);
// 引入模块代码修改为
require_once PROJECT_ROOT . '/assets/html/file.php';
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:09:02