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?

¿Fue útil?

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

 ingrese la descripción de la imagen aquí

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top