如何正确自动化操作返回数组格式的PHP配置文件?
操作PHP数组型配置文件的正确方法
你的问题出在写回配置文件时用了var_dump——这个函数输出的是调试用的变量信息,不是可直接作为配置的合法PHP代码。下面是几种靠谱的解决方法:
方法一:全程用PHP直接处理(最推荐)
不用转JSON绕弯子,直接在PHP里加载、修改、生成标准配置代码:
php -r '$config = include "sample.php"; $config["someobject"]["somefield"] = "othervalue"; file_put_contents("sample2.php", "<?php\nreturn " . var_export($config, true) . ";\n");'
这里的var_export会把数组转换成符合PHP语法的代码,生成的sample2.php格式和原文件完全一致。
方法二:保留JSON中转的改进方案
如果一定要用jq处理JSON,那写回时必须换掉var_dump,改用var_export生成合法代码:
# 加载配置转JSON JSON=$(php -r "echo json_encode(include 'sample.php');") # jq修改JSON NEW_JSON=$(echo "$JSON" | jq -cr '.someobject.somefield = "othervalue"') # 转成PHP数组并写入配置文件 php -r '$data = json_decode('\'''"$NEW_JSON"'\'',' true); file_put_contents("sample2.php", "<?php\nreturn " . var_export($data, true) . ";\n");'
注意这里的引号转义,避免bash解析时出错。
为什么原方法不行?
原脚本里的var_dump输出的是调试用的字符串(比如array(1) { [...] }),根本不是可执行的PHP配置代码,自然和原文件格式不符。而var_export专门用来生成可复用的PHP变量代码,完美匹配你的配置文件格式。
内容的提问来源于stack exchange,提问作者dvrslype
相关产品推荐
相关产品推荐

