直接改后缀不能使json变为可用php数据;必须用json_decode()解析,或用var_export()生成合法php数组文件,禁用eval()和include()加载json。

直接改后缀不会让 JSON 变成可用的 PHP 数据
把 data.json 改名为 data.php,文件内容还是纯 JSON 字符串,PHP 解析器不会自动把它当数组用——访问时会报错 Parse error: syntax error, unexpected '}' 或直接输出原始文本。JSON 不是合法的 PHP 语法,必须显式解析或转换。
推荐做法:在 PHP 中用 json_decode() 读取 JSON 文件
保持 JSON 文件原样(如 config.json),在 PHP 脚本里安全加载:
$json = file_get_contents('config.json');
$data = json_decode($json, true); // 第二个参数 true → 返回关联数组
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('JSON 解析失败:' . json_last_error_msg());
}
-
json_decode()是标准、安全、可错误捕获的方式 - 不建议用
include()或require()加载未处理的 JSON 文件 - 如果 JSON 文件含中文或特殊字符,确保文件编码为 UTF-8 无 BOM
真要生成 PHP 原生数组文件?用 var_export() 输出
适用于配置类数据需长期缓存、且确定不常变动的场景(比如地区列表、状态码映射):
$json = file_get_contents('regions.json');
$data = json_decode($json, true);
file_put_contents('regions.php', '<?php return ' . var_export($data, true) . ';');
- 生成的
regions.php可直接require得到数组:$regions = require 'regions.php'; -
var_export()输出的是合法 PHP 语法,比手写更可靠 - 注意:不要对用户输入或动态 JSON 做这一步,有安全与维护风险
别踩坑:eval()、include() 直接加载 JSON 很危险
以下写法看似简单,但极其危险:
立即学习“PHP免费学习笔记(深入)”;
// ❌ 千万别这么干
$content = file_get_contents('user_data.json');
eval('$data = ' . $content . ';'); // 注入风险!JSON 里塞个 "; phpinfo(); //" 就完蛋
-
eval()执行任意代码,JSON 若被篡改或来源不可信,等于开放远程执行入口 -
include('data.json')在某些 PHP 配置下可能触发解析错误或静默失败 - 即使加了
@抑制错误,也无法绕过语法不兼容问题
真正需要“PHP 格式数据文件”的时候,优先走 json_decode() 流程;只有明确需要规避重复解析开销、且数据静态可信,才用 var_export() 生成一次性的 PHP 数组文件。路径、编码、错误处理,每一步漏掉都可能让后续调试花半天。











