ریدایرکت با header در php و دلیل کار نکردن آن

ارسال شده توسط: حسین درویشی Comments: 2

ریدایرکت با header در php و دلیل کار نکردن آن

دستور ریدایرکت از یک صفحه به صفحه دیگر در زبان های گوناگون با یکدیگر متفاوت هستند. در ادامه با آموزش ریدایرکت با header همچنین با دلیل کار نکردن دستور header در php آشنا خواهید شد.

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

ساختار تابع header در php

این تابع در php می تواند دارای سه ورودی، دو ورودی، یا یک ورودی باشد.

header(header, replace, http_response_code);

پارامتر header

یکی از پارامترهای ضرروری است و بصورت رشته ای دریافت می شود.در این پارامتر باید دستور http خود را وارد کنید.

پارامتر replace

این پارامتر که مقدار پیش فرض آن True می باشد، مشخص می کند که آیا دستور http ارسالی باید جایگزین دستور http مشابه قبلی خود شود یا اینکه دستور دومی را به صفحه اضافه کند.

پارامتر http_response_code

استفاده از این پارامتر غیراجباری بوده و استفاده از آن نوع پاسخ http را مشخص می کند.

چند مثال با تابع هدر php

انتقال از یک صفحه به صفحه دیگر در php

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

حالت اول

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

header("location:index.php")

حالت دوم

اعلام دستور کش نکردن صفحه توسط مرورگر

چون اطلاعات صفحات html به طور پیش فرض کش می شوند، در دستور زیر به مرورگرها اعلام می کنیم که از انجام چنین کاری خودداری کند.

//تاریخ مراجعه قبلی
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

حالت سومی

اعلام نمایش پنجره دانلود موقع لود صفحه

با استفاده از یک دستور http می توانیم به مرورگر اعلام کنیم که موقع لود صفحه یک پنجره دانلود به کاربر نمایش داده و در صورت تایید کاربر فایل pdf را دانلود کند.

header("Content-type:application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");
// The PDF source is in original.pdf
readfile("original.pdf");

برگرداندن کد پاسخ http به مرورگر

وقتی بخواهید از یک صفحه به صفحه دیگر عمل ریدایرکت را تابع هدر در php انجام دهید، پس از انجام عملیات انتقال یک کد 302 به مرورگر باز می گرداند مگر اینکه کد پاسخ آن از قبل مشخص شود.

// 301 Moved Permanently
header("Location: /foo.php",TRUE,301);
// 302 Found
header("Location: /foo.php",TRUE,302);
header("Location: /foo.php");
// 303 See Other
header("Location: /foo.php",TRUE,303);
// 307 Temporary Redirect
header("Location: /foo.php",TRUE,307);

مشکل Header در php

یکی از مشکلات اساسی در عمل نکردن متد Header در php ، در این است که دستورات php بعد از تگ html نوشته شده باشند. یا اینکه متد ob_start بعد از کدهای html نوشته شده باشد.

لطفاً متد زیر را به عنوان اولین عبارت در کدها قرار دهید حتی تگ html و کدهای php.

ob_start();
برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 3.5]

Comments (2)

  • Babak پاسخ

    babak.kaffah@yahoo.com
    سلام. سپاسگزارم. شما با این متد ob_start(); خیلی بهم کمک کردین. وقتی توی سایت مثلا یه محصول می گذاشتم و می خواستم بعدا تصویر یا متن اونو ویرایش کنم اشکالات زیر بوجود می اومد.
    وقتی پست عکس داشت و اسم و توضیحات کوتاه داشت، با فرستادن به صفحه ویرایش ، و آپدیت عکس و نام و توضیحات به صفحه قبلی header می شد.
    اما اگه نام و توضیحات طولانی و عکس داشت، بعد از ویرایش به صفحه قبلی ریدایرکت نمی شد. یا باید در صورت طولانی بودن نام و توضیحات ، پست بدون عکس بود، یا هم در صورت داشتن عکس باید نام و توضیحات رو از ۱۷ کاراکتر بیشتر نمی کردم. آغا این مشکل منو چند روز از صبح تا شب و شب تا صبح اسیر خودش کرده بود تا اینکه شما تابع ob_start(); رو بهم معرفی کردین و باعث شد در دستور header بعد از ویرایش در اس کیو ال به صفحه قبلی ریدایرکت بشه. خیلی خیلی ممنونم ازتون.

    8 شهریور 1399 at 7:29 ق.ظ
    • حسین درویشی پاسخ

      خواهش می کنم دوست عزیز موفق باشید

      8 شهریور 1399 at 5:37 ب.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *