У меня есть файл php.ini
который содержит следующие строки:
; ...settings extension=pdo_mysql extension=pdo_oci ; settings...
Поэтому я делаю это:
var_dump( parse_ini_file( '/path/to/php.ini' )[ 'extension' ] );
Но все, что я получаю, это string(7) "pdo_oci"
поэтому похоже, что синтаксический анализ просто поддерживает окончательное значение, для которого было установлено extension
.
Есть ли способ заставить ключ extension
возвращать массив вместо этого?
Я понимаю, что внутренности PHP, вероятно, используют выделенный синтаксический анализатор, чтобы явно обрабатывать эту ситуацию, чтобы расширения загружались правильно, но это не помогло мне достичь моей цели.
Поскольку ключи ini-файла становятся ключами к массиву, значения переопределяются. Я придумал свою собственную функцию.
Код:
function my_parse_ini($file){ $arr = array(); $handle = fopen($file, "r"); if ($handle) { while (($line = fgets($handle)) !== false) { $parsed = parse_ini_string($line); if(empty($parsed)){ continue; } $key = key($parsed); if(isset($arr[$key])){ if(!is_array($arr[$key])){ $tmp = $arr[$key]; $arr[$key] = array($tmp); } $arr[$key][] = $parsed[$key]; }else{ $arr[$key] = $parsed[$key]; } } fclose($handle); return $arr; } else { // error opening the file. } }
Назовите его передачей файла для анализа, например:
$parsed = my_parse_ini('/path/to/php.ini');
Результат: ( $parsed
)
Для файла, содержащего
; ...settings extension=pdo_mysql extension=pdo_oci foo=test bar=ok foo=teste1 ; settings...
Это результат:
Array ( [extension] => Array ( [0] => pdo_mysql [1] => pdo_oci ) [foo] => Array ( [0] => test [1] => teste1 ) [bar] => ok )