Domanda

Vorrei confrontare le impostazioni che ho su 2 server diversi. Entrambi sono hosting condiviso quindi non credo di avere abbastanza accesso per farlo in altro modo ma a livello di programmazione con phpinfo. Quindi ora che ho i 2 output, vorrei confrontarli senza esaminarli manualmente. Esiste un modo automatizzato per questo?

Inoltre, come nota laterale ma correlata, penso phpinfo sia l'output di php.ini. È corretto?

È stato utile?

Soluzione

Dal manuale di PHP su phpinfo () :

  

Invia una grande quantità di informazioni sullo stato attuale di PHP. Ciò include informazioni sulle opzioni di compilazione ed estensioni di PHP, la versione di PHP, le informazioni sul server e l'ambiente (se compilato come modulo), l'ambiente PHP, le informazioni sulla versione del sistema operativo, i percorsi, i valori master e locali delle opzioni di configurazione, le intestazioni HTTP e il PHP Licenza.

phpinfo () non si limita a stampare le impostazioni php.ini .

Se vuoi elaborare manualmente le impostazioni php.ini , potresti voler controllare ini_get_all () invece di phpinfo () . Ciò restituisce una matrice di tutti i valori di configurazione.

È possibile trasferire l'output di ini_get_all () dal server A al server B (ad esempio utilizzando var_export () per creare il codice PHP per creare l'array o serialize () ), quindi usa array_diff_assoc () per confrontare le impostazioni.


export.php : (Server A)

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

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

Altri suggerimenti

Ho trovato questa domanda cercando e successivamente ho trovato uno script che fa esattamente quello che volevo (e mi aspetto che anche l'OP volesse).

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

Supponendo che tu abbia un web server con arricciatura, basta mettere compare.php in una directory e cambia i valori di $ site1 e $ site2 in URL che prendono phpinfo e ti sei procurato un diff facile da leggere, piuttosto stampa. Vedi esempio sul suo blog - http://blog.brettalton.com/2012/ 08/09 / phpinfo-compare /

Confronto di due file php.ini facilmente utilizzando una parse_ini_file

Esempio di snippet di codice

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

Output

 inserisci qui la descrizione dell'immagine

Se vuoi solo confrontare due file 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()); ?>

Quindi prendi gli output e incollali in https://www.diffnow.com o nella tua diff preferita ER.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top