Pergunta

Eu gostaria de comparar as configurações que eu tenho em 2 servidores diferentes. Ambos são de hospedagem compartilhada, então eu acho que não tem acesso suficiente para fazê-lo de outra maneira, mas programaticamente com phpinfo. Portanto, agora que eu tenho os 2 saídas, eu gostaria de compará-los sem examinar-los manualmente. Existe uma maneira automatizada para isso?

Além disso, como um lado, mas nota relacionada, eu pensar phpinfo é a saída do php.ini. É este correto?

Foi útil?

Solução

A partir do PHP Manual sobre phpinfo():

Saídas de uma grande quantidade de informações sobre o estado atual do PHP. Isso inclui informações sobre as opções do PHP compilação e extensões, a versão PHP, as informações do servidor e ambiente (se compilado como um módulo), o ambiente PHP, informações versão do sistema operacional, caminhos, valores mestre e locais de opções de configuração, cabeçalhos HTTP e o PHP Licença.

phpinfo() faz mais do que apenas imprimir configurações php.ini.

Se você quiser configurações processo php.ini manualmente, você pode querer verificar ini_get_all() vez de phpinfo(). Isso retorna uma matriz de todos os valores de configuração.

Você pode transferir a saída de ini_get_all() do servidor A para servidor B (por exemplo, usando var_export() para criar código PHP para criar a matriz, ou serialize() ), então use array_diff_assoc() para comparar as configurações.


export.php : (Servidor A)

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

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

Outras dicas

Encontrado esta pergunta pesquisando e, posteriormente encontrado um script que faz exatamente o que eu queria (e espero que o OP queria também).

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

Supondo que você tenha um servidor web com a onda, basta colocar compare.php em um diretório e altera os valores de $ site1 e US $ site2 para urls que buscar phpinfo e você tem-se um fácil de ler, diff impressão bonita. Veja o exemplo em seu blog - http://blog.brettalton.com/2012/ 09/08 / phpinfo-compare /

Comparando dois arquivos php.ini facilmente usando um parse_ini_file função

código Exemplo fragmento

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

saída

enter descrição da imagem aqui

Se você quiser apenas comparar dois arquivos 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()); ?>

Em seguida, tomar as saídas e colá-los em https://www.diffnow.com ou o seu diff- favorito er.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top