comparando 2 configuraciones de phpinfo
Pregunta
Me gustaría comparar la configuración que tengo en 2 servidores diferentes. Ambos son hosting compartido, así que no creo que tenga suficiente acceso para hacerlo de otra manera que no sea programáticamente con phpinfo. Entonces, ahora que tengo las 2 salidas, me gustaría compararlas sin examinarlas manualmente. ¿Hay una manera automatizada para esto?
Además, como nota al margen pero relacionada, creo que phpinfo es la salida de php.ini. ¿Es esto correcto?
Solución
Del Manual PHP en phpinfo ()
:
Produce una gran cantidad de información sobre el estado actual de PHP. Esto incluye información sobre las opciones y extensiones de compilación de PHP, la versión de PHP, la información y el entorno del servidor (si se compila como un módulo), el entorno de PHP, la información de versión del sistema operativo, las rutas, los valores maestros y locales de las opciones de configuración, los encabezados HTTP y el PHP Licencia.
phpinfo ()
hace más que simplemente imprimir la configuración de php.ini
.
Si desea procesar la configuración de php.ini
manualmente, puede consultar ini_get_all ()
en lugar de phpinfo ()
. Esto devuelve una matriz de todos los valores de configuración.
Puede transferir la salida de ini_get_all ()
del servidor A al servidor B (por ejemplo, utilizando var_export ()
para crear código PHP para crear la matriz, o serialize ()
), luego use array_diff_assoc ()
para comparar la configuración.
export.php : (Servidor A)
<?php echo serialize(ini_get_all()); ?>
compare.php : (Servidor 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>
Otros consejos
Encontré esta pregunta buscando y posteriormente encontré un script que hace exactamente lo que quería (y espero que el OP también lo desee).
https://github.com/brettalton/phpinfo-compare
Suponiendo que tiene un servidor web con curl, simplemente coloque compare.php en un directorio y cambie los valores de $ site1 y $ site2 a las URL que busquen phpinfo y obtenga una diferencia de impresión bonita y fácil de leer. Ver ejemplo en su blog: http://blog.brettalton.com/2012/ 08/09 / phpinfo-compare /
Comparar fácilmente dos archivos php.ini utilizando una función parse_ini_file
Fragmento de código de ejemplo
$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>';
}
Salida
Si solo desea comparar dos archivos 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()); ?>
Luego tome los resultados y péguelos en https://www.diffnow.com o en su archivo de diferencias favorito er.