Cannot modify header و زهرمار
25 تير 1388 ساعت 11:29
پی اچ پی
بررسی پس و پیشی ارسال Header
PHP یه بخشی داره به نام HTTP Header که این بخش به بیماری سرطان مبتلاست و متاسفانه درد این سرطانش دامن کاربرها رو میگیره.
جریان از این قراره که هر سند PHP با یک سری Header شروع میشه که شامل اطلاعات اساسی اون سند یا پرونده است از جمله فرمت یا نوع مثل text/html یا image/jpeg یا ....
وقتی کاربر headerی رو تعیین می کنه یا اطلاعاتی رو چاپ می کنه، اطلاعات Header به بافر ارسال میشه و تا به کلاینت یا بازدیدکننده فرستاده شه.
مشکل زمانی بوجود میاد که ما بخوایم بعد از ارسال خروجی به بافر، header جدید تعیین کنیم که در اون صورت با error معروف زیر مواجه میشیم:
(output started at /.../sent.php:1) in /.../current.php on line 10
که میگه: داری تو خط 10 فایل current.php یه header ایجاد می کنی در حالیکه فایل sent.php قبلا ایجاد کرده و فرستاده جیگر!
برای حل این مشکل باید به همون فایل sent.php و جلوی هرگونه ارسال خروجی رو بگیریم. اما معمولا این خطا زمان استفاده از تابع ()header برای انتقال آدرس به این صورت پیش میاد:
header("Location: someOther.php");
یعنی ما میخوایم توی PHP، اسکریپت رو شوت کنیم به یه اسکریپت دیگه. در این مواقع بجای سر و کله زدن با توابع مربوط به بافر مثل ob_start یا گشتن دنبال محل ارسال هدر، میشه رو هدف متمرکز شد و راه حل پیدا کرد!
ما میخوایم با تابع header به یک آدرس دیگه بریم که تو اون آدرس هیچ خبری از متغیرها و اطلاعات فعلیمون نیست پس راحتتر اینه که از مرورگر کاربر رو به آدرس مورد نظر بفرستیم (هان؟)
میتونیم از جاوااسکریپت یا تگ <meta> استفاده کنیم. یعنی یکی از کد کدهای زیر رو استفاده کنیم:
echo '<meta http-equiv="Refresh" content="0; URL=someOther.php" />'; echo '<script type="text/javascript">window.location = "someOther.php";</script>';
این دو تا رفتارشون مثل همدیگه است.
موفق باشید

Google Chrome
امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
تو چی فکر می کنی؟