تضمين وتطلب البيانات. تتطلب وrequire_once العبارات في PHP

بناء يتطلب الادراج

تصميم يتطلبيسمح لك بتضمين الملفات في برنامج 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";

$فو = 1 ;
شريط $ = 2؛
تضمين "file.txt" ؛ // يعمل
تضمين "file.php" ؛ // يعمل

?>



مشغلي PHP: require()، require_once()، include_once()

التاريخ: 2012-10-15

وظائف PHP: require()، require_once()، include()، include_once()

في الدرس الأخير ناقشنا العمل بالتفصيل. اسمحوا لي أن أذكركم أن المشغل يشمل()في PHP، يستبدل محتوى صفحة ويب واحدة بصفحة ويب أخرى. لكن لدى PHP وظائف أخرى تتيح لك تنفيذ مهمة مماثلة. على وجه الخصوص، هذه هي الوظائف:

include_once()
يتطلب()
مطلوب()

لإدراج محتوى صفحة ويب معينة، يكفي تحديد المسار إلى الملف المطلوب كوسيطة (بين قوسين) لهذه الوظائف. على سبيل المثال، مثل هذا:

تضمين("file.php") أو يتطلب("file.php")

مهمة كل هذه الوظائف هي نفسها: أدخل الكود أو النص المطلوب من ملف إلى ملف آخر. ولكن، مع ذلك، تختلف هذه الوظائف عن بعضها البعض. دعونا معرفة ذلك.

لاحقة " _مرة واحدة" يسمح لك بتوصيل رمز ملف لاستبداله بملف آخر مرة واحدة فقط، بغض النظر عن عدد المكالمات التي يتم إجراؤها. من أجل الوضوح، دعونا نلقي نظرة على مثال بسيط. في الدرس الأخير، اكتشفنا أنه باستخدام عامل التشغيل يشمل()يمكنك وضع رأس الموقع في ملف منفصل header.phpللتبسيط سنفترض أننا نضع الشعار الرسومي للموقع في هذا الملف. في المكان المناسب على صفحة الويب (في هذه الحالة، في مكان رأس الموقع) نكتب الكود القائمة 1.

القائمة 1.

وبناءً على ذلك، سيتم أيضًا عرض شعار الموقع مرتين، تقريبًا مثل هذا:

أوافق، لا يبدو لطيفا جدا، أليس كذلك؟ وتبين أن المشغل يشمل()يسحبه من المجلد مرتين كتلملف header.phpويستبدله مرتين بدلاً من رأس الموقع.

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

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

كيف يختلف include() عن require()

الآن دعونا نتحدث عن الوظيفة يشمل()مختلفة عن الوظيفة يتطلب(). ولا توجد اختلافات بينهم في عملهم. تقوم كلتا الوظيفتين بدمج محتويات ملف واحد في ملف آخر. ولكن لديهم فرقًا وهو يكمن في طريقة تفاعلهم مع الموقف عندما لا يكون الملف الذي نقوم بتوصيله في مكانه.

دعنا نعود إلى رمز المثال السابق القائمة 1. لدينا الكود التالي:

تضمين("كتل/header.php");

دعونا نحاول حذف الملف header.php، الذي نقوم بتوصيله بالفعل، على سبيل المثال، الملف تالف أو تم حذفه عن طريق الخطأ من الشمال.

نقوم بتحديث ملف الاختبار ونرى هذا الخطأ:

كما ترى تظهر رسالة تفيد بذلك في الدليل (المجلد) كتللم يتم العثور على الملف header.phpولكن لا يزال البرنامج قيد التنفيذ ويتم عرض باقي صفحة الويب الخاصة بالموقع بشكل طبيعي.

ماذا لو كتبنا الكود ( القائمة 3) باستخدام الدالة يتطلب():

القائمة 3.

يتطلب("كتل/header.php");

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

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

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

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

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

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

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

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

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

$ret = تضمين 'file.php';

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

إحدى الميزات الأكثر متعة وإفادة في 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"؛ // الملف موجود في مجلد التضمين الموجود في نفس الدليل الذي يوجد به ملف الاتصال

// مثال على المسار المطلق
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - يشير إلى الدليل الجذر للموقع

تضمين و include_once

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

دعونا نلقي نظرة على كيفية عمل التضمين باستخدام ملفين كمثال: فهرس.phpو text.php. لتبسيط العمل، لنفترض أنهما موجودان في نفس الدليل.

كود PHP(ملف فهرس.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"; // لن يحدث شيء

تتطلب وrequire_once

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

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

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

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

مثال كود PHP

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

// DOCUMENT_ROOT - يشير إلى الدليل الجذر للمورد
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

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

Php_flag Display_errors قيد التشغيل
أو في ملف PHPقبل الاتصال قم بلصق السطر التالي

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

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

13.22. تتطلب () عامل التشغيل

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

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

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

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

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

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

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

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

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

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

لذلك، لا يمكنك وضع عبارة require()‎ مع كافة التعليمات المرفقة بها في كتلة عبارة حلقة وتوقع تنفيذات مختلفة لهذه العبارة في كل تكرار أثناء تشغيل الحلقة. للاستفادة من هذا، نقترح عليك استخدام عامل التشغيل include().

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

إذا كانت عبارة require() تعمل على ملف يتم استدعاؤه عبر HTTP ويستخدم أغلفة fopen، وإذا كان عنوان المحطة يفسر الملف الناتج كرمز PHP، فيمكن تمرير المتغيرات إلى عبارة require() باستخدام 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");

تتطلب ("ملف.txt")؛

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

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



 

قد يكون من المفيد أن تقرأ: