Boplo.ir
rss


جستجو

آخرین مطالب

 

 

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

 

 

بر و بچ

MyView Tween


دوستشون دارم


بیلبورد

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

تماس


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

 

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

A new begining
AHHP presents

 

Cannot modify header و زهرمار
25 تير 1388 ساعت 11:29

پی اچ پی
بررسی پس و پیشی ارسال 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 ها قبلا ارسال شده و دیگه امکان ارسالش وجود نداره مواجه بشیم.

ممنون
موفق باشی
(1 سال و 1 ماه و 21 روز و 11 ساعت و 9 دقیقه پیش)

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

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

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

حالا امروز چند شنبه ست؟ عجبا...!
(1 سال و 1 ماه و 15 روز و 9 ساعت و 20 دقیقه پیش)

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

علی : سلام
اینکه برای رسیدن به کاری راه های مختلفی وجود داره و اگر حداقل یکی کار کرد به روش دیگری گیر ندیم برای جلو رفتن سریع کارها رو قبول دارم
بعضی ها می خواهند کالبد شکافی کنند من هم سریعا سراغ روش های دیگر می روم تا به نتیجه برسم
مهم نتیجه است
اما بعضی اوقات هم میشه قبل header یک کارکتر @ هم گذاشت که خطا ندهد
(1 سال و 23 روز و 20 ساعت و 38 دقیقه پیش)

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

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

یا

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

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

یک دوست : آقا تو خیلی مـــــــاهی.
دستت درد نکنه.
(10 روز و 21 ساعت و 52 دقیقه پیش)
نام:
ایمیل: (منتشر نخواهد شد!)
وب سایت:

کد امنیتی: اگر در خواندن این کد مشکلی دارید، اینجا کلیک کنید تا صفحه بازخوانی شود.

 

me امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
آدم خیلی سردی هستم، اینو دور و وری هام میگن. ولی به نظر خودم سرد نیستم در واقع گرمای خودم رو کم بروز می دم! آدما رو اغلب دوست دارم غیر از اون مواقعی که اونا من رو نادیده میگیرن!

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

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

MODx | Template World