2009-10-26 2 views
8

Mi piacerebbe 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 programmaticamente con phpinfo. Quindi ora che ho le 2 uscite, mi piacerebbe confrontarle senza esaminarle manualmente. C'è un modo automatico per questo?confronto 2 impostazioni phpinfo

Inoltre, come nota a lato ma correlata, I think phpinfo è l'output di php.ini. È corretto?

+1

non credo che sia un uscita diretta di php.ini, ma la maggior parte l'informazione è un riflesso di ciò che è contenuto in php.ini – Vamos

+0

@Rew, Grazie per aver cancellato quella parte – Chris

+0

Probabilmente lo hai già letto, se non lo sei, forse vale la pena leggerlo: http://php.net/manual/en/function.phpinfo.php – Vamos

risposta

20

dal manuale PHP su phpinfo():

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

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

Se si desidera elaborare manualmente le impostazioni php.ini, è possibile controllare ini_get_all() anziché phpinfo(). Questo restituisce una matrice di tutti i valori di configurazione.

Si potrebbe trasferire la produzione di ini_get_all() dal server A al server B (per esempio usando var_export() per creare codice PHP per creare l'array, o serialize()), quindi utilizzare 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> 
1

Se si desidera solo per confrontare due php. file 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 - vedi [parse_ini_file] (http://www.php.net/ parse_ini_file)() [parse_ini_string] (http://www.php.net/parse_ini_string)() – goat

2

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

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

Supponendo di avere un server web con l'arricciatura, appena messo compare.php in una directory e cambia i valori di $ sito1 e $ site2 agli URL che recuperano phpinfo e ti cerchi un facile da leggere, bella stampa diff. Vedere l'esempio sul suo blog - http://blog.brettalton.com/2012/08/09/phpinfo-compare/

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

poi prendere le uscite e incollarli nel https://www.diffnow.com o il vostro diff-er preferito.

1

Confronto di due php.ini file facilmente utilizzando una funzione parse_ini_file

codice di esempio frammento di

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

uscita

enter image description here

+0

Avevo bisogno di confrontare una dozzina di file ini e ho usato questo come un ottimo punto di partenza. Grazie! – thinsoldier

+0

Siete i benvenuti @thinsoldier, Happy Coding ...... –