سؤال

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

ما هو التنسيق الأفضل لملفات التكوين هذه؟

هنا هو تقديري للأفضل:

  1. يتم تحليلها بسهولة بواسطة PHP.سيكون من الرائع ألا أضطر إلى كتابة أي كود تحليل ولكن هذا لا يمثل كسرًا للصفقة.
  2. يبقى من السهل قراءته من قبل البشر حتى عندما يكون هناك كمية كبيرة من الإدخالات
  3. هو معيار مستخدم على نطاق واسع، ولا توجد تنسيقات مخصصة
  4. هو موضع تقدير الإيجاز

لقد بدأت باستخدام لغة XML، ولكن سرعان ما توقفت عن ذلك لأسباب واضحة.لقد فكرت في JSON وYAML ولكني أردت أن أرى ما هو موجود أيضًا.

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

المحلول

ماذا عن تنسيق ملف INI؟إنه معيار ملف التكوين الفعلي، ويحتوي PHP على محلل مدمج لهذا التنسيق:

parse_ini_file

نصائح أخرى

YAML خيار جيد:http://www.yaml.org/

إنها بسيطة جدًا وقوية أيضًا

تستخدمه مشاريع روبي كثيرًا للتكوين.

لماذا لا تستخدم ملف PHP للتكوين؟

الفوائد واضحة:

  • سيتم اكتشاف الأخطاء المحتملة تلقائيًا
  • لا حاجة لاستخدام/إنشاء محلل مخصص
  • إنه مفهوم على نطاق واسع من قبل مبرمجي PHP
  • يمكن أن يكون لديك بعض المنطق المخصص، على سبيل المثال استخدام تكوينات مخصصة للتطوير، وأخرى للإنتاج، وما إلى ذلك

تستخدم الأطر الأخرى مثل Django و Rails ملف تكوين وهو عبارة عن برنامج نصي.

هناك خيار آخر يتمثل في استخدام JSON واستخدامه json_encode و json_decode.

ستكون قادرًا على استخدام هياكل بيانات أكثر ثراءً في معلمات التكوين الخاصة بك.

أنا شخصياً أحب القيام ببيانات التكوين في الفصل الدراسي.

class appNameConfig {
    var $dbHost = 'localhost';
    var $dbUser = 'root';
    //...
 }

ثم لاستخدامها كل ما عليك فعله هو

$config = new appNameConfig;
mysql_connect($config->dbHost, $config->dbUser, $config->dbPassword) or die(/*...*/);

لتغيير التكوين، كل ما عليك فعله هو قراءة الملف الذي يحتوي على الفئة الموجودة فيه، وأستخدم وظيفة مثل هذه:

function updateConfig($parameter, $value) {
    $fh = fopen('config.php', 'w+');
    while(!feof($fh)) {
        $file .= fgets($fh);
     }
    $fileLines = explode("\n", $file);
    for($i=0;$i<count($fileLines);$i++) {
        if(strstr($fileLines[$i], $parameter)) {
            $fileLines[$i] = "$" . $parameter . " = '" . $value . "'";
         }
     }
    $file = implode("\n", $fileLines);
    fwrite($fh, $file);
    fclose($fh);
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top