🔹 1. ما هو header()
في PHP؟
header()
هي دالة تُستخدم لإرسال رؤوس (Headers) HTTP إلى المتصفح قبل إرسال أي مخرجات (output) مثل HTML أو echo.
🔸 مثال:
header("Content-Type: text/plain");
PHP🔸 🧠 الفائدة:
تُستخدم لتحديد نوع المحتوى، التوجيه، التحكم في التخزين المؤقت، إرسال حالة HTTP، وغير ذلك.
🔹 2. استخدام header()
لتحديد نوع المحتوى (Content-Type)
يمكنك إبلاغ المتصفح بنوع البيانات:
النوع | الهيدر المناسب |
---|---|
HTML | Content-Type: text/html |
JSON | Content-Type: application/json |
نص عادي | Content-Type: text/plain |
صورة PNG | Content-Type: image/png |
🔸 مثال:
header("Content-Type: application/json");
echo json_encode(["status" => "success"]);
PHP🔸 ✅ الفائدة:
عرض المحتوى بطريقة صحيحة أو التعامل معه من خلال JavaScript مثل AJAX.
🔹 3. استخدام header()
لإعادة التوجيه (Redirect)
header("Location: https://example.com");
exit;
PHP🔸 متى نستخدمه؟
- بعد تسجيل الدخول
- بعد إرسال نموذج
- عند الحاجة لمنع وصول المستخدم لصفحة معينة
🔸 الفائدة:
توجيه المستخدم إلى صفحة مناسبة دون استخدام JavaScript.
🔹 4. استخدامات إضافية لـ header()
🧊 التحكم في التخزين المؤقت (Cache Control):
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 01 Jan 1990 00:00:00 GMT");
PHP🔐 الحماية من XSS أو التنزيلات:
header("Content-Disposition: attachment; filename=file.txt");
PHP🔹 5. محاذير عند استخدام header()
⛔ أهم تحذير:
لا تستخدم
header()
بعد أي إخراج (echo, print, HTML)
❌ خاطئ:
echo "Welcome";
header("Location: home.php"); // سيظهر خطأ: headers already sent
PHP✅ صحيح:
header("Location: home.php");
exit;
PHP✔️ استخدم ob_start()
لتجنب المشكلة:
ob_start();
echo "Some output";
header("Location: page.php");
ob_end_flush();
PHP🔹 6. لماذا نستخدم exit
بعد header()
؟
✅ السبب:
لضمان توقف تنفيذ السكريبت بعد التوجيه.
🔸 مثال:
header("Location: dashboard.php");
exit; // يوقف الكود التالي
PHPبدونه قد يتم تنفيذ كود غير مرغوب فيه بعد التوجيه.
🔹 7. الفرق بين Location
و Refresh
النوع | الوظيفة |
---|---|
Location | توجيه فوري إلى صفحة جديدة |
Refresh | إعادة تحميل أو توجيه بعد مدة زمنية |
🔸 Location:
header("Location: welcome.php");
PHP🔸 Refresh:
header("Refresh: 5; url=thankyou.php");
PHP↪️ بعد 5 ثوانٍ ينتقل للصفحة الجديدة.
🔹 8. توجيه المستخدم بعد شرط معين:
✅ مثال:
session_start();
if (!isset($_SESSION['user'])) {
header("Location: login.php");
exit;
}
PHP🔸 الفائدة: حماية الصفحات من الوصول المباشر بدون تسجيل دخول.
🔹 9. إرسال حالة HTTP مخصصة (404 / 403 / 500)
header("HTTP/1.1 404 Not Found");
PHPالكود | الاستخدام |
---|---|
404 | الصفحة غير موجودة |
403 | ممنوع الوصول |
500 | خطأ داخلي في السيرفر |
🔸 نصيحة:
استخدمها عند الحاجة لإبلاغ المتصفح أو محركات البحث بحالة الصفحة.
🔹 10. أمثلة عملية متنوعة
📌 مثال 1: توجيه بعد نجاح التسجيل
if ($registerSuccess) {
header("Location: welcome.php");
exit;
}
PHP📌 مثال 2: إرسال ملف للتحميل
header("Content-Disposition: attachment; filename=report.pdf");
header("Content-Type: application/pdf");
readfile("report.pdf");
PHP📌 مثال 3: محتوى JSON API
header("Content-Type: application/json");
echo json_encode(["status" => "ok"]);
PHP✅ ملخص الفوائد:
- التحكم بنوع المحتوى المرسل
- توجيه المستخدمين بمرونة
- تحسين الأمان عبر التحكم في headers
- دعم REST APIs
- التعامل مع ملفات وتنزيلات احترافية
⚠️ محاذير:
- لا تستخدم
header()
بعد أي إخراج (حتى مسافة أو سطر فارغ). - لا تنسَ
exit
بعدheader("Location: ...")
. - استخدم
ob_start()
في المشاريع الكبيرة لتفادي أخطاء “headers already sent”.