【问题标题】:Get PHP configuration from custom paths从自定义路径获取 PHP 配置
【发布时间】:2019-05-19 03:38:32
【问题描述】:

我将PHP 7.3.5 用作FPMuser_ini.filename 选项。

全局php.ini 将从/etc/php/php.ini 解析,自定义配置将从/var/users/<username>/<domain>/php.ini 解析。

如何在不使用phpinfo() 方法的情况下列出完整的解释配置,在/var/users/example/example.com/ 等基于路径上指定?

默认情况下,我可以使用ini_get('display_errors') - 但它唯一的上下文,取决于脚本执行。在 CLI 上,我可以使用参数/参数 --with-config-file-scan-dir,但我不想使用像 shell_exec() 这样的 Shell 环境。

可以使用 PHP 方法获取配置值及其上下文/范围,例如 ini_get('display_errors', '/var/users/example/example.com/');?

【问题讨论】:

    标签: php


    【解决方案1】:

    php -i 在命令行中将列出与phpinfo() 几乎相同的信息。更多关于 php -iphpinfo() here 之间的区别。

    您也可以通过php --ini 来查看配置文件,但是对于 fpm 和 cli,它们可能会有所不同。

    EDIT添加了循环,让您可以查看 ini 值的设置位置。

    /**
     *  Get array of values that match given needle.
     *
     * @param string $needle
     * @param array $array 
     * @return array
     */
    function search_in_array(string $needle, array $array): array 
    {
        $values = [];
    
        foreach ($array as $value) {
            if (strpos($value, $needle)) { // check wheter
                $values[] = trim($value); // paths to ini files contains spaces so we remove them.
            }
        }
    
        return $values;
    }
    /**
     *  Find given variable in set .ini file. 
     *
     * @param string $varname
     * @param string $ini 
     * @return string
     */
    function get_ini_in_context(string $varname, string $ini): string
    {
        $iniFile = parse_ini_file($ini);
        $phpIni  = parse_ini_file(php_ini_loaded_file());
    
        if (isset($iniFile[$varname]) && isset($phpIni[$varname])) {
            if ($iniFile[$varname] !== $phpIni[$varname]) {
                return $varname . ' is changed to ' . $iniFile[$varname] . ' in file ' . $ini . ' in php.ini it is ' . $phpIni[$varname];
            } else {
                return $varname . ' is same as in php.ini';
            }
        } elseif (isset($phpIni[$varname]) && !isset($iniFile[$varname])) {
            return $varname . 'is set only in php.ini';
        } else {
            return $varname . 'is not set in any ini file.';
        }
    }
    
    $inis = explode(',', php_ini_scanned_files());
    $inis = search_in_array('xsl', $inis);
    
    var_dump(get_ini_in_context('post_max_size', $inis[0]));
    

    【讨论】:

    • 问题是输出格式。对于示例phpinfo() 返回HTML Document - 在这里您必须通过解析获取内容。与 CLI 用法相同 - 您必须解析输出。我不想解决不解析生成的输出,我不想直接获取配置值!
    • 我认为没有必要投反对票。但是,您可以使用php_ini_scanned_files(),然后查找您要读取的.ini 文件,并通过parse_ini_file() 读取它。
    • 投反对票是因为您没有阅读我的帖子。我想再引用一次:[...] but i don't want to use an Shell environment like shell_exec().
    • 无论如何,第二个建议的解决方案对您有用吗?我认为您需要编写几个循环,但似乎 PHP 没有提供任何其他方法来获取 ini 值和包含它们的文件。
    • @AdrianPreuss 我已经用函数更新了答案,这些函数允许您找到设置值的位置。您可以更改退货以符合您的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2021-08-25
    相关资源
    最近更新 更多