Войти

Показать полную графическую версию : Нужна помощь с PHP редиректом


blacks2
10-12-2009, 23:05
Доброго времени суток.
Есть redirect.php

<?php
$id =$_GET['id'];
if ($id == "") {$link = "http://ya.ru";}
if ($id == "1") {$link = "http://www.yahoo.com";}
if ($id == "2") {$link = "http://www.google.com";}
if ($id == "3") {$link = "http://www.webmasterworld.com";}
header('HTTP/1.1 301 Moved Permanently');
header("Location: $link");
exit();
?>
Но! - вроде как он не будет работать при отключенном register_globals (я не спец в php)

В интернете нашел нижеследующие варианты редиректов которые должны работать вместе с register_globals.
Но не знаю как правильно изменить оригинальный код основываясь на функциях из примеров.
if (isset ($_SERVER["QUERY_STRING"]) && ($_SERVER["QUERY_STRING"] != '')) {
header("Location: $_SERVER["QUERY_STRING"]");
}
$http = substr($_SERVER['REQUEST_URI'],strlen('redirect.php?')+1);
//проверка $http по желанию
header("Location: ".$http);
header("Location: $_SERVER[QUERY_STRING]");


Прошу помощи в решении.
Заранее всем откликнувшимся большое спасибо!


P.S. в 2м примере так и не понял что обозначает "//проверка $http по желанию" - ктонить может подсказать :/

Sham
11-12-2009, 00:58
Прошу помощи в решении. »
решении чего?
не будет работать при отключенном register_globals »
если через $_GET, то будет...
остальной код непонятного смысла.

blacks2
11-12-2009, 03:01
если через $_GET, то будет... »
То что приведенный мною скрипт не будет работать
основано на нижеследующем примере и отзыве к нему.

Хочу понять где истина: register_globals будет работать с моим скриптом но не с нижеследующим?



redirect.php
if (isset($_GET["url"]) && $_GET["url"]!='') {
header("Location: $url");
}

Отзыв:
LEOnidUKG, при отключенных register_globals переменная $url в вашем коде будет не пределена.

Sham
11-12-2009, 04:53
Данные запроса регистрируются в виде суперглобальных массивов $_SERVER, $_GET, $_POST и т.д. Если установлен register_globals (http://docs.php.net/manual/ru/ini.core.php#ini.register-globals) on, то вдобавок будут определяться соответствующие глобальные переменные согласно установке variables_order в php.ini ($_GET['url'] будет доступен через $url).

в вашем случае все решает строка $id =$_GET['id']; », где $id определена вручную.

Начиная с PHP6 директивы register_globals не существует.

blacks2
11-12-2009, 16:37
Начиная с PHP6 директивы register_globals не существует »
Значит получается что $id =$_GET['id']; действовать не будет?

Igor_I
11-12-2009, 21:50
http://docs.php.net/manual/ru/security.globals.php
Значит получается что $id =$_GET['id']; действовать не будет? »
Будет.Хочу понять где истина: register_globals будет работать с моим скриптом но не с нижеследующим? »

Да. С твоим. но не с нижеследующим.




© OSzone.net 2001-2012