2009-10-26 91 views
8

我想比較兩臺不同服務器上的設置。兩者都是共享主機,所以我不認爲我有足夠的權限來以任何其他方式執行,但以編程方式使用phpinfo。所以現在我有2個輸出,我想比較它們而不用手動檢查它們。有沒有自動化的方法呢?比較2 phpinfo設置

此外,作爲一個方面但相關的說明,我認爲 phpinfo是php.ini的輸出。它是否正確?

+1

我不認爲這是php.ini中的直輸出,但最的信息反映了php.ini中包含的內容 – Vamos

+0

@Rew,感謝您清除 – Chris

+0

你可能已經閱讀過了,如果沒有,也許值得一讀:http://php.net/manual/en/function.phpinfo.php – Vamos

回答

20

從PHP手冊上phpinfo()

輸出了大量的關於PHP的當前狀態信息。這包括有關PHP編譯選項和擴展的信息,PHP版本,服務器信息和環境(如果編譯爲模塊),PHP環境,OS版本信息,路徑,配置選項的主和本地值,HTTP標頭和PHP執照。

phpinfo()不僅僅可以打印出php.ini設置的。

如果您想手動處理php.ini設置,則可能需要檢出ini_get_all()而不是phpinfo()。這將返回所有配置值的數組。

你可以的ini_get_all()輸出從服務器A(通過使用var_export()創建PHP代碼創建陣列,或serialize()例如),然後使用array_diff_assoc()比較設置傳送到服務器B。


export.php:(服務器A)

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

compare.php:(服務器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

如果你只是想比較兩個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"; 
} 
?> 
+1

fyi - 參見[parse_ini_file](http://www.php.net/ parse_ini_file)()[parse_ini_string](http://www.php.net/parse_ini_string)() – goat

1

比較兩個php。容易使用parse_ini_file功能INI文件

示例代碼片段

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

輸出

enter image description here

+0

我需要比較一打ini文件,並用它作爲一個很好的起點。謝謝! – thinsoldier

+0

不客氣@thinsoldier,快樂編碼...... –