[align=center]مربوط به تاپیک
[color=#DAA520]خطایابی کدهای php - مشکلات رایج برنامه نویسان[/color]
(در Tab جدید باز میشود)[/align]


سلام
مدیر بخش برنامه نویسی( Daniel ) تاپیک بسیار مفیدی رو ایجاد کردن و من هم تصمیم گرفتم در کامل کردن تاپیک کمک کنم.
در این پست میخوایم درمورد یکی از خطاهایی که بسیار زیاد اتفاق افتاده و شاید یکی از رایجترین سوالاتی هست که تو سایتها کاربران میپرسن
"خطای Warning: Cannot modify header information - headers already sent"

این خطا زمانی رخ میده که شما بخواید بعد از ارسال شدن Header های HTTP دوباره اون رو با توابعی که برای ارسال Header ها استفاده میشن، ارسال کنید.
پس راه حل اینه که از این توابع باید قبل از اینکه هیچ هیدری(Header) ارسال بشه استفاده کنید.

توابعی که برای کار با Header ها وجود دارن:
   header / header_remove
   session_start / session_regenerate_id
   setcookie / setrawcookie

مثال:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>

همونطور که در مثال بالا میبینید تابع ()session_start بعد از کدهای HTML قرار گرفته و هیدرها در این زمان ارسال شدن پس دوباره نمیتونن ارسال بشن و این میشه که خطای Warning: Cannot modify header information - headers already sent در خروجی نمایش داده میشه.
برای رفع خطا باید تابع ()session_start رو قبل از HTML و در بالای همه کدها قرار بدید.

استفاده از توابع بافرینگ PHP
با استفاده از توابعی که برای بافر کردن خروجی ها وجود داره میشه تا حد زیادی این نوع خطاها رو رفع کرد.
دو تابعی که ما در اینجا نیاز داریم ()ob_start و ()ob_end_flush هستن.

مثال استفاده از این توابع:

<?php ob_start(); ?>
<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
<?php ob_end_flush(); ?>

استفاده از این توابع باعث میشه تا خروجی ها بعد از اینکه همه کارها تموم شد ارسال بشن و دیگه خطایی بوجود نیاد.

موفق باشید.

آخرین ویرایش: 03-01-2018 ???? 17:59، توسط رضا رمضانپور