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

从PHP文件读取配置设置并使用shell脚本上载整个项目代码的最干净方法,php,parsing,shell,deployment,configuration-files,Php,Parsing,Shell,Deployment,Configuration Files,我是一个shell脚本的新手,所以需要一些关于使用shell脚本解析PHP文件的想法 我们的是一个PHP项目,我正在改进用于将代码上传到生产服务器的shell脚本 上传过程中需要读取一个PHP配置文件production.settings.PHP,其中有几个常量- BASE\u路径(prod服务器上项目根目录的路径) db\u主机,db\u名称等(产品数据库的数据库设置-用于在上传前备份数据库) 问题 如何读取常数的值 它们的定义如下: define("BASE_PATH","/path/to

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

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

上传过程中需要读取一个PHP配置文件
production.settings.PHP
,其中有几个常量-

BASE\u路径
(prod服务器上项目根目录的路径)
db\u主机
db\u名称
等(产品数据库的数据库设置-用于在上传前备份数据库)

问题

  • 如何读取常数的值

    它们的定义如下:

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

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

cd ..
PROJECT_ROOT=$PWD
result= grep -ic 'define("BASE_PATH",' $PROJECT_ROOT'/config/main.settings.php'
echo "see"$result
  • 这种解析方法是否足够好,或者yml文件会更好?是否有任何shell命令/代码段可以这样做,这样我就可以通过编写更少的代码来获得结果
更新
查看我的其他问题以了解有关此问题的更多详细信息:-



为什么不直接用PHP编写代码呢?这就是你所理解的?也许你可以把常量放在一个文件中并读取它们?

如果你对PHP感到满意,那么就用PHP来编写shell脚本。如果你这样做,我会将所有配置设置移到一个配置文件中…INI、YAML、XML,无论你的船在哪里漂浮。然后我会修改应用程序的引导,该应用程序定义您的常量,以便也从该配置文件中读取。这样,您就可以在脚本和应用程序中使用它,而无需对其进行更改。

只需使用php进行操作,然后调用shell脚本来调用php脚本

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

define('NAME', 'JOHN');
define('HOBBY', 'FISHING');
require_once 'defs.php';
$const = get_defined_constants(true);
foreach($const['user'] as $k => $v) {
   echo "export $k=$v";
}
然后创建一个php脚本
get_defs.php

define('NAME', 'JOHN');
define('HOBBY', 'FISHING');
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
输出的命令,改为尝试Phing或Ant。这些是Thank@Gordon中使用的构建工具。我肯定会很快尝试这些工具。但首先,我想开发一个完整的自动化部署解决方案shell将接收常量的值?然后我可以像往常一样在我的脚本中使用它们?这看起来非常漂亮和干净。但是
get_defined_constants(true)
似乎返回
E_ERROR
E_WARNING
等等。如何只获取用户定义的常量这就是为什么我在foreach中使用$const['user'],这是您之前定义的。但是您是使用PHP4还是PHP5?作为get_defined_常量(true)是的,我想为我的脚本和应用程序使用相同的文件。为什么我要使用PHP来编写shell脚本?用于将所需的常量放在那里?如果我能够正确读取shell的设置,那不是更好吗?我是jsut说,如果你不熟悉shell脚本,那么用PHP编写它会更容易。我很少用shell语言(bash、sh等)编写shell脚本-通常我使用php、python或ruby。为我做事情更容易。但我的意思是,这取决于你…shell功能强大,没有理由不能使用它,但是没有理由不使用你更喜欢的语言,如果它可以从CLI调用,php也可以。我想我会使用CLI。但是使用ini更好吗文件而不是包含常量的普通php文件?有什么好处?@sandepan=>它解释了ini的一些优点很高兴我能提供帮助!祝你好运:)