2009-10-26 23 views
8

Me gustaría comparar la configuración que tengo en 2 servidores diferentes. Ambos son alojamiento compartido, por lo que no creo que tenga suficiente acceso para hacerlo de otra manera, sino programáticamente con phpinfo. Ahora que tengo las 2 salidas, me gustaría compararlas sin examinarlas manualmente. ¿Hay una forma automatizada para esto?comparando 2 configuraciones phpinfo

También, como una nota lateral pero relacionada, I piensa phpinfo es la salida de php.ini. ¿Es esto correcto?

+1

no creo que es una salida directa de php.ini, pero la mayoría de la información es un reflejo de lo que está contenido en php.ini – Vamos

+0

@Rew, Gracias por borrar esa parte – Chris

+0

Probablemente ya hayas leído esto, si no, tal vez valga la pena leerlo: http://php.net/manual/en/function.phpinfo.php – Vamos

Respuesta

20

Desde el Manual de PHP en phpinfo():

salidas 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, información y entorno del servidor (si se compila como un módulo), el entorno PHP, información de versión del sistema operativo, rutas, valores maestros y locales de opciones de configuración, encabezados HTTP y el PHP Licencia.

phpinfo() hace algo más que imprimir php.ini configuración.

Si desea procesar las configuraciones php.ini manualmente, es posible que desee comprobar ini_get_all() en lugar de phpinfo(). Esto devuelve una matriz de todos los valores de configuración.

Usted puede transferir la salida de ini_get_all() desde el servidor al servidor B (por ejemplo, mediante el uso de var_export() para crear código PHP para crear la matriz, o serialize()), a continuación, utilizar array_diff_assoc() para comparar los ajustes.


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> 
1

Si sólo quiere comparar dos php. archivos 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"; 
} 
?> 
+1

fyi - ver [parse_ini_file] (http://www.php.net/ parse_ini_file)() [parse_ini_string] (http://www.php.net/parse_ini_string)() – goat

2

Encontré esta pregunta buscando y, posteriormente, encontré un script que hace exactamente lo que quería (y espero que OP también lo desee).

https://github.com/brettalton/phpinfo-compare

Asumiendo que tiene un servidor web con rizo, sólo hay que poner compare.php en un directorio y cambia los valores de $ sitio1 y site2 $ a direcciones URL que recuperan phpinfo y se encontrara en una fácil de leer, bonita impresión diff. Véase el ejemplo en su blog - http://blog.brettalton.com/2012/08/09/phpinfo-compare/

0
<?php var_dump(ini_get_all()); ?> 

luego tomar las salidas y pegarlos en https://www.diffnow.com o su diff-er favorito.

1

Comparando dos php.archivos ini fácilmente usando una función parse_ini_file

fragmento de código 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 :'[email protected]$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 :'[email protected]$firstIniDiff[$key].'</li> '; 
    } 

    echo '</ol>'; 
} 

salida

enter image description here

+0

Necesitaba comparar una docena de archivos ini y lo usé como un excelente punto de partida. ¡Gracias! – thinsoldier

+0

Eres bienvenido @thinsoldier, Happy Coding ...... –