سؤال

أرغب في مقارنة الإعدادات المتوفرة لدي على خادمين مختلفين.كلاهما استضافة مشتركة لذا لا أعتقد أن لدي وصولاً كافيًا للقيام بذلك بأي طريقة أخرى غير برمجيًا باستخدام phpinfo.والآن بعد أن حصلت على المخرجين، أود مقارنتهما دون فحصهما يدويًا.هل هناك طريقة آلية لذلك؟

أيضًا، كملاحظة جانبية ولكن ذات صلة، أنا يفكر phpinfo هو ناتج php.ini.هل هذا صحيح؟

هل كانت مفيدة؟

المحلول

من دليل PHP على phpinfo():

يُخرج كمية كبيرة من المعلومات حول الوضع الحالي لـ PHP.يتضمن ذلك معلومات حول خيارات وملحقات تجميع PHP، وإصدار PHP، ومعلومات الخادم والبيئة (إذا تم تجميعها كوحدة نمطية)، وبيئة PHP، ومعلومات إصدار نظام التشغيل، والمسارات، والقيم الرئيسية والمحلية لخيارات التكوين، ورؤوس HTTP، و PHP رخصة.

phpinfo() يفعل أكثر من مجرد الطباعة php.ini إعدادات.

إذا كنت ترغب في معالجة php.ini الإعدادات يدويًا، قد ترغب في التحقق منها ini_get_all() بدلاً من phpinfo().يؤدي هذا إلى إرجاع مجموعة من كافة قيم التكوين.

يمكنك نقل إخراج ini_get_all() من الخادم أ إلى الخادم ب (على سبيل المثال باستخدام var_export() لإنشاء كود PHP لإنشاء المصفوفة، أو serialize())، ثم استخدام array_diff_assoc() لمقارنة الإعدادات.


export.php:(الخادم أ)

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

قارن.php:(الخادم ب)

<?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، ما عليك سوى وضع Compare.php في دليل وتغيير قيم $site1 و$site2 إلى عناوين url التي تجلب phpinfo وستحصل على فرق طباعة جميل وسهل القراءة.انظر المثال على مدونته - 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>';
} 

انتاج |

enter image description here

إذا كنت تريد فقط مقارنة ملفين 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 أو الفرق المفضلة لديك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top