ریدایرکت با php مکانیزمی برای هدایت کاربر از یک صفحه به صفحه دیگر بدون کلیک کردن بر روی یک لینک است . این قابلیت ریدایرکت با php در مواردی که نیاز به هدایت کاربر در پشت صحنه باشد ، بسیار مفید خواهد بود . برای مثال ، زمانی که کاربر در حال انتقال به صفحه پرداخت می باشد ، ریدایرکت باید به صورت خودکار توسط اسکریپت php انجام شود .
Php تابع پیشفرضی برای هدایت کاربر از طریق url، به اسم header() معرفی کرده است . با استفاده از تابع header در php ، ما نیاز داریم که location را برای هدایت کاربر در قالب url یا به صورت relative (نسبی) تعیین کنیم.
برخلاف ریدایرکت با جاواسکریپت که راه های مختلفی برای مدیریت url بر اساس مرورگر خاص ارایه داده است ، php از این پیچیدگی اجتناب کرده و فقط یک تابع header برای اعمال تاثیر یکسان بر روی تمامی مرورگرها ارایه داده است . پس حتما متوجه شدید که ریدایرکت با php بسیار آسان تر و منطقی تر از استفاده در جاواسکریپت می باشد .!
سینتکس ریدایرکت با php
1 |
header("Location: target-url"); |
در کد سینتکس ریدایرکت با php بالا ، ما باید یک url صحیح برای صفحه ای که قصد هدایت کاربر به آنجا را داریم تعیین کنیم . می توانیم url ها را به صورت کامل (absolute) یا نسبی (relative) مشخص کنیم . اگر آدرس url به صورت نسبی تعیین کنیم ، در اینصورت در به دنبال آدرس در جایی که هستیم می گردد .
نکته : قبل از مشخص کردن آدرس url در loction header ، باید از وجود صفحه مورد نظر اطمینان پیدا کنیم.
احتیاط قبل از redirect
قبل از اجرای عملیات ریدایرکت با php ، باید در این مورد اطمینان داشته باشیم که ، هیچ خروجی در مرورگر قبل از خطی که قصد صدا زدن تابع header وجود نداشته باشد. برای مثال ،
1 2 |
echo "PHP Redirect"; header("Location: netparadis.com"); |
این اسکریپت یک خطای warning notice را به مرورگر ارسال می کند.
1 |
Warning: Cannot modify header information - headers already sent by (... |
این “احتیاط” فقط در مورد تابع header در php نیست ، بلکه برای همه توابعی مثل set_cookie() ، session_start() و … صدق می کند . در واقع هر تابع مثل بالا که یک سری اطلاعات و تغییرات در هدر ارسالی از طرف ما به سرور اضافه می کند ، از قبل باید هیچ خروجی حتی یک کاراکتر کوچک . نداشته باشد ، چون باعث خطاهایی مثل
1 |
Header already sent - . |
که یکی از خطاهای معروف php است در صفحه ظاهر می شود . این خطا جز warning هایی است که باعث break شدن کد های شما نمی شود . برای آشنایی با انواع حطاها در php این مقاله را حتما و حتما مطالعه کنید . به شما در شناسایی ، رفع باگ ها و خطاها بسیار کمک خواهد کرد .
مواردی که باعث خطای header می شوند
- محتویات html مثل متن یا تگ ها
- جاهای خالی غیرضروری قبل از تگ php
- خطاها یا warning های قبل از اجرا شدن redirect
- دستورات چاپ متنی مثل echo() ، print()
راه های مدیریت خطای output قبل از ریدایرکت با php
برای امنیت بیشتر بعد از اجرای دستور header ، exit را قرار بدیم
1 2 |
header("Location: netparadis.com"); exit; |
می توانید خاصیت output buffering را از طریق فایل پیکربندی php (php.ini) یا از طریق تابع ob_start() در اول کد هاتون قرار بدید.
1 2 3 |
ob_start(); // Output Buffering on header("Location: netparadis.com"); exit; |
استفاده از ریدایرکت و هدایت کاربر به یک صفحه دیگر از موارد خیلی مهم و جدانشدنی در php و پروژه های تحت وب است .
موفق باشید
سلام حسن جان یه سوال دارم خیلی برام مهمه میخوام برگردم به چند صفحه قبل و رفرش هم صورت بگیره
با دستوره history.go می رم به صفحه مورد نظر اما چطوری اونو رفرش هم بکنم
تو یه سایت ایرانی نوشته بود از
window.location.reload(history.go) استفاده کنم ولی جواب نداد و رفرش نشد حالا شما راهنمایی کنید چیکار کنم ؟
سپاس از راهنمایی تون
سلام.
همزمان نمیشه با history back با رفرش استفاده کرد. از این استفاده کنید
window.location.replace(document.referrer);
سلام استاد.
میشه یک دوره ساخت وبلاگ با php بزارین
سلام مهندس شفیعی نازنین خسته نباشید من برای صفحه ویرایش آگهی توسط کاربر میخوام وقتی که اطلاعات رو تغییر داد پیغام تغییر موفقیت آمیز رو با جاوا اسکریپت نشون بدم با دستور echo ولی وقتی که پیغام نشون داده میشه اوکی رو که میزنم میره به صفحه سفید و باید دکمه برگشت رو بزنم تا دوباره به صفحه ویرایش بیاد از دستور header هم که بعدش استفاده میکنم پیغام اجرا نمیشه میخوام بعد از اوکی کردن پیغام جاوا اسکریپت دوباره تو صفحه ویرایش باشم و تغییرات اعمال شده باشه راهنمایی لطفا
سلام ممنون.
از سمت ajax در php فقط true یا false بودن رو برگشت بدید و بر اون اساس پیام رو با جاواسکریپت بسازید نه با echo
میتونم از ریدایرکت تو بات نویسی استفاده کنم؟ به عنوان مثال اگر پیام دریافتی شامل عکس بود ریدایرکت کنم به یه فایل php دیگه و عملیات مورد نظرم رو رو عکس انجام بدم
header(‘location : image.php?img=simple’); exit
سلام . نه متاسفانه امکان همچنین موردی نیست .
راه خیلی بهتری به جای ریدایرکت وجود داره . کافیه مسیر فایل رو همراه با پارامتری دلخواهی به url مورد نظر اضافه کنید و بعد اون url رو با تابعfile_get_contents اجرا کنید تا خروجی شما انجام بشه.
مثلا
کاری که در ربات افکت عکسی که چندماه پیش طراحی کردیم انجام شده و به خوبی هم کار میکنه
موفق باشید