从自定义路径获取PHP配置

时间:2019-05-18 13:32:32

标签: php

我将PHP 7.3.5用作FPM,并选择了user_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/');

1 个答案:

答案 0 :(得分:0)

命令行中的

php -i将列出与phpinfo()几乎相同的信息。 php -iphpinfo() here之间的区别。

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

编辑:添加了循环,可让您查看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]));