从PHP文件读取配置设置并使用shell脚本上传整个项目代码的最简洁方法

时间:2010-12-07 07:43:43

标签: php parsing shell deployment configuration-files

我是shell脚本的新手,所以需要一些关于使用shell脚本解析PHP文件的想法。

我们是一个PHP项目,我正在改进我们的shell脚本,用于将代码上传到生产服务器。

有一个PHP配置文件production.settings.php需要在上传期间读取一些常量 -

BASE_PATH(prod服务器上项目root的路径)
db_hostdb_name等(prod数据库的数据库设置 - 用于在上传前备份数据库)

问题

  • 如何读取常量的值?

    它们的定义如下:

    define("BASE_PATH","/path/to/project/root");
    
  • 如何读取常量的第一个未注释值?
    注意 - 常量可以在同一个文件中定义多次(让我们假设可能性 - 这可能是错误的,或者可能有行的注释实例)

到目前为止,我只能在shell脚本中使用define("BASE_PATH"获取包含字符串grep的行数 -

cd ..
PROJECT_ROOT=$PWD
result= grep -ic 'define("BASE_PATH",' $PROJECT_ROOT'/config/main.settings.php'
echo "see"$result
  • 这种解析方法是否足够好或者yml文件会更好?是否有任何shell命令/片段用于执行此操作,以便通过编写较少量的代码来获取结果?

更新
查看我的其他问题以获取更多详细信息: -
Manipulating an array (printed by php-cli) in shell script
Assigning values printed by PHP CLI to shell variables
Initiating dynamic variables (variable variables) in bash shell script

3 个答案:

答案 0 :(得分:1)

为什么不用PHP CLI进行编码?那是你明白的吗?也许您可以将常量放在ini文件中并阅读它们?

答案 1 :(得分:1)

只需使用php,然后调用shell脚本来调用php脚本。

假设您在defs.php中定义了一堆定义:

define('NAME', 'JOHN');
define('HOBBY', 'FISHING');

然后创建一个php脚本get_defs.php

require_once 'defs.php';
$const = get_defined_constants(true);
foreach($const['user'] as $k => $v) {
   echo "export $k=$v";
}

然后在你的shell脚本中运行它:

`php get_defs.php`

发生的是,get_defs.php将输出一堆export KEY=VALUE,然后shell将运行php get_defs.php输出的那些命令。

答案 2 :(得分:0)

如果您对PHP很满意,那么使用PHP编写shell脚本。如果你走这条路线我会把所有配置设置移动到一个配置文件... INI,YAML,XML,whetever漂浮你的船。然后,我将修改定义您的常量的应用程序的引导程序,以便从此配置文件中读取。这样您就可以在脚本和应用程序中使用它而无需更改它。