قائمة الطعام
مجانا
التسجيل
الصفحة الرئيسية  /  البرامج الثابتة/ أيهما أصح للاستخدام - يتطلب أم يشمل؟ تتطلب PHP php تضمين وصف التركيبات مرة واحدة.

أيهما أصح للاستخدام - يتطلب أم يشمل؟ تتطلب PHP php تضمين وصف التركيبات مرة واحدة.

لكى يفعل كود البرنامجأكثر قابلية للقراءة ، يمكنك ، على سبيل المثال ، وضع تعريفات الوظائف و / أو الفئات في ملف منفصل. توجد أربعة إرشادات للغة تمكّن PHP من توصيل الملفات:

  • تضمن
  • يتطلب
  • include_once
  • مطلوب

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

تضمن

تسمح لك عبارة include بتضمين وإرفاق نصوص أخرى بنص PHP الخاص بك. عند بدء تشغيل البرنامج ، سيقوم المترجم الشفهي ببساطة باستبدال التعليمات بمحتويات الملف المضمن. دعونا نرى كيف يعمل ، قم بإنشاء ملف يسمى add.php والكتابة بالداخل:

الآن دعونا ننشئ ملفًا آخر ونسميه على سبيل المثال test.php ، حيث نقوم بتضمين ملف add.php:

\ $ var2 = $ var2 "؟>

كما ترى من المثال ، تضيف عبارة التضمين محتويات الملف المضمن ، وبفضل ذلك يحصل برنامجك على إمكانية الوصول إلى متغيرات ووظائف وفئات أخرى ، وما إلى ذلك.

ملاحظة: يمكنك تعيين أي اسم للملفات المضمنة ، ولكن عليك دائمًا إضافة ملحق .php ، لأنه إذا كنت تستخدم امتدادًا مختلفًا ، فيمكن للمهاجمين طلب ملفك ، وسيعيد خادم الويب نصه. هذه مخاطرة أمنية لأن كلمات المرور أو طريقة عمل برنامجك يمكن اختراقها ، مما يعطي ثغرة للمهاجمين. لمنع حدوث ذلك ، يجب أن تتم معالجة تضمين الملفات بواسطة مترجم PHP.

اتصال داخل وظيفة

إذا تم تضمين الملف داخل دالة ، فستتصرف جميع التعليمات البرمجية الموجودة في ملف التضمين كما لو تم تعريفها داخل هذه الوظيفة ، أي سيكون للرمز نطاق محلي. دعنا نعيد كتابة المثال السابق قليلاً:

لنقم الآن بإضافة دالة إلى test.php:

في النطاق العالمي: $ var1 "؛؟>

نظرًا لأننا داخل الوظيفة أعلنا أن المتغير $ var1 عالمي ، فإنه يصبح متاحًا أيضًا في النطاق العالمي.

مسار الملف

يتم تضمين الملفات بناءً على المسار المحدد للملف ، إذا لم يتم تحديد المسار ، فسيتم تحديد المسار في التوجيه include_path (في ملف التكوين php.ini). إذا لم يتم العثور على الملف في المسار المحدد في include_path ، فسيحاول بيان التضمين التحقق من دليل العمل الحالي الذي يوجد فيه البرنامج النصي لملف التضمين ، وإذا تعذر على بنية التضمين العثور على الملف ، فسيتم إصدار تحذير.

إذا تم تحديد المسار - بغض النظر عن أي شيء: مطلق أو نسبي (متعلق بالدليل الحالي حيث يوجد البرنامج النصي المتضمن) - فسيتم تجاهل التوجيه include_path.

include_once

يتطابق سلوك include_once مع بيان include ، مع الاختلاف الوحيد الذي يتمثل في أنه إذا تم تضمين الكود من الملف مرة واحدة بالفعل ، فلن يتم تضمينه وإعادة تنفيذه. هذا يتجنب مشكلة تجاوز الوظائف والمتغيرات وما إلى ذلك. لفهم كيفية عمل هذا بشكل أفضل ، دعنا نقدم مثالاً:

دعنا نحاول تنفيذ الكود التالي في test.php:

سينتج عن هذا رسالة خطأ لأنه لا يمكن تجاوز الوظائف. لتجنب حدوث أخطاء من هذا النوع ، يجب استخدام العبارة include_once. دعنا نعيد كتابة الكود في ملف test.php:

تتطلب وتتطلب مرة واحدة

تعمل عبارتا الطلب والتطلب بشكل متماثل لتضمين و include_once مع استثناء واحد. إذا لم يتم العثور على ملف التضمين ، فسيتم إيقاف تنفيذ البرنامج النصي ، بينما يقوم التضمين و include_once بعرض تحذير ومتابعة تنفيذ البرنامج النصي.

نصيحة: حاول التخلي تمامًا عن استخدام التضمين والمطالبة ، واستخدم نظرائهم مع اللاحقة _ مرة واحدة. هذا سيجعل من السهل تقسيم ملفات برنامج معقدإلى وحدات مستقلة نسبيًا.

تتطلب بناء

تصميم يتطلبيسمح لك بتضمين الملفات في البرنامج النصي تنفيذ PHPنص PHP. النحو العام يتطلبمثل:

تتطلب اسم الملف ؛

عند بدء التشغيل (بالضبط عند بدء التشغيل ، وليس عند التنفيذ!) ، سيستبدل المترجم التعليمات بمحتويات اسم الملف (قد يحتوي هذا الملف أيضًا على نص PHP مؤطر ، كالمعتاد ، بعلامات و ?> ). علاوة على ذلك ، سيفعل ذلك على الفور قبل بدء البرنامج (على عكس البرنامج الذي تمت مناقشته أدناه). يمكن أن يكون هذا مفيدًا تمامًا لتضمين صفحات قوالب متنوعة في كود HTML في إخراج البرنامج النصي. دعنا نعطي مثالا:

ملف Header.html:

إنه عنوان

ملف Footer.html:
شركة المنزل ، 2005.

ملف Script.php
تتطلب "header.htm" ؛
// يخرج النص نص المستند نفسه
تتطلب "footer.htm" ؛
?>

وهكذا البناء يتطلبيسمح لك ببناء نصوص PHP من عدة برامج ملفات فرديةالذي يمكن أن يكون مثل لغة البرمجة-صفحات و بي أتش بي-نصوص.

تصميم يتطلبيدعم الادراج الملفات المحذوفة(منذ PHP 4.3.0). على سبيل المثال:

// لا يعمل المثال التالي لأنه يحاول تضمين ملف محلي
تتطلب "file.php؟ foo = 1 & bar = 2" ؛
// يعمل المثال التالي
يتطلب؛
?>

! تصميم يتطلبيسمح لك بتضمين الملفات البعيدة ، إذا تم تمكين هذا الخيار في التكوين ملف PHP. معلومات مفصلة.

يشمل الملفات البعيدة

يتيح لك PHP العمل مع كائنات URL مثل الملفات العادية. تُستخدم الحزم الافتراضية للعمل مع الملفات البعيدة باستخدام ملفات بروتوكول بروتوكول نقل الملفاتأو http.

إذا تم تضمين "أغلفة URL fopen" في PHP (كما هو الحال في التكوين الافتراضي) ، يمكنك تحديد الملف المراد تضمينه باستخدام عنوان URL (عبر HTTP) بدلاً من المسار المحلي. إذا فسر الخادم الهدف الملف الهدف على أنه كود PHP ، فيمكن تمرير المتغيرات إلى ملف التضمين باستخدام سلسلة استعلام عنوان URL ، كما هو الحال في HTTP GET. بالمعنى الدقيق للكلمة ، هذا ليس هو نفسه تضمين ملف ووراثة النطاق المتغير للملف الرئيسي ؛ لأن البرنامج النصي يعمل على خادم بعيد ، ثم يتم توصيل النتيجة بالبرنامج النصي المحلي.

لكي يكون التضمين عن بعد للملفات متاحًا ، يجب عليك تعيينه في ملف التكوين (php.ini) allow_url_fopen = 1.

ملاحظة: إصدارات PHP لنظام التشغيل Windows قبل إصدار PHP 4.3.0 لا تدعم القدرة على استخدام الملفات البعيدة مع هذه الوظيفة حتى إذا تم تمكين خيار allow_url_fopen.


/ * هذا يفترض أنه تم تكوين www.example.com على parse.php
* الملفات ، وليس ملفات .txt. وتعني كلمة "Works" هنا أيضًا أن المتغيرات
* يتوفر $ foo و $ bar في الملف المضمن. * /

// لن يعمل لأن file.txt لا تتم معالجته بواسطة www.example.com مثل PHP
تضمن "http://www.example.com/file.txt؟foo=1&bar=2";

// لن يعمل لأنه يبحث عن الملف "file.php؟ Foo = 1 & bar = 2" في المحلي
// نظام الملفات.
تضمين "file.php؟ foo = 1 & bar = 2" ؛

// يعمل المثال التالي:
تضمن "http://www.example.com/file.php؟foo=1&bar=2";

$ foo = 1 ؛
شريط الدولار = 2 ؛
تشمل "file.txt" ؛ // عمل
تشمل "file.php" ؛ // عمل

?>

تخطيطات الصفحة

13.22. يتطلب بيان ()

يتشابه مبدأ عبارة "تتطلب () مع توجيه المعالج المسبق #include () في لغة البرمجة C ++. إذا كنت معتادًا على هذه اللغة ، فلن يكون إتقان العوامل التالية أمرًا صعبًا بالنسبة لك ، ومع ذلك ، حتى لو لم تكن مألوفًا ، فسنحاول وصف مبادئ هؤلاء المشغلين بمزيد من التفصيل. تستبدل العبارة تتطلب () ، وتستدعي محتويات الملفات ، والمسار واسمها محددان في كتلة العبارة:

تتطلب ("path / filename.html") ؛

إذا تم تعيين معلمات عنوان URL لـ PHP fopen_wrapper_SB على تمكين (افتراضيًا عادةً) ، فيمكنك أيضًا تحديد الملف في عبارة request () باستخدام عنوان URL (Uniform Resource Locator) بدلاً من استخدام المسار المحلي للملف المطلوب في request ( ) على سبيل المثال:

$ url = http: //my_new_adress/index.phtml ؛

العبارة تتطلب () ليست دالة. على الأرجح يمكن أن يطلق عليه بناء اللغة. لماذا لا نفكر في هذا العامل كدالة:

Require () ليس خاضعًا لأي هياكل تحكم ؛

لا تُرجع Require () أي قيمة ، والتي تقوم بدورها بالوظيفة.

ستؤدي محاولة استدعاء أي قيمة من العبارة تتطلب () إلى حدوث خطأ ومقاطعة المزيد من تنفيذ البرنامج.

بخلاف التضمين ، يتطلب الأمر قراءة سطر عنوان الملف دائمًا ، حتى في حالة عدم تنفيذه. إذا كنت بحاجة إلى تضمين ملف بشكل شرطي ، فاستخدم عبارة include (). ببساطة ، لا تعتبر التعبيرات الشرطية فعالة عند العمل مع تعليمة الطلب ، ومع ذلك ، إذا لم يتم تنفيذ السطر الذي توجد عليه عبارة requre ، فلن يتم تنفيذ سطر واحد من التعليمات البرمجية في الملف الموجود في هذا العنوان. هذا أمر منطقي ، لأن الوصول إلى الملف في هذه الحالة يتم تنفيذه من خلال عامل required ().

لا تؤثر هياكل تنفيذ الحلقة على طريقة تشغيل العبارة تتطلب () ، على الرغم من أن الكود الموجود في الملف النهائي لا يزال تابعًا للحلقة. من هذا يمكننا أن نستنتج أن تعليمة الطلب يتم تنفيذها مرة واحدة فقط ، على النقيض من تضمين ().

لذلك / لا يمكنك وضع العبارة تتطلب () مع جميع التعليمات المرفقة بها في كتلة تعليمة الحلقة وانتظر تنفيذ نفس الحلقة بشكل مختلف هذا المشغلفي كل تكرار. للاستفادة من ذلك ، نقترح عليك استخدام عبارة include ().

عندما يتم تشغيل ملف بعبارة تتطلب () ، فإن cbd المضمن يرث القدرات المتغيرة للسطر الذي يتم تنفيذ requre () عليه. ستكون أي متغيرات متوفرة في هذا الخط متاحة داخل الملف المطلوب. إذا كانت عبارة request داخل دالة داخل ملف الاستدعاء ، فإن كل التعليمات البرمجية الموجودة في الملف المطلوب سوف تتصرف كما لو تم تعريفها داخل هذا الملف.

في حالة عمل العبارة تتطلب () مع ملف يتم استدعاؤه عبر HTTP ويستخدم أغلفة fopen ، وإذا كان عنوان المحطة يفسر الملف النهائي على أنه كود PHP ، ففي هذه الحالة يمكن تمرير المتغيرات إلى يتطلب () بيان باستخدام URL -request كطريقة HTTP Get. انها ليست هي نفسها. أن استدعاء ملف البيان يتطلب ، نظرًا لأن البرنامج النصي يواصل عمليًا تنفيذ البرنامج النصي على الخادم البعيد ، وسيتم بعد ذلك تضمين النتائج في البرنامج النصي المحلي:

/ * لن يعمل لأنه لم تتم معالجته بواسطة الخادم * /

تتطلب ("http: //my_domain_name/file.txt؟ varone = 1 & vartwo = 2") ؛

/ * لا يعمل لأن اسم الملف هو "file.php؟ varone = 1 & vartwo = 2"

تركز على المحلية نظام الملفات */

تتطلب ("file.php؟ varone = 1 & vartwo = 2") ؛

/ * سيعمل بدون أخطاء * /

تتطلب ("http: //my_domain_name/test.php؟ varone = 1Svartwo = 2") ؛

تتطلب ("file.txt") ؛

تتطلب ("file.php") ؛

ستساعدك هذه الأمثلة على فهم طرق استخدام عامل التشغيل تتطلب () بوضوح ، بالإضافة إلى تجنب الأخطاء عند إنشاء البرامج. بعد ذلك ، سنلقي نظرة على عبارة include () ، على غرار عبارة need () والمبادئ الأساسية لتشغيلها.

المشغل أو العامل. يمكن أن يتم التضمين بأي من الطرق التالية:

تشمل "اسم الملف" ؛ تضمين $ file_name؛ تشمل ("اسم الملف") ؛

مثال 3.9... دع ملف params.inc يخزن مجموعة من بعض المعلمات والوظائف. في كل مرة نحتاج فيها إلى استخدام هذه المعلمات (الوظائف) ، سنقوم بإدخال الأمر include ("params.inc") في نص برنامجنا الرئيسي.

Params.incinclude.php"؛ // يعرض" مرحبًا ، فاسيا! "صدى" اليوم هو $ اليوم "؛ // يعرض ، على سبيل المثال ،" اليوم هو 07.07.05 "؟> مثال 3.9. استخدام بيان التضمين

لاحظ أن استخدام عامل التشغيل تضمنيعادل ببساطة لصق محتوى ملف params.inc في شفرة include.php. ربما كان من الممكن بعد ذلك كتابة نص بسيط في params.inc دون أي علامات تشير إلى أن هذا هو كود php؟ ممنوع! الحقيقة هي أنه في وقت إدخال الملف ، يتم التبديل من الوضع معالجة PHPفي وضع HTML. لذلك ، يجب تغليف الكود الموجود داخل ملف التضمين الذي يحتاج إلى المعالجة كنص PHP النصي في العلامات المناسبة.

يتم البحث عن ملف لإدراجه وفقًا للقواعد التالية.

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

على سبيل المثال الخاص بك include_pathهو - هي . (هذا هو الدليل الحالي) ، دليل العمل الحالي هو / www /. في ملف include.php الرئيسي ، تقوم بتضمين ملف my_dir / a.php ، والذي يتضمن بدوره b.php. ثم يقوم المحلل اللغوي أولاً بالبحث عن ملف b.php في الدليل / www / ، وإذا لم يكن هناك أي ملف ، فحينئذٍ في الدليل / www / my_dir /.

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

مثال 3.10... دع الملف لإدراج params.inc يبقى كما هو و include.php كالتالي:

"؛ $ str. =" تم إنشاء الصفحة بواسطة $ user "؛ صدى" $ str "؛) Footer ()؛ // استدعاء الوظيفة Footer (). احصل على: // اليوم: 07/08/05 // The تم إنشاء الصفحة بواسطة Vasya echo "$ user، $ today" ؛ // ستعرض فاصلة ، لأن // هذه المتغيرات مرئية فقط // داخل الوظيفة؟> مثال 3.10. النطاق عند استخدام التضمين

بالإضافة إلى الملفات المحلية ، باستخدام تضمنيمكن أيضًا تضمين الملفات الخارجية من خلال تحديد عناوين url الخاصة بهم. هذه الفرصةيتحكم فيه التوجيه url_fopen_wrappers في ملف تكوين PHP وعادة ما يتم تمكينه افتراضيًا. ولكن في إصدارات PHPبالنسبة لنظام التشغيل Windows قبل إصدار PHP 4.3.0 ، فإن هذه الميزة غير مدعومة على الإطلاق ، بغض النظر عن url_fopen_wrappers.

include () هي بناء لغة خاص ويجب أن تُحاط بأقواس معقوفة عند استخدامها داخل الكتل الشرطية.

مثال 3.11. باستخدام تشمل ()

استخدام تضمنهناك نوعان من الأخطاء محتملان - خطأ في الإدراج (على سبيل المثال ، لا يمكن العثور على الملف المحدد ، أو كتابة الأمر insert نفسه بشكل غير صحيح ، وما إلى ذلك) أو خطأ في التنفيذ (إذا كان الخطأ موجودًا في الملف المراد إدراجه). في أي حال ، إذا كان هناك خطأ في الأمر

كما تعلم ، PHP لها 4 وظائف لتضمين ملفات أخرى. هذه تضمن, include_once, يتطلبو مطلوب... كيف تختلف وكيف يتم استخدامها بشكل صحيح؟

أولاً ، دعنا نلقي نظرة على الفرق بين تضمنو يتطلب... تختلف هاتان الوظيفتان فقط في رد فعلهما على عدم وجود ملف التضمين. دور تضمن("تمكين") في حالة الغياب الملف المحددسيعطي رسالة خطأ مثل E_WARNING ، لكن تنفيذ البرنامج سيستمر. على عكسها ، يتطلب("مطلوب") في حالة عدم وجود ملف تضمين ، فإنه يصدر خطأ فادحًا (E_ERROR) ، مما يؤدي إلى الإنهاء الفوري للبرنامج النصي الجاري تنفيذه.

وبالتالي ، بناءً على معرفة كيفية تنفيذ التعليمات البرمجية الخاصة بك ، يمكنك استخدام عامل تشغيل أو آخر. على سبيل المثال ، إذا كان هذا مجرد جزء من HTML لا يؤثر بشكل عام على مسار البرنامج ، أو كانت هذه بعض المكونات الإضافية الثانوية ، والتي بدونها يمكن لبقية البرنامج أن يعمل بشكل طبيعي ، فلا تتردد في استخدام تضمن... في حالات أخرى ، أوصي باستخدام يتطلب... سيؤدي هذا إلى منع احتمال تنفيذ التعليمات البرمجية بشكل غير صحيح وفي حالة حدوث خطأ (على سبيل المثال ، تم حذف ملف التضمين بواسطة فيروس أو فقده أثناء عملية التطوير) فإنه سيؤدي ببساطة إلى إنهاء البرنامج النصي. في مقال مستقبلي ، سأوضح لك كيفية تتبع كل شيء على الإطلاق. المواقف غير القياسيةفي الكود ومواكبة ما يحدث داخل الموقع.

الآن دعونا ننظر في الإنشاءات include_onceو مطلوب... من بسيط تضمنو يتطلبيتم تمييزها بالنهاية "_once" ، مما يمنع إعادة إدخال نفس الملفات.

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

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

أنا لا أستخدمه أبدًا تضمنو include_onceلأنني أعتبر عدم وجود ملف ، وهو ما يجب أن يكون ، موقفًا حرجًا يتطلب حلاً فوريًا دون أي حل وسط. وإذا احتجت إلى تضمين ملف مشكوك في وجوده ، فأنا أولًا أتحقق من وجوده باستخدام is_file ().

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

$ ret = تضمين "file.php" ؛

هذا كل شيء لهذا اليوم ، قم بالبرمجة بشكل صحيح!