انتقل إلى محتوى الدرس

Fixing Headers Already Sent with ob_start فحص headers_sent وحل مشكلة المخرجات بـ ob_start

أرسل تحويلات المتصفح بـ Location ورموز الحالة وتنزيل الملفات، وامنع خطأ headers already sent عبر التخزين المؤقت ob_start في PHP 8.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يظهر التحذير الشهير Cannot modify header information - headers already sent عندما يرسل PHP أي مخرجات نصية قبل استدعاء header() أو setcookie() أو session_start().

  • استدعِ headers_sent($file, $line) لمعرفة اسم الملف ورقم السطر الدقيق الذي تسبب في بدء إرسال المخرجات مبكراً.
  • احذف أي مسافات أو ترميز BOM قبل وسم البداية <?php، ولا تكتب وسم الإغلاق ?> في نهاية ملفات PHP الصرفة.
  • يتيح استدعاء ob_start() في بداية السكريبت حجز المخرجات مؤقتاً في الذاكرة بحيث يظل إرسال الرؤوس متاحاً حتى تفريغ المخزن بـ ob_end_flush().

تحجز ob_start() مخرجات echo في الذاكرة المؤقتة، مما يسمح بتنفيذ header() بأمان قبل سحب المحتوى ومسح المخزن عبر ob_get_clean().

PHP
<?php
ob_start();
echo "<h1>Buffered Heading</h1>\n";

// Because ob_start() holds output in memory, header() still succeeds:
header("X-Buffered-Render: true");

$html = ob_get_clean();
echo "Captured " . strlen($html) . " bytes safely.\n";