使用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
相关产品推荐
相关产品推荐

