Question

Je voudrais comparer les paramètres que j'ai sur 2 serveurs différents. Les deux sont partagés d'hébergement donc je ne pense pas avoir assez d'accès pour le faire autrement que par programmation avec phpinfo. Alors maintenant que j'ai les 2 sorties, j'aimerais les comparer sans les examiner manuellement. Existe-t-il un moyen automatisé pour cela?

De plus, en tant que note parallèle mais liée, je pense que phpinfo est la sortie du fichier php.ini. Est-ce correct?

Était-ce utile?

La solution

Extrait du manuel PHP sur phpinfo () :

  

Affiche une grande quantité d’informations sur l’état actuel de PHP. Cela inclut des informations sur les options et les extensions de compilation PHP, la version de PHP, les informations sur le serveur et l'environnement (si elles sont compilées sous forme de module), l'environnement PHP, les informations sur la version du système d'exploitation, les chemins d'accès, les valeurs principales et locales des options de configuration, les en-têtes HTTP et PHP. Licence.

phpinfo () fait plus que simplement imprimer les paramètres php.ini .

Si vous souhaitez traiter manuellement les paramètres php.ini , vous pouvez consulter ini_get_all () au lieu de phpinfo () . Ceci retourne un tableau de toutes les valeurs de configuration.

Vous pouvez transférer la sortie de ini_get_all () du serveur A au serveur B (par exemple, en utilisant var_export () pour créer du code PHP permettant de créer le tableau, ou serialize () ), puis utilisez array_diff_assoc () pour comparer les paramètres.

export.php : (serveur A)

<?php echo serialize(ini_get_all()); ?>

compare.php : (serveur 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>

Autres conseils

Vous avez trouvé cette question en cherchant, puis un script qui fait exactement ce que je voulais (et je pense que le PO voulait aussi).

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

En supposant que vous ayez un serveur Web avec curl, il suffit de mettre compare.php dans un répertoire et de changer les valeurs de $ site1 et $ site2 en urls qui extraient phpinfo et d'obtenir un diff facile à lire et joli. Voir l'exemple sur son blog - http://blog.brettalton.com/2012/ 08/09 / phpinfo-compare /

Comparer facilement deux fichiers php.ini en utilisant une fonction parse_ini_file

Exemple d'extrait de code

$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>';
} 

Sortie

 entrer la description de l'image ici

Si vous voulez juste comparer deux fichiers 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()); ?>

Ensuite, prenez les sorties et collez-les dans https://www.diffnow.com ou dans votre diff préféré. er.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top