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?
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
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.