شرح صفوف ومحتوى الفقرة
يظهر التحذير الشهير 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";