Header And Redirect

🔹 1. ما هو header() في PHP؟

header() هي دالة تُستخدم لإرسال رؤوس (Headers) HTTP إلى المتصفح قبل إرسال أي مخرجات (output) مثل HTML أو echo.

🔸 مثال:

header("Content-Type: text/plain");
PHP

🔸 🧠 الفائدة:
تُستخدم لتحديد نوع المحتوى، التوجيه، التحكم في التخزين المؤقت، إرسال حالة HTTP، وغير ذلك.

🔹 2. استخدام header() لتحديد نوع المحتوى (Content-Type)

يمكنك إبلاغ المتصفح بنوع البيانات:

النوعالهيدر المناسب
HTMLContent-Type: text/html
JSONContent-Type: application/json
نص عاديContent-Type: text/plain
صورة PNGContent-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”.