Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将数组从旧配置文件合并到新配置文件_Php_Arrays_File_Merge - Fatal编程技术网

PHP将数组从旧配置文件合并到新配置文件

PHP将数组从旧配置文件合并到新配置文件,php,arrays,file,merge,Php,Arrays,File,Merge,我的应用程序的旧配置文件如下所示: <?php return array( 'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])), 'DOMAIN' => $_SERVER['HTTP_HOST'], 'PATH_CONTROLLER' => realpath(dirname(__FILE__

我的应用程序的旧配置文件如下所示:

<?php
return array(
    'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
    'DOMAIN' => $_SERVER['HTTP_HOST'],
    'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
    'DEBUG' => true,
    'EMAIL_USED_MAILER' => 'phpmailer',
    'SEND_MAIL_TO' => 'myreal@email.com'
  );
<?php
return array(
    'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
    'DOMAIN' => $_SERVER['HTTP_HOST'],
    'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
    'DEBUG' => false,
    'EMAIL_USED_MAILER' => 'phpmailer',
    'SEND_MAIL_TO' => 'your_mail@example.net',
    'SEND_MAIL_FROM' => '',
    'NEW_VAR' => 'foo'
  );

首先,为了验证我是否正确理解了您的问题,我的回答基于以下假设:

  • 您正在开发一个安装在多台服务器上的PHP应用程序(您自己或其他人可以下载您的应用程序)
  • 每个安装都可以有自己的自定义配置,比如在名为
    config.php的文件中
  • 您正在应用程序中的某个地方阅读此用户配置,假设您有一个类似于
    getConfig(){$config=include('config.php');return$config;}
  • 您正在更新此应用程序,随着该更新,用户可以更改一些新的配置选项
  • 如果以上都是真的,那么我建议采用以下工作流程:

  • 不要触摸用户配置文件。是的,它可以自动完成,但要做到这一点很难,而且把事情搞砸的机会很大。例如:如果一个用户有一个写在两行上的选项——PHP同步正确,但是如果您在upgrade.PHP中假设每个配置都在一行上,那么您可能会破坏他或她的配置文件

  • 在某处记录新的配置选项和/或提供一个包含所有可用选项的
    config.example.php

  • 将当前现有的
    getConfig()
    -函数(从假设3)更改为如下所示,这样您就可以进行一次安全的合并,并保证能够正常工作:

  • 代码:


    听起来您需要编写一个脚本来解析这两个配置文件并找出差异,然后生成一个新的配置文件。根据文件的内容,您可能可以使用一个简单的bash命令。@varlogtim是的,没错,我也在考虑awk和sed,但更喜欢php解决方案……文件中还有什么?一个可能的开始是将整个文件读入一个变量,
    上的
    分解
    ,然后
    上的
    分解
    ,这将为您提供一个
    键值数组
    ,然后您可以使用该数组比较键,以查看是否存在一个不在另一个中的键。不过,最好是用字符串替换您想要保留的任何字段。例如,"myreal@email.com“你想留什么就留什么。
    <?php
    return array(
        'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
        'DOMAIN' => $_SERVER['HTTP_HOST'],
        'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
        'DEBUG' => true,
        'EMAIL_USED_MAILER' => 'phpmailer',
        'SEND_MAIL_TO' => 'myreal@email.com',
        'SEND_MAIL_FROM' => '',
        'NEW_VAR' => 'foo'
      );
    
    function getConfig() { 
        $applicationDefaultConfig = array(
            'SEND_MAIL_FROM' => '',
            'NEW_VAR' => 'foo'            
        );
        $usersConfig = include('config.php'); 
        return array_merge($applicationDefaultConfig, $usersConfig); 
    }