我将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/');
?
答案 0 :(得分:0)
php -i
将列出与phpinfo()
几乎相同的信息。 php -i
和phpinfo()
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]));