الفرق بين التضمين يتطلب php. يبني التضمين في PHP. إذا كان التضمين أو الطلب لا يعمل
لكى يفعل كود البرمجةأكثر قابلية للقراءة ، يمكنك على سبيل المثال وضع تعريفات الوظائف و / أو الفئات في ملف منفصل. يتم توفير القدرة على تضمين الملفات في PHP من خلال أربع تعليمات لغة:
- تضمن
- يتطلب
- 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 تحذيرًا ومتابعة تنفيذ البرنامج النصي.
نصيحة: حاول عدم استخدام التضمين والمطالبة على الإطلاق باستخدام نظائرها مع اللاحقة _ مرة واحدة. سيسهل هذا تقسيم البرامج الكبيرة والمعقدة إلى وحدات مستقلة نسبيًا.
إذا تم وضع الوظائف في ملف منفصل ، فإن عبارتين تتطلبان وتتضمنان عبارات تسمح لك بتوصيله. المشغلين لديهم التنسيق التالي:
يتطلب(<Имя файла>);
يتطلب<Имя файла>;
تضمن(<Имя файла>);
تضمن<Имя файла>;
دعنا ننقل الدالة f_Sum () إلى ملف منفصل ( قائمة 17) وقم بتضمينها مع بيان الطلب ( قائمة 16).
قائمة 16. استخدام بيان الطلب
قائمة 17. محتويات ملف script.inc
يمكنك إنشاء ملف script.inc ، على سبيل المثال ، باستخدام Notepad ++. لاحظ أن ملف التضمين يمكن أن يكون له أي امتداد ، على الرغم من أنه من الشائع إعطاء التضمين للملفات الامتداد inc (لـ "include").
دعنا نحاول فتح ملف script.inc باستخدام مستعرض ويب. نتيجة لذلك ، ستظهر نافذة متصفح الويب مصدر:
لهذا السبب ، من الضروري وضع ملفات التضمين في دليل يمكن الوصول إليه فقط من خلال البرنامج النصي ولكن لا يمكن الوصول إليه من الإنترنت. عند تثبيت وتكوين PHP ، حددنا موقع ملفات التضمين في التوجيه include_path لملف php.ini:
include_path = ". ؛ C: \ php5 \ include"هنا ، مفصولة بفاصلة منقوطة ، هناك مكانان للبحث عن ملفات التضمين:
□ .
(نقطة) - في نفس المجلد مثل ملف تنفيذي;
□
C: \ php5 \ يشمل - في مجلد التضمين (c: \ php5 \ include).
بمعنى آخر ، إذا لم يتم العثور على ملف تضمين في نفس المجلد مثل الملف القابل للتنفيذ ، فسيقوم المترجم بالبحث في مجلد التضمين (c: \ php5 \ include).
يمكنك أيضًا حفظ ملف التضمين بامتداد php. في هذه الحالة ، لن يتم عرض الكود المصدري في نافذة مستعرض الويب.
إذا كان الملف المضمن يحتوي على تعليمات برمجية قابلة للتنفيذ ، فيجب تحديد واصفات PHP. خلاف ذلك ، سيتم إخراج كود PHP كنص عادي ، وعند استدعاء الوظائف المحددة فيه ، سيتم عرض رسالة خطأ:
دالة f_Sum ($ x، $ y = 2) (إرجاع ($ x + $ y) ؛)
خطأ فادح: استدعاء دالة f_Sum () بتنسيق
C: \ Apache2 \ htdocs \ index.php في السطر 9
بمعنى آخر ، قد يحتوي الملف المضمن أو لا يحتوي على كود PHP. على سبيل المثال ، دعنا ننقل الرأس والوظيفة f_Sum () إلى ملف header.inc ( قائمة 19) ، والتذييل في التذييل .inc ( قائمة 20). ثم نقوم بتوصيل هذه الملفات بالنص الرئيسي ( قائمة 18).
قائمة 18. وضع كود HTML في ملف التضمين
قائمة 19. محتويات ملف header.inc
قائمة 20. محتويات ملف footer.inc
الخامس قائمة 21يتم إعطاء شفرة HTML المصدر بعد تنفيذ البرنامج السابق.
قائمة 21. مصدر HTML
بهذه الطريقة يمكنك إنشاء قوالب لصفحات متعددة. المترجم ، عند مواجهته بيان الطلب ، سوف يجعل محتويات جزء الملف المضمن من الصفحة. إذا تعذر تحميل الملف ، فإن العبارة تولد خطأ فادحًا وينتهي البرنامج النصي.
يمكنك استخدام بيان التضمين بدلاً من بيان الطلب. إذا لم يتم العثور على ملف التضمين ، فسيعرض المشغل رسالة خطأ ، ولكن سيستمر تشغيل البرنامج النصي. إذا كان هذا الملف يحتوي على وظائف ، فسيؤدي كل استدعاء دالة من هذا الملف أيضًا إلى حدوث خطأ.
تعيد جملة include "true" إذا تم تحميل الملف وكانت "خطأ" عند حدوث خطأ. يمكنك منع رسالة الخطأ باستخدام عامل التشغيل @ ( قائمة 22).
قائمة 22. قمع رسائل الخطأ
يتطلب البناء
تصميم يتطلبيسمح لك بتضمين الملفات في نص PHP يقوم بتنفيذ نص PHP. النحو العام يتطلبمثل:
تتطلب اسم الملف ؛
عند بدء البرنامج (أي عند البدء وليس عند التنفيذ!) ، سيستبدل المترجم ببساطة التعليمات بمحتويات الملف file_name (قد يحتوي هذا الملف أيضًا على نص PHP ، مؤطر ، كالمعتاد ، بالعلامات و ?> ). علاوة على ذلك ، سيفعل ذلك على الفور قبل بدء البرنامج (على عكس ما تمت مناقشته أدناه). يمكن أن يكون هذا مفيدًا تمامًا لتضمين صفحات قالب متنوعة في كود HTML في إخراج البرنامج النصي. هذا مثال:
ملف header.html:
ملف footer.html:
شركة المنزل ، 2005.
ملف script.php
تتطلب "header.htm" ؛
// يخرج النص نص المستند نفسه
تتطلب "footer.htm" ؛
?>
وهكذا البناء يتطلبيسمح لك بتجميع نصوص PHP من عدة ملفات منفصلة ، والتي يمكن أن تكون إما لغة البرمجة-الصفحات و بي أتش بي-نصوص.
تصميم يتطلبيدعم الادراج الملفات المحذوفة(منذ PHP 4.3.0). على سبيل المثال:
php
// لا يعمل المثال التالي لأنه يحاول تضمين ملف محلي
تتطلب "file.php؟ foo = 1 & bar = 2" ؛
// يعمل المثال التالي
يتطلب؛
?>
! تصميم يتطلبيسمح لك بتضمين الملفات البعيدة إذا تم تمكينها في ملف تكوين PHP. معلومات مفصلة.
تضمين الملف البعيد
يتيح لك PHP العمل مع كائنات URL تمامًا مثل الملفات العادية. تُستخدم الحزم المتوفرة افتراضيًا للعمل مع الملفات البعيدة باستخدام بروتوكول ftp أو 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.
php
/ * هذا يفترض أن 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" ؛ // عمل
?>
ماذا تريد أن تستخدم في ملفات PHP من عبارة Include أو Require?
من الملائم جدًا تقسيم برنامج كبير أو صفحة ويب واحدة إلى عدة ملفات. ويحدث أنك تحتاج فقط إلى توصيل ملفك بالبرنامج النصي لمطور آخر.
دعني أخبرك بحادث واحد من حياتي. عندما بدأت في تعلم HTML ، أنشأت موقع الويب الأول الخاص بي. ثم لم أكن أعرف أن هناك لغة برمجة PHP. الموقع يتكون من 100 صفحة. عندما أضفت مقالًا ، كان علي تحديد اسم ومسار الصفحة الجديدة في كل صفحة على حدة في القائمة. كان الأمر فظيعًا ، لأنه ، كما تفهم ، استغرق هذا الدرس الكثير من الوقت حتى علمت ببيان التضمين مع القدرة على تضمين ملفات الجهات الخارجية في صفحتي. بمجرد إجراء تغيير في ملف جهة خارجية ، على سبيل المثال ، في القائمة ، تم استبدال جميع الصفحات المائة. مريح وسريع وعصري.
دعنا نذهب على مثال بسيطدعنا نحاول توصيل ملف جهة خارجية بصفحة الويب الخاصة بنا.
قم بإنشاء ملف يسمى "index.php" بالرمز التالي:
يمكن أن يكون مثل هذا:
الآن قم بإنشاء ملف "cop.php" بالرمز التالي:
نتيجة:
لذلك ماذا فعلنا؟
في ملف "index.php" أجرينا اتصالاً بملف طرف ثالث "cop.php".
إذا قمت بتغيير النص في ملف "cop.php" ، فسترى بديلًا في الملف "index.php".
تضمين قالب البيان:
طلب نموذج بيان:
مثال آخر لتعزيز الموضوع.
لدينا صفحة الويب هذه:
جميع الحقوق محفوظة © 2012-2014..ru
دعنا الآن نقسم صفحة الويب هذه إلى كتلتين باستخدام عبارة التضمين أو الطلب ، كما في الرسم التخطيطي:
سيبدو مثل هذا:
احفظه تحت الأسماء "index.php" و "avtor.php" و "kontakty.php"
وهذا يعني أنك تحصل على ثلاث صفحات "index.php" و "avtor.php" و "kontakty.php".
الآن قم بإنشاء ملف menu.php للقائمة:
الرئيسية اتصالات المؤلف
جميع الحقوق محفوظة © 2012-2014..ru
نتيجة:
إذا غيرت شيئًا ما في ملف "cop.php" أو "menu.php" ، فسيتم الاستبدال تلقائيًا في ثلاثة ملفات "index.php" و "avtor.php" و "kontakty.php". جربها بنفسك.
هذا كل شئ! اشترك في تحديثات المدونة حتى لا تفوتك تحديثات جديدة دروس PHP . حظا طيبا وفقك الله!