Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Помогите с php скриптом. (https://forum.antichat.xyz/showthread.php?t=155485)

tshift 10.11.2009 17:25

Помогите с php скриптом.
 
Нужен скрипт на пхп,который работает так:
1)Передается параметр типа site.ru/script.php?adr=antichat.ru
2)Через N идет редирект на сайт antichat.ru
Заранее благодарю,+ гарантирую!

L I G A 10.11.2009 17:31

самый примитивный вариант (до вывода):
PHP код:

if($_GET['adr']){
echo 
header('Location: ' $_GET['adr']) ;
exit();


если N - это время,то sleep(сек); перед редиректом.

(Dm) 10.11.2009 23:45

Цитата:

Сообщение от L I G A
самый примитивный вариант (до вывода):
PHP код:

if($_GET['adr']){
echo 
header('Location: ' $_GET['adr']) ;
exit();


если N - это время,то sleep(сек); перед редиректом.

В твоем коде как бы раскрытие пути, при передачи новой строки в параметре _GET['adr'], имеем раскрытие пути. И зачем там echo !?

пример:
Цитата:

http://site.ru/script.php?adr=xe%0Ak%0A

получим:

Цитата:

Warning: Header may not contain more than a single header, new line detected. in /path/script.php
И вообще хорошо бы использовать функцию empty()
PHP код:

 if (!empty($_GET['adr'])) 

Более правильный вариант:
PHP код:

<?php
if (!empty($_GET['adr']) && !@preg_match('/[\r\n]/'$_GET['adr'])) {
    echo 
'<h1>перенаправление</h1>';
    
sleep(5);
    
header('Location: http://'.$_GET['adr']);
}
exit;
?>


PaCo 11.11.2009 00:05

/[^a-z\.]/i - как я понимаю в названиях сайтов цифр и тире быть не может? Ну а если там будет еще и не морду сайта, а на какую то его страницу с GET параметрами - index.php?fu=sdgfhg

(Dm) 11.11.2009 00:12

PaCo правильно говоришь, исправил...

mailbrush 11.11.2009 00:32

(Dm), и твой вариант не оптимален - зачем скрипту простаивать 5 секунд? Пользователь подумает, что скрипт завис... Кстати, ты используешь регулярные выражения, а они - очень медленные. Вот более-менее оптимальный вариант:
PHP код:

<?php

if (isset($_GET['addr']))
{
    
$url 'http://' htmlspecialchars($_GET['addr']);
    
$n 5;
    if (
parse_url($urlPHP_URL_HOST))
    {
        echo 
'В течении '$n .' секунд вы будете перенаправлены на страницу ' $url '...
<script>function redirect() 
{
  document.location = "' 
$url '";
}
setTimeout(redirect, ' 
. ($n 1000) . ')
</script>'
;
    } else
    {
        echo 
'Неправильная ссылка!';
    }
}

?>


(Dm) 11.11.2009 00:35

Твой вариант как альтернатива. а что если javascript отключен !?
По поводу регулярок... я их использую и буду использовать...
По поводу скорости выполнения, если такой умный ответь на вопрос, насколько быстро выполняются функции
Цитата:

htmlspecialchars
parse_url
??? быстрее ли они одного простого регулярного выражения?

[QwyZ] 11.11.2009 00:36

<?php
if (isset($_GET['adr'])){
header("Location: $_GET['adr']");
echo("<script>location.href=\"".htmlspecialchars($ _GET['adr'])."\"</script>"); //tak na vsyakii sluchai esli error v php
}
?>

Deathdreams 11.11.2009 00:42

[QwyZ]
такой бред написал, мне аж страшно.

Тогда уже так:
PHP код:

<?php
if (isset($_GET['adr'])){
@
header("Location: $_GET['adr']") or die("<script>location.href=\"".htmlspecialchars($_GET['adr'])."\"</script>"); 


}
?>


mailbrush 11.11.2009 01:01

Цитата:

Сообщение от (Dm)
По поводу скорости выполнения, если такой умный ответь на вопрос, насколько быстро выполняются функции

??? быстрее ли они одного простого регулярного выражения?

Так, стоп, а обзывать меня зачем? Я что-то сказал плохое в твою сторону? Я всего лишь критиковал код. А насчет скорости - сейчас измерю, чей код быстрее выполнится.


Время: 14:52