Я хотел бы сравнить настройки, которые у меня есть на двух разных серверах. Оба являются общим хостингом, поэтому я не думаю, что у меня достаточно доступа, чтобы сделать это любым другим способом, но программно с помощью phpinfo. Итак, теперь, когда у меня есть 2 выхода, я бы хотел их сравнить, не изучая их вручную. Есть ли автоматизированный способ для этого?
Кроме того, в качестве побочной, но связанной заметки, я думаю , что phpinfo – это выход php.ini. Это верно?
Из руководства PHP по phpinfo()
:
Выводит большой объем информации о текущем состоянии PHP. Это включает в себя информацию о параметрах и расширениях PHP-версии, версии PHP, информации о сервере и среде (если она скомпилирована как модуль), среде PHP, информации о версии ОС, путях, основных и локальных значениях параметров конфигурации, заголовках HTTP и PHP Лицензия.
phpinfo()
делает больше, чем просто распечатывает настройки php.ini
.
Если вы хотите вручную обрабатывать параметры php.ini
, вы можете проверить ini_get_all()
вместо phpinfo()
. Это возвращает массив всех значений конфигурации.
Вы можете перенести вывод ini_get_all()
с сервера A на сервер B (например, используя var_export()
для создания PHP-кода для создания массива или serialize()
), а затем используйте array_diff_assoc()
для сравнения настроек.
export.php : (Сервер A)
<?php echo serialize(ini_get_all()); ?>
compare.php : (Сервер Б)
<?php function ini_flatten($config) { $flat = array(); foreach ($config as $key => $info) { $flat[$key] = $info['local_value']; } return $flat; } function ini_diff($config1, $config2) { return array_diff_assoc(ini_flatten($config1), ini_flatten($config2)); } $config1 = ini_get_all(); $export_script = 'http://server-a.example.com/export.php'; $config2 = unserialize(file_get_contents($export_script)); $diff = ini_diff($config1, $config2); ?> <pre><?php print_r($diff) ?></pre>
Нашел этот вопрос, выполнив поиск и впоследствии нашел скрипт, который делает именно то, что я хотел (и я ожидаю, что OP тоже захочет).
https://github.com/brettalton/phpinfo-compare
Предполагая, что у вас есть веб-сервер с curl, просто поместите compare.php в каталог и измените значения $ site1 и $ site2 на URL-адреса, которые извлекают phpinfo, и вы получили легко читаемый, довольно печатный diff. См. Пример в своем блоге – http://blog.brettalton.com/2012/08/09/phpinfo-compare/
Если вы просто хотите сравнить два файла php.ini:
#!/usr/bin/php <?php function load($export_script) { $f1 = file($export_script); foreach($f1 as $line ) { if( $line[0] == ';' ) continue; if( $line[0] == '[' ) continue; if( trim($line) == "" ) continue; $var = explode( '=', $line); $config1[trim($var[0])] = trim($var[1]); } return $config1; } $export_script = 'php.ini'; $c1 = load($export_script); $export_script = 'php52.ini'; $c2 = load($export_script); foreach( $c1 as $key => $val ) { if( $val == $c2[$key] ) continue; echo $key.': '.$c1[$key].' // '.$c2[$key]."\n"; } ?>
Сравнение двух файлов php.ini с помощью функции parse_ini_file
Пример фрагмента кода
$firstIni = parse_ini_file('/etc/php5/apache2/php.ini'); $secondIni = parse_ini_file('/etc/php5/apache2/php.ini.save'); $firstIniDiff = array_diff($firstIni, $secondIni); $secondIniDiff = array_diff($secondIni, $firstIni); if (count($firstIniDiff) > 0) { echo '<h1>php.ini changes</h1>'; echo '<ol>'; foreach ($firstIniDiff as $key => $val) { echo '<li> php.ini'.$key.': '.$val.' ----> php.ini.save :'.@$secondIniDiff[$key].'</li> '; } echo '</ol>'; } if (count($secondIniDiff) > 0) { echo '<h1>php.ini.save changes</h1>'; echo '<ol>'; foreach ($secondIniDiff as $key => $val) { echo '<li> php.ini'.$key.': '.$val.' ----> php.ini.save :'.@$firstIniDiff[$key].'</li> '; } echo '</ol>'; }
Вывод
<?php var_dump(ini_get_all()); ?>
Затем выньте выходы и вставьте их в https://www.diffnow.com или ваш любимый diff-er.