php الدّوال

php إقحام صفحات في أخرى

آخر تحيين: 08-01-2015

php الجداول php إنشاء الدوال


include & require

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

التعليمتان تؤدّيان نفس الوظيفة . الفارق الوحيد بينهما يكمن في طريقة تجاوبهما أثناء وجود خطأ فقدان الملف الذي نودّ إقحامه .

  • require : تشعرنا بوجود خطأ فادح "E_COMPILE_ERROR" . و تقوم بوقف تنفيذ السكريبت .
  • include : تقوم بتحذيرنا فقط "E_WARNING" . و يستمرّ تنفيذ السكريبت

في حالة وجود خطأ فقدان الملف . إذا أردتم إتمام تنفيذ السكريبت و عرض محتوى الصّفحة ، رغم ذلك ، يمكنكم استعمال include . لكن في حالة السكريبتات المعقّدة و أرضيات العمل ، لأسباب أمنية ، يكون من المجدي استعمال require ليتمّ توقيف تنفيذ السكريبت ، حتّى لا تُعرّضوا موقعكم للثّغرات .

الهيكل العام

require 'الرابط إلى إسم الملف';
include 'الرابط إلى إسم الملف';

مثال 1

تخيّلوا أنه لديكم قائمة للرّوابط تريدون عرضها على جميع صفحات موقعكم . سنقوم بكتابة القائمة في صفحة مُستقّلة و نُسمّيها مثلاً "links.php"

صفحة links.php

<nav>
  <ul>
    <li><a href="index.php">الإستقبال</a></li>
    <li><a href="#">المواضيع</a></li>
    <li><a href="#">الدّروس</a></li>
    <li><a href="#">من نحن</a></li>
    <li><a href="#">إتصل بنا</a></li>
  </ul>
</nav>

و في صفحاتنا نقوم بإقحام links.php في المكان الذي نُريده

صفحة index.php

<html>
<body>
<!-- ... -->

<?php include 'links.php'; ?>

<!-- ... -->
</body>
</html>

هذه الشيفرة ، تعني و تساوي تماما للشيفرة أسفله

<html>
<body>
<!-- ... -->

<nav>
  <ul>
    <li><a href="index.php">الإستقبال</a></li>
    <li><a href="#">المواضيع</a></li>
    <li><a href="#">الدّروس</a></li>
    <li><a href="#">من نحن</a></li>
    <li><a href="#">إتصل بنا</a></li>
  </ul>
</nav

<!-- ... -->
</body>
</html>

قامت التعليمة include بأخذ مُحتوى صفحة links.php و إقحامه في صفحة index.php .

القيمة التي أعطيناها للتعليمة include عبارة عن رابط إلى الملف الذي نود إقحامه . في مثالنا إعتبرنا أنه موجود في نفس الملف و المكان مع الصفحة . و لو كان في ملف آخر ، مثلاُ "dossier" . يجب إضافة هذا الأخير إلى الرابط :
<?php include './dossier/links.php'; ?>

إقحام الصفحات طريقة جد عملية ، و تُوفّر لنا ربح الكثير من الوقت ، يمكننا مثلا عزل رأس الصفحة و قدم الصّفحة في ملفين مختلفين ، ثم نقوم بإقحامهما في جميع الصفحات . إذا أردنا لاحقا تعديل رأس الصفحة مثلا ، سنقوم بذلك في ملف header.php فقط

مثال 2

تخيّلوا أنه لديكم شيفرات في صفحة "functions.php" و تريدون استعمالها في صفحة أخرى

<?php 
function additions($x, $y) {
 $z = $x + $y;
 return $z;
}
?>

سنقوم بإقحامها في صفحة index.php ثم نُجري العمليات التي نريدها :

<html>
<body>
<?php 
include 'functions.php';// إقحام الصفحة

$z = additions(4, 6); //functions.php  استعمال محتوى صفحة
echo $z; // 10
?>

</body>
</html>

include_once & require_once

نستعمل التعليمتين include_once و require_once عندما نحتاج إلى إقحام مُحتوى ملف ، أكثر من مرّة . مثال :

<html>
<body>
<?php 
include_once 'functions.php'; // الإقحام الأول
include_once 'functions.php'; // الإقحام الثاني

$z = additions(4, 6);
echo $z; // 10
?>

</body>
</html>

في هذه الحالة سيتم تنفيذ السكريبت بشكل عادي . و سيتمّ تجاهل الإقحام الثاني للصّفحة .
لو استعملنا include أو require لإقحام الصّفحة أكثر من مرّة . في هذه الحالة سيتم توقيف تنفيذ السكريبت . و سنحصل على إشعار يخبرنا أننا إرتكبنا خطأ فادحا "Fatal Error" . مثال :

<html>
<body>
<?php 
include 'functions.php'; // الإقحام الأول
include 'functions.php'; // الإقحام الثاني

$z = additions(4, 6);
echo $z;
?>

</body>
</html>

في هذه الحالة سنحصل على خطأ فادح شبيه بهذا

...Fatal error: Cannot redeclare additions() (previously declared in C:\xampp\htdocs
خطأ فادح : لا يمكن تكرار إستدعاء الدّالة additions (لقد تم استدعاءها مُسبّقا في ...)
إذا كان سكريبت موقعكم مُنظّم بطريقة جيّدة ، لن تحتاجوا أبداً لاستعمال التعليمتين include_once و require_once . إذا كان الأمر غير ذلك . فالتعليمتان تقيكما شرّ السقوط في الخطأ السابق و الذي سيجبركم على إعادة تنظيم السكريبت من جديد .