문제
2 개의 다른 서버에있는 설정을 비교하고 싶습니다. 둘 다 공유 호스팅이므로 다른 방법으로는 Phpinfo와 프로그래밍 방식으로 할 수있는 충분한 액세스 권한이 없다고 생각합니다. 이제 2 개의 출력이 있었으므로 수동으로 검사하지 않고 비교하고 싶습니다. 이를위한 자동화 된 방법이 있습니까?
또한 측면이지만 관련 메모로 생각한다 phpinfo는 php.ini의 출력입니다. 이 올바른지?
해결책
PHP 매뉴얼에서 phpinfo()
:
PHP의 현재 상태에 대한 많은 양의 정보를 출력합니다. 여기에는 PHP 컴파일 옵션 및 확장, PHP 버전, 서버 정보 및 환경 (모듈로 컴파일 된 경우), PHP 환경, OS 버전 정보, 경로, 구성 옵션, HTTP 헤더 및 PHP에 대한 정보가 포함됩니다. 특허.
phpinfo()
단순히 인쇄하는 것 이상을 수행합니다 php.ini
설정.
처리하려면 php.ini
수동으로 설정하면 체크 아웃 할 수 있습니다 ini_get_all()
대신에 phpinfo()
. 이것은 모든 구성 값의 배열을 반환합니다.
출력을 전송할 수 있습니다 ini_get_all()
서버 A에서 서버 B로 (예 : 사용하여 var_export()
배열을 만들기위한 PHP 코드를 만들거나 serialize()
), 그런 다음 사용하십시오 array_diff_assoc()
설정을 비교합니다.
Export.php: (서버 a)
<?php echo serialize(ini_get_all()); ?>
비교 .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>
다른 팁
검색 하여이 질문을 발견 한 후 내가 원하는 것을 정확하게 수행하는 스크립트를 찾았습니다 (그리고 OP도 원했던 것도 기대합니다).
https://github.com/brettalton/phpinfo-compare
CURL이있는 웹 서버가 있다고 가정하면 Compart.php를 디렉토리에 넣고 $ site1 및 $ site2의 값을 phpinfo를 가져 오는 URL로 변경하면 읽기 쉽고 Prett Print Diff가 있습니다. 그의 블로그의 예를 참조하십시오 - http://blog.brettalton.com/2012/08/09/phpinfo-compare/
두 개의 php.ini 파일을 사용하여 쉽게 비교합니다 parse_ini_file 기능
코드 스 니펫 예제
$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>';
}
산출
두 개의 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()); ?>
그런 다음 출력을 가져 와서 붙여 넣습니다 https://www.diffnow.com 또는 좋아하는 diff-er.