我正在尝试编写一些代码来生成带有数组的 php 文件 like this .
但是,为了创建正确的配置文件,我需要能够将表达式“按原样”保留在数组中。这是因为该文件将被许多用户使用,并且表达式根据用户设置的环境变量等进行计算。
所以,假设我们在数组中有这个键/值,我最终想要输出到文件:
[
...
'connection' => $isFork ? $sourceArray['connection'] : config('database.default'),
...
]
当这个数组最终写入一个 php 文件时(现在使用 var_export
和 file_put_contents
),我会看到
'connection' => config('database.default')
成为
'connection' => 'default_connection',
因为表达式已被求值。我需要的是一种方法来防止表达式作为数组中的值被计算但也确保
'connection' => $isFork ? $sourceArray['connection']
评估结果为
'connection' => 'my_connection'
有什么办法可以做到这一点吗?
编辑:我基本上想做 this但相反并带有表达式。
最佳答案
如果我理解正确,您的解决方案是使用数组的字符串表示形式,这样语句就不会被评估。我会序列化该数组并将该字符串放入文件中。告诉你的人在收到它后立即反序列化
。更好的是,json_encode
你的数组将为你提供一个 json 字符串。您可以通过 put_file_contents
将其放入,并告诉您的窥视者 json_decode
内容。他们可以像 json_decode($content, TRUE)
这样使用它,这将返回关联数组。
更新
所以你想直接编写 PHP。我看到您的数组中有连接内容,因此我认为可以安全地认为它是某种包含连接设置等的配置文件。
// filename should have the .ini at the end
function writeConfig( $filename, $yourArray ) {
$fh = fopen($filename, "w");
// making sure its available
if (!is_resource($fh)) {
return false;
}
// start dumping you array to the file
foreach ($yourArray as $key => $value) {
fwrite($fh, sprintf("%s = %s\n", $key, $value));
}
fclose($fh); // close file
return true;
}
当你想读的时候
function readConfigFile( $fileThatMadeAbove ) {
return parse_ini_file($fileThatYouMadeAbove, false, INI_SCANNER_NORMAL);
}
由于它是配置信息,因此使用 php 中的 ini
可能会更好。
如果您想尝试简单的解决方案
$fp=fopen('filename.php','w');
fwrite($fp, "$yourArray");
fclose($fp);
老实说,我不知道你是否可以执行"$yourArray"
,而且我没有地方可以测试它。您很可能需要执行 print_r($yourArray)
因为它是您写入文件的字符串,这就是我在上面提出建议的原因。
我没有主意了。祝你好运(:
关于php - 将 php 数组代码写入文件而不评估表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432827/