أجهزة الكمبيوتر شبابيك إنترنت

الفرق بين التضمين يتطلب 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

المهام 7

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

تعيد جملة 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). على سبيل المثال:

// لا يعمل المثال التالي لأنه يحاول تضمين ملف محلي
تتطلب "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.


/ * هذا يفترض أن 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 . حظا طيبا وفقك الله!

أحب هذا المنصب؟ ساعد الآخرين في التعرف على هذه المقالة ، انقر فوق زر الوسائط الاجتماعية ↓↓↓

الحصول على تحديثات بلوق !!! يشترك:

<نوع الإدخال ="hidden" value="مشرفي المواقع 2019" name="uri">

أحدث أخبار الفئة:

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

معنى الاتصال في php باللغة الروسية البسيطة:

ملف 1.php
القائمة العلوية

الملف 2.php
القائمة السفلية

ملف example.php
ربط ملف 1.php
محتوى الصفحة
ربط الملف 2.php

نتيجة معالجة ملف example.php ، سيتم عرضه
القائمة العلوية
محتوى الصفحة
القائمة السفلية
وفقًا لذلك ، لتغيير أي شيء في القائمة السفلية ، تحتاج إلى إجراء تغييرات فقط في ملف 2.php

مسار الملف

الملف متصل حسب المسار المحدد للملف. هناك خياران للمسار: نسبي ومطلق. نسبي - يشير هذا إلى مسار الملف المراد توصيله بالنسبة للملف مع تعليمات الاتصال. مطلق - تحديد المسار الكامل للملف المضمن.

كود PHP

// مثال المسار النسبي
تشمل "include / your_file.php" ؛ // الملف موجود في مجلد التضمين الموجود في نفس الدليل مثل الملف مع الاتصال

// مثال المسار المطلق
تضمين $ _SERVER ["DOCUMENT_ROOT"]. "/ include / your_file.php" ؛ // $ _SERVER ["DOCUMENT_ROOT"] - يحدد الدليل الجذر للموقع

تشمل و include_once

تضمن()- بناء مصمم لتضمين الملفات في كود البرنامج النصي PHP أثناء تنفيذ البرنامج النصي PHP. عندما تتم معالجة التعليمات البرمجية ، يتم استبدال التعليمات بمحتويات الملف المرفق. أقترح النظر على الفور في مثال.

ضع في اعتبارك عمل التضمين في مثال ملفين: index.phpو text.php. للتبسيط ، دعنا نفترض أنهم في نفس الدليل.

كود PHP(ملف index.php)

صدى "النص العادي الموجود في الملف الرئيسي" ؛
تشمل "text.php" ؛ // يتضمن محتويات ملف text.php

?>
كود PHP(ملف text.php)

صدى "النص الوارد في الملف المضمّن" ؛

?>
نتيجة لملف index.php ، سيتم عرض ما يلي:

نص عادي موجود في الملف الرئيسي
النص الوارد في الملف المضمن
هل هي حقا مريحة؟ الآن ، بتغيير المحتوى في ملف text.php ، ستكون نتيجة index.php مختلفة تمامًا!

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

كود PHP

include_once "text.php" ؛ // سيتم تضمين ملف text.php مرة واحدة فقط

// إعادة الاتصال أدناه سيتم تجاهله وعرضه
// ولن تظهر رسالة خطأ
include_once "text.php" ؛ // لن يحدث شيء

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

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

إذا كان التضمين أو الطلب لا يعمل

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

1. تحقق مما إذا كان الخادم و php يعملان ، وما إذا كان أي كود php على الموقع يعمل على الإطلاق
2. تحقق من وجود ملف التضمين
3. تحقق مما إذا كان اسم الملف والملحق قد تم إدخالهما بشكل صحيح في الاتصال
4. تأكد من أن ملف php المضمن موجود بالفعل في العنوان الذي حددته
5. حاول تحديد ليس مسارًا نسبيًا ، ولكن مسارًا مطلقًا (المسار الكامل للملف).

مثال كود PHP

قم بتضمين "http://www.example.com/include/your_file.php" ؛

// DOCUMENT_ROOT - يعيّن الدليل الجذر للمورد
تضمين $ _SERVER ["DOCUMENT_ROOT"]. "/ include / your_file.php" ؛

6. إذا لم تقم بتوصيل الملف ولم يتم عرض أي خطأ ، فقم بإنشاء ملف في الدليل بالملف الذي تتصل به htaccessبالمحتوى التالي

تشغيل php_flag display_errors
أو في ملف php، قبل الاتصال ، أدخل السطر التالي

error_reporting (E_ALL) ،
كلا الإعدادين سيفرضان أخطاء العرض

شكرا لاهتمامكم!