PDA

View Full Version : اسنفاده از تابع redirector



mehdi4467
چهارشنبه 04 بهمن 1391, 18:37 عصر
سلام
من از تایع redirector استفاده کردم که در لوکال جواب میده ولی در هاست عمل نمی کنه. اشکال از کجا می تونه باشه؟

redirector("../index.php");

MostafaEs3
چهارشنبه 04 بهمن 1391, 18:43 عصر
اگر میخوای صفحه ریدایرکت بشه از این استفاده کن ::


public function redirect($url, $status = 302) {
header('Status: ' . $status);
header('Location: ' . str_replace('&', '&', $url));
exit();
}

habibvafapour
چهارشنبه 04 بهمن 1391, 19:06 عصر
این دستور چه کاری انجام میده ؟

MostafaEs3
چهارشنبه 04 بهمن 1391, 19:23 عصر
یک header به اطلاعات بازگشتی به کلاینت اضافه میکنه و کد وضعیت رو روی 301 قرار میده ! دراین صورت حتی اگه موتور جستجو هم بیاد وارد صفحه جدید میشه و صفحه جدید رو ایندکس میکنه !! یعنی دراصل طرف رو منتقل میکنه به صفحه جدید

مثال نحوه استفاده ::

redirect('http://yoursite.com/newpage.html');

mehdi4467
چهارشنبه 04 بهمن 1391, 20:39 عصر
سلام
من الان به این شکل استفاده کرده ام:

redirector('index.php');
که در لوکال کار میکنه ولی در هاست نه.
وقتی که از دستور زیر هم استفاده می کنم:

redirect('index.php');
در هیچ حالتی کار نمی کنه.

Tarragon
چهارشنبه 04 بهمن 1391, 20:50 عصر
شما یه بار این کد رو اول بار اجرا کنید

public function redirect($url, $status = 302) {
header('Status: ' . $status);
header('Location: ' . str_replace('&', '&', $url));
exit();
}

habibvafapour
چهارشنبه 04 بهمن 1391, 22:28 عصر
به خدا من هنوز متوجه نشدم این تابع در اصل چه کاری رو انجام میده
حتی در سایت php تابعی به اسم redirectorوجود نداره
و یک سوال دیگه این تابع هدر :

header('Status: ' . $status);
با این پارامتر چه کاری رو انجام میده

siavashsay
چهارشنبه 04 بهمن 1391, 22:35 عصر
ازین تابعی که نوشتم استفاده کنید !
بجای tm تایم رو بر حسب ثانیه مثلا 3 و gurl آدرس صفحه یا سایتی که میخواین به اون بره :

function redirect($tm,$gurl){
echo "<meta http-equiv='refresh' content='".$tm.";url=".$gurl."'>";
}
مثال :

redirect("3","index.php");

mehdi4467
پنج شنبه 05 بهمن 1391, 12:43 عصر
ازین تابعی که نوشتم استفاده کنید !
بجای tm تایم رو بر حسب ثانیه مثلا 3 و gurl آدرس صفحه یا سایتی که میخواین به اون بره :

function redirect($tm,$gurl){
echo "<meta http-equiv='refresh' content='".$tm.";url=".$gurl."'>";
}
مثال :

redirect("3","index.php");
سلام
ممنون این کد جواب میده ولی کمی تاخیر داره.
من دنبال اینم که چرا تابع redirector در لوکال جواب میده ولی در هاست نه؟

MostafaEs3
پنج شنبه 05 بهمن 1391, 12:47 عصر
تابع redirector اصلا نداریم !! توی پی اچ پی چنین تابعی وجود نداره

mehdi4467
پنج شنبه 05 بهمن 1391, 12:50 عصر
سلام
شرمنده منظورم این تابع است :

header("Location: ". $address);

Reza1607
پنج شنبه 05 بهمن 1391, 13:08 عصر
اين تابع كاربر رو به صفحه اي با آدرس $address هدايت مي كنه

siavashsay
پنج شنبه 05 بهمن 1391, 17:21 عصر
ممنون این کد جواب میده ولی کمی تاخیر داره.
خوب مقدار 3 رو به 0 تبدیل کنید !
البته باز هم یک مقدار خیلی کم تاخیر داره اما به هر حال بهترین گزینه اس !
چون گاهی اوقات header ها چندبار فرستاده میشن و اگر مجدد از اونها استفاده کنید پیغام خطا میده !

MostafaEs3
پنج شنبه 05 بهمن 1391, 18:12 عصر
سلام
شرمنده منظورم این تابع است :

header("Location: ". $address);

داداش تابعی که من گذاشتم رو بذار دقیقا همینه !! فقط ریدایرکت ها رو بصورت 302 انجام میده که بهینه تر هست !!

مثال استفاده و ریدایرکت ::


public function redirect($url, $status = 302) {
header('Status: ' . $status);
header('Location: ' . str_replace('&amp;', '&', $url));
exit();
}

redirect('http://google.com');

طیق این تابع دوتا هدر به کلاینت ارسال میشه که باعث میشه به سرعت به صفحه ی جدید redirect بشه !!

MostafaEs3
پنج شنبه 05 بهمن 1391, 18:14 عصر
خوب مقدار 3 رو به 0 تبدیل کنید !
البته باز هم یک مقدار خیلی کم تاخیر داره اما به هر حال بهترین گزینه اس !
چون گاهی اوقات header ها چندبار فرستاده میشن و اگر مجدد از اونها استفاده کنید پیغام خطا میده !

داداش اینطوری باید اول حتما حتما صفحه مورد نظر لود بشه بعد مرورگر خودش دستی بفرسته ! و اینکه گوگل هم از این روش پشتیبانی نمیکنه و اگه سایت منتقل شده باشه خیلی خرابکاری به بار میاد ، همینطور متا تگ باید توی head قرار بگیره تا ساختار استاندارد کدنویسی بهم نریزه !!!! -- ولی توی روش ارسال header ، سایت هم لود نشده باشه به محض اینکه این هدر ارسال بشه سریعا انتقال انجام میشه

MMSHFE
پنج شنبه 05 بهمن 1391, 18:33 عصر
این تابع رو امتحان کنید:


<?php
function Redirector($path, $status = 302) {
$url = 'http://yoursite.com';
header('Status: ' . $status);
header('Location: ' . $url . '/' . $path);
exit();
}
/**
* Usage:
*
* Redirector('index.php');
* Redirector('gallery/view.php');
*/
?>

نکته: url$ رو با مسیر (URL) ریشه سایتتون مقداردهی کنید.
توضیح: توی بعضی از هاستها، ریدایرکت نسبی ( با استفاده از .. ) پشتیبانی نشده (بخاطر مسائل امنیتی). تابع فوق، مسیردهی رو بصورت مطلق از ریشه سایتتون انجام میده. موفق باشید.

Tarragon
پنج شنبه 05 بهمن 1391, 20:47 عصر
آقای شهرکی نمی شه بجای $url از
$_SERVER['SERVER_NAME'] استفاده کرد؟

MMSHFE
جمعه 06 بهمن 1391, 00:28 صبح
میشه با استفاده از SERVER_$ (البته نه به تنهایی با اندیس SERVER_NAME بلکه با کمک سایر اندیسها) آدرس سایت رو بدست آورد ولی استفاده از یک متغیر ساده، راحتتره.