PDA

View Full Version : جایگزین header('location:index.php ')



masiha68
دوشنبه 04 فروردین 1393, 21:54 عصر
سلام دوستان
من بهی ه مشکلی برخوردم .. وقت استفاده از header('location:index.php'); پیغام خطای
"Cannot modify header information - headers already sent رو میده
در مورد درست کردن این پیغام خیلی گشتم و راه هایی رو که می گفتن به درد من نمی خورد واسه همین دنبال یه جایگزین هستم . که وقتی مثلا یه سشن وجود نداشت کاربر رو به یه صفحه ی خاص هدایت کنه

Unique
دوشنبه 04 فروردین 1393, 23:36 عصر
برای این مشکل فقط یک دلیل وجود داره و اون هم ارسال هر چیزی حتی یک کاراکتر قبل از استفاده از تابع header هستش. فایل ها را از نظر BOM چک کنید و مطمئن بشین فایل ها در ابتدا یا انتها space یا newline نداشته باشند.

شما میتونین از Output Buffering یا همون ob_start و ... استفاده کنین.
میتونین با javascript و location.href کاربر را منتقل کنین یا از meta استفاده کنین.

ولی بهترین روش پیدا کردن مشکل ارسال heaer هست. نمیدونم چقدر توی php مهارت دارین ولی معمولا پس از کسب مهارت لازم در نوشت و include کردن فایل ها نباید این مشکل را داشته باشین.

us1234
دوشنبه 04 فروردین 1393, 23:38 عصر
باید این کد جاوا اسکرپیت را استفاده کنید :




echo '<script>document.location="URL"</script>';

masiha68
دوشنبه 04 فروردین 1393, 23:55 عصر
باید این کد جاوا اسکرپیت را استفاده کنید :




echo '<script>document.location="URL"</script>';


مشکل کدهای جاوا اسکریپ اینه که میشه اونا رو غیر فعال کرد . و اون قسمت مورد نظر هم امنیتش باید بالا باشه ... واسه همین نمیشه از جاوا اسکریپت کمک گرفت

MMSHFE
سه شنبه 05 فروردین 1393, 01:03 صبح
من همیشه تابعی به این شکل توی فایل functions.php توی پروژه هام تعریف و استفاده میکنم:

function Redirect($url) {
header('Location: ' . $url);
exit('<meta http-equiv="Refresh" content="0; url=' . $url . '"/>');
}
// usage
Redirect('index.php');
اینطوری اگه Header نتونه کار کنه، دستور meta عمل Redirect رو انجام میده و ازطرف مثل JS قابل غیرفعال کردن نیست. دستور exit هم باعث میشه بقیه اسکریپت اجرا نشه.