Вопрос
Я хотел бы сравнить настройки, которые у меня есть на 2 разных серверах.Оба являются общим хостингом, поэтому я не думаю, что у меня достаточно доступа, чтобы сделать это каким-либо другим способом, кроме программного с помощью 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 : (сервер B)
<?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>
Другие советы
Нашел этот вопрос путем поиска, а затем нашел скрипт, который делает именно то, что я хотел (и я ожидаю, что ОП тоже хотел). Р>
https://github.com/brettalton/phpinfo-compare
Предполагая, что у вас есть веб-сервер с curl, просто поместите Compare.php в каталог и замените значения $ site1 и $ site2 на URL-адреса, извлекающие phpinfo, и вы получите легко читаемый, симпатичный diff для печати. Смотрите пример в его блоге - http://blog.brettalton.com/2012/ 08/09 / phpinfo-сравнить /
Простое сравнение двух файлов 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.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 var_dump(ini_get_all()); ?>
Затем возьмите выходные данные и вставьте их в https://www.diffnow.com или в свой любимый э.