🔹 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 sentPHP✅ صحيح:
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”.