【问题标题】:How to change a value permanently in another PHP file如何永久更改另一个 PHP 文件中的值
【发布时间】:2013-03-21 00:00:26
【问题描述】:

我正在为我正在处理的事情使用配置文件。在该配置文件中,我有一行 $twelveHourTimeEnabled = true;。我希望能够在此将 true 切换为 false,但不确定如何将该行从 true 更改为 false

目前,我正在使用单独的文件来切换两者,但我知道这一定是非常低效的。

$fn = "config.php"; 
$file = fopen($fn, "w+"); 
$size = filesize($fn); 

$twelveHourConfig = "12hrconfig.php";
$twelveHourConfigFile = file_get_contents($twelveHourConfig);

fwrite($file, $twelveHourConfigFile);

fclose($file);

如何在不需要读取其他两个文件的情况下将 true 值切换为 false,反之亦然?

编辑:

这个项目是一个用于桌面应用程序(Mac OS X 的 Alfred 应用程序)的 PHP 插件,它可以将电视信息返回给无论身在何处的用户。因此,在调用关键字时会执行此操作。因此,无法使用数据库等。

编辑 2: 抱歉,我没有 JSON 或其他文件 IO 操作的经验,因为我通常处理 CRUD。另外,要知道我无法控制用户机器等。这需要与 PHP 一起使用,当有人安装 Mac OS X 时,默认情况下会安装 PHP。仅此而已。如果有人可以解释 JSON,我会很乐意使用它,只是我对它一无所知,如何使用它等等。

【问题讨论】:

  • 上下文不清楚,但它看起来像一个“时间”的东西,那么为什么不是一个带时间戳的数据库呢?
  • 嗯,你可以用ini配置,xml或者json文件代替,更安全,更简单。
  • 添加到马里奥所说的;您应该记住,如果确切的短语 ($twelveHourTimeEnabled = true;) 出现在评论或 if-else 构造中,则可能会破坏目的。始终检查是否有更多匹配项,然后正确处理它们。如果可能的话,最好将此类设置存储在数据库中,这样会更干净/更易读且更易于访问。题外话,但只是说。
  • 谢谢大家。遗憾的是,这不是一个选项,因为它不是基于 Web 的应用程序,而是 Alfred App for Mac OS X 的扩展。因此,配置文件被用于允许用户设置的关键字触发更改配置文件以便于使用。
  • 我会将您的所有数据存储在配置文件中,而不是 PHP 文件中。 JSON 很容易使用,因为您可以打开文件,读入,json_decode() 将其放入对象或数组中,修改项目,然后json_encode() 并再次写入文件

标签: php file-io


【解决方案1】:

我不确定你为什么认为 JSON 是多余的。您实际上只需要四个 PHP 方法 - 2 个用于读取/写入文件,2 个用于编码/解码 JSON。哎呀,你甚至不需要理解 JSON 就可以使用它,如下所述,但是能够查看 configfilename 并阅读它可能会很好,这样你就可以学习一些 JSON ;)

假设你有一个包含你的配置的数组,例如:

$configArray['key'] = 'value';

用 json 写出来:

file_put_contents('configfilename', json_encode($configArray));

读取文件:

$configArray = json_decode(file_get_contents('configfilename'), true);

请注意,json_decode 的第二个参数已显式设置为 true,因此 $configArray 将是一个关联数组。这是个人喜好;默认情况下,它将是一个对象。

(这个答案很大程度上基于这个关于reading/writing JSON的问题。)

【讨论】:

    【解决方案2】:

    对于配置文件,我建议使用以下设置。

    假设这是config.php的内容:

    <?php
    
    return array(
        'opt1' => 'value1',
        'opt2' => 'value2',
    );
    

    然后,加载这个配置:

    <?php
    
    $config = require 'config.php';
    // $config['opt1'] == 'value1'
    

    修改配置可以通过改变数组并写回来完成:

    $config['opt2'] = 'value2 but different'; 
    
    file_put_contents('config.php', '<?php return ' . var_export($config, true) . ';');
    

    要在您的情况下交换配置文件,您可以简单地使用copy()

    copy('12hrconfig.php', 'config.php');
    

    【讨论】:

    • 谢谢。我只是认为必须有一种更简单的方法来简单地将值从 true 更改为 false(反之亦然)。这将允许我删除另外两个配置文件并减小扩展的整体大小。
    • @kkirsche 我添加了一个如何修改配置并将其写回文件的示例。
    猜你喜欢
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2018-07-27
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多