php - 将 php 数组代码写入文件而不评估表达式

标签 php arrays

我正在尝试编写一些代码来生成带有数组的 php 文件 like this .

但是,为了创建正确的配置文件,我需要能够将表​​达式“按原样”保留在数组中。这是因为该文件将被许多用户使用,并且表达式根据用户设置的环境变量等进行计算。

所以,假设我们在数组中有这个键/值,我最终想要输出到文件:

[
    ...
    'connection' => $isFork ? $sourceArray['connection'] : config('database.default'),
    ...
]

当这个数组最终写入一个 php 文件时(现在使用 var_exportfile_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/

相关文章:

php - 为什么我的 die() 文本没有显示?

javascript - 输出国家代码到控制台

javascript - 如何在 Javascript 中获取数组中的变量总数?

php - 如何在多维非关联数组上使用 foreach 循环

php - 在白天获取数组的特定部分

php - 使用 Guzzle 通过 Symfony 将 HTTP GET 发送到外部 API

具有依赖注入(inject)的 PHPUnit,使用 instanceof() 测试模拟对象

php - Yii2 API服务的非可视错误处理程序

arrays - 根据多个条件进行 Vlookup 以显示最接近的答案

javascript - 在 AsyncStorage 中保存一组项目