Boplo.ir
rss

من در Facebook


جستجو


آخرین مطالب

مطالب همینجوری

بر و بچ

MyView TakhteShasi Tween

دوستشون دارم

بیلبورد

دامین برای فروش: CleanCode.ir
FastFeed.ir
Fonvi.com

تماس


انواع و اقسام سفارشات طراحی و برنامه نویسی سایت پذیرفته میشه. از سایت حمایت از خرگوشهای صورتی گرفته تا سایت قاچاق اعضای بدن!
تماس

 

از بيماران سرطاني حمايت كنيم

A new begining
AHHP presents

 

آدرس کوتاه: http://Boplo.ir/:61

Cannot modify header و زهرمار
۲۵ تير ۱۳۸۸ ساعت ۱۱:۲۹

پی اچ پی
بررسی پس و پیشی ارسال Header

PHP یه بخشی داره به نام HTTP Header که این بخش به بیماری سرطان مبتلاست و متاسفانه درد این سرطانش دامن کاربرها رو میگیره.
جریان از این قراره که هر سند PHP با یک سری Header شروع میشه که شامل اطلاعات اساسی اون سند یا پرونده است از جمله فرمت یا نوع مثل text/html یا image/jpeg یا ....
وقتی کاربر headerی رو تعیین می کنه یا اطلاعاتی رو چاپ می کنه، اطلاعات Header به بافر ارسال میشه و تا به کلاینت یا بازدیدکننده فرستاده شه.
مشکل زمانی بوجود میاد که ما بخوایم بعد از ارسال خروجی به بافر، header جدید تعیین کنیم که در اون صورت با error معروف زیر مواجه میشیم:

Warning: Cannot modify header information - headers already sent by
(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>';

این دو تا رفتارشون مثل همدیگه است.

موفق باشید

 

تو چی فکر می کنی؟


پیام : مطلب مفیدی بود استفاده کردم
اما این خطا فقط با استفاده از تابع header ایجاد نمیشه .
هنگام استفاده از session هم ممکنه که به این مشکل بر بخوریم و با این خطا که header ها قبلا ارسال شده و دیگه امکان ارسالش وجود نداره مواجه بشیم.

ممنون
موفق باشی
(2 سال و 6 ماه و 22 روز و 5 ساعت و 4 دقیقه پیش)

امیرحسین : این خطا دقیقا موقع ایجاد header بعد از ارسال اون پیش میاد. تابع session_start هم header تعیین می کنه.
(2 سال و 6 ماه و 22 روز و 1 ساعت و 17 دقیقه پیش)

مسلم : به به، میبینم که باز برگشتی، خیلی دیر به دیر آپ میکنی ها :(

اون زر ما رو کلی خندیدم، ای ول، البته راه دومت رو استفاده میکردم اما با اولی آشنا نبودم.

حالا امروز چند شنبه ست؟ عجبا...!
(2 سال و 6 ماه و 16 روز و 3 ساعت و 15 دقیقه پیش)

سهند : می خواستم بگم این دستورات خوبند ولی موقع استفاده کردن انها با مشکل روبرو می شه مثلا برای یک فرم لاگین که می خواهیم چک کنیم که این اطلاعات در دیتابیس وجود دارد یا نه باعث می شه که صفحه 2بار refresh بشه یکی برای چک کردن اطلاعات و یکی هم برای خود صفحه ولی خطا نمی ده
(2 سال و 6 ماه و 3 روز و 17 ساعت و 48 دقیقه پیش)

علی : سلام
اینکه برای رسیدن به کاری راه های مختلفی وجود داره و اگر حداقل یکی کار کرد به روش دیگری گیر ندیم برای جلو رفتن سریع کارها رو قبول دارم
بعضی ها می خواهند کالبد شکافی کنند من هم سریعا سراغ روش های دیگر می روم تا به نتیجه برسم
مهم نتیجه است
اما بعضی اوقات هم میشه قبل header یک کارکتر @ هم گذاشت که خطا ندهد
(2 سال و 5 ماه و 24 روز و 14 ساعت و 33 دقیقه پیش)

saeid : سلام دوست عزیز
وب سایت بسیار بسیا عالی و آموزنده ای دارین.
من کلی چیز یاد گرفتم .
در مورد این پست باید بگم کار بسیار جالبی هست ولی من فکر میکنم یه مشکل و جود داره اونم این هست که اگه جاوا اسکریپت روی مرور گر کاربر غیر فعال باشه کلا ماجرا دچار مشکل می شه.
ولی تگ متای اول رو نمی دونم تستش می کنم که اگه بشه چی می شه از شر این خطای مزخرف نجات پیدا می کنیم .
منتظر مطالب جدید و آمزنده شما هستم .
موفق و سر افراز باشید.
دوستدار شما سعید
(2 سال و 5 ماه و 5 روز و 1 ساعت و 23 دقیقه پیش)

زییز : header("Location: someOther.php");

یا

echo '<meta http-equiv="Refresh" content="0; URL=someOther.php" />';
echo '';
(2 سال و 5 ماه و 2 روز و 14 ساعت و 33 دقیقه پیش)

taary : با سلام
چرا برای این کار از همون تابع ob استفاده نمی کنید، اون که خیلی ساده تره!
اول اونو start می کنی بعد هر جا که لازم بود میتونی قبل دستور header صداش کنی
ob_start();
ob_end_clean();
header("location:"someOther.php)
//end
(1 سال و 11 ماه و 26 روز و 23 ساعت و 39 دقیقه پیش)

یک دوست : آقا تو خیلی مـــــــاهی.
دستت درد نکنه.
(1 سال و 5 ماه و 11 روز و 15 ساعت و 47 دقیقه پیش)

مرتضي : سلام
خيلي خيلي عالي بود
به نظر من روش اول بسيار بهتر از استفاده از اسكريپت جاوا مي باشد
(1 سال و 4 ماه و 13 روز و 4 ساعت و 41 دقیقه پیش)

هلیکوپتر : چرا این خطا رو موقع ست کردن کوکی میده
من میخام کاربرام رنگبندی سایت رو ذخیره کنن ولی نمیشه!چرا؟
(1 سال و 1 ماه و 7 روز و 22 ساعت و 56 دقیقه پیش)

هلیکوپتر : چرا این خطا رو موقع ست کردن کوکی میده
من میخام کاربرام رنگبندی سایت رو ذخیره کنن ولی نمیشه!چرا؟
(1 سال و 1 ماه و 7 روز و 22 ساعت و 55 دقیقه پیش)

احد : به نظر من بهتره بجای این مسکّنها درست کد بنویسیم ، اول فایلهای php و کارهایی که باید بکنه رو بنویسید بعد اچ تی ام ال هاتون رو بیارید تا قبلش ارسال هدر نداشته باشید ، اینطوری هیچ وقت مشکل نخواهید داشت . چه تو session چه تو کوکی
(7 ماه و 22 روز و 20 ساعت و 9 دقیقه پیش)

علي : خدا خيرت بده، خيلي استفاده بردم.
(5 ماه و 2 روز و 23 ساعت و 36 دقیقه پیش)

ati : دست شما درد نکه،
(3 ماه و 15 روز و 3 ساعت و 29 دقیقه پیش)

 

me

امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. فارغ التحصیل مهندسی صنایع هستم. برنامه‌نویسی و طراحی وب می کنم. در واقع Web Developer محسوب میشم. برنامه نویسی و وقت گذرونی با وب تنها کاریه که خسته ام نمی کنه.
آدم خیلی سردی هستم، اینو دور و وری هام میگن. ولی به نظر خودم سرد نیستم در واقع گرمای خودم رو کم بروز می دم! آدما رو اغلب دوست دارم غیر از اون مواقعی که اونا من رو نادیده میگیرن!

این سایت رو بعد از کلی اینور اونور دوباره راه انداختم تا هرچی دوست دارم توش بنویسم، چه کسی بخونه چه نخونه.
خلاصه اینجا خونه منه،

به خونه امیرحسین خوش اومدی...

MODx | Template World