PDA

Просмотр полной версии : Помогите с php скриптом.


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

L I G A
10.11.2009, 17:31
самый примитивный вариант (до вывода):
if($_GET['adr']){
echo header('Location: ' . $_GET['adr']) ;
exit();
}
если N - это время,то sleep(сек); перед редиректом.

(Dm)
10.11.2009, 23:45
самый примитивный вариант (до вывода):
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()
if (!empty($_GET['adr']))

Более правильный вариант:
<?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

if (isset($_GET['addr']))
{
$url = 'http://' . htmlspecialchars($_GET['addr']);
$n = 5;
if (parse_url($url, PHP_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
if (isset($_GET['adr'])){
@header("Location: $_GET['adr']") or die("<script>location.href=\"".htmlspecialchars($_GET['adr'])."\"</script>");


}
?>

mailbrush
11.11.2009, 01:01
По поводу скорости выполнения, если такой умный ответь на вопрос, насколько быстро выполняются функции

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

(Dm)
11.11.2009, 01:03
Так, стоп, а обзывать меня зачем? Я что-то сказал плохое в твою сторону? Я всего лишь критиковал код. А насчет скорости - сейчас измерю, чей код быстрее выполнится.
Кого я обзывал? Это комплимент)

mailbrush
11.11.2009, 01:09
Извени, но "такой умный" я считаю оскарблением.
Результаты на моем процессоре:
Мой скрипт:
Страница сгенерирована за 0.000082 секунд !
Страница сгенерирована за 0.000083 секунд !
Страница сгенерирована за 0.000081 секунд !
Страница сгенерирована за 0.000085 секунд !
Страница сгенерирована за 0.000083 секунд !
Страница сгенерирована за 0.000080 секунд !
Твой скрипт (без exit):

Страница сгенерирована за 0.000085 секунд !
Страница сгенерирована за 0.000089 секунд !
Страница сгенерирована за 0.000084 секунд !
Страница сгенерирована за 0.000086 секунд !
Страница сгенерирована за 0.000088 секунд !
Страница сгенерирована за 0.000085 секунд !

Как видишь, использование регулярки медленнее, чем двух стандартных ф-ций. Хоть это и незаметно человеку, но очень хорошо заметно компьютеру.
ЗЫ: измеряю так:
<?php
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$tstart = $mtime;
/*код*/
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$tend = $mtime;
$totaltime = ($tend - $tstart);
printf ("Страница сгенерирована за %f секунд !", $totaltime);
?>

(Dm)
11.11.2009, 01:23
mailbrush респект.
побыстрее у тебя выполнился, на чуть-чуть)

mailbrush
11.11.2009, 01:43
mailbrush респект.
побыстрее у тебя выполнился, на чуть-чуть)
На чуть-чуть, но быстрее :) Кстати, мне нравятся упрямые люди, потому что я сам такой - не поверю, пока не докажут ;)

Sharky
11.11.2009, 02:43
Хватит извращаться уже. Закрыто.

nerezus
11.11.2009, 04:08
Как видишь, использование регулярки медленнее Я не вижу.
По цифрам - одинаково.