Помогите с php скриптом.

Discussion in 'PHP' started by tshift, 10 Nov 2009.

Thread Status:
Not open for further replies.
  1. tshift

    tshift Member

    Joined:
    27 Apr 2009
    Messages:
    53
    Likes Received:
    16
    Reputations:
    0
    Нужен скрипт на пхп,который работает так:
    1)Передается параметр типа site.ru/script.php?adr=antichat.ru
    2)Через N идет редирект на сайт antichat.ru
    Заранее благодарю,+ гарантирую!
     
  2. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    самый примитивный вариант (до вывода):
    PHP:
    if($_GET['adr']){
    echo 
    header('Location: ' $_GET['adr']) ;
    exit();
    }
    если N - это время,то sleep(сек); перед редиректом.
     
    3 people like this.
  3. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    В твоем коде как бы раскрытие пути, при передачи новой строки в параметре _GET['adr'], имеем раскрытие пути. И зачем там echo !?

    пример:

    получим:

    И вообще хорошо бы использовать функцию 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;
    ?>
     
    #3 (Dm), 10 Nov 2009
    Last edited: 10 Nov 2009
  4. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    /[^a-z\.]/i - как я понимаю в названиях сайтов цифр и тире быть не может? Ну а если там будет еще и не морду сайта, а на какую то его страницу с GET параметрами - index.php?fu=sdgfhg
     
    1 person likes this.
  5. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    PaCo правильно говоришь, исправил...
     
    #5 (Dm), 10 Nov 2009
    Last edited: 10 Nov 2009
  6. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    (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 
    'Неправильная ссылка!';
        }
    }

    ?>
     
  7. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    Твой вариант как альтернатива. а что если javascript отключен !?
    По поводу регулярок... я их использую и буду использовать...
    По поводу скорости выполнения, если такой умный ответь на вопрос, насколько быстро выполняются функции
    ??? быстрее ли они одного простого регулярного выражения?
     
    #7 (Dm), 10 Nov 2009
    Last edited: 10 Nov 2009
  8. [QwyZ]

    [QwyZ] Banned

    Joined:
    7 Jul 2009
    Messages:
    71
    Likes Received:
    27
    Reputations:
    5
    <?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
    }
    ?>
     
    1 person likes this.
  9. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    [QwyZ]
    такой бред написал, мне аж страшно.

    Тогда уже так:
    PHP:
    <?php
    if (isset($_GET['adr'])){
    @
    header("Location: $_GET['adr']") or die("<script>location.href=\"".htmlspecialchars($_GET['adr'])."\"</script>"); 


    }
    ?>
     
  10. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Так, стоп, а обзывать меня зачем? Я что-то сказал плохое в твою сторону? Я всего лишь критиковал код. А насчет скорости - сейчас измерю, чей код быстрее выполнится.
     
  11. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    Кого я обзывал? Это комплимент)
     
  12. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Извени, но "такой умный" я считаю оскарблением.
    Результаты на моем процессоре:
    Мой скрипт:
    Code:
    Страница сгенерирована за 0.000082 секунд !
    Страница сгенерирована за 0.000083 секунд !
    Страница сгенерирована за 0.000081 секунд !
    Страница сгенерирована за 0.000085 секунд !
    Страница сгенерирована за 0.000083 секунд !
    Страница сгенерирована за 0.000080 секунд !
    Твой скрипт (без exit):
    Code:
    Страница сгенерирована за 0.000085 секунд !
    Страница сгенерирована за 0.000089 секунд !
    Страница сгенерирована за 0.000084 секунд !
    Страница сгенерирована за 0.000086 секунд !
    Страница сгенерирована за 0.000088 секунд !
    Страница сгенерирована за 0.000085 секунд !
    
    Как видишь, использование регулярки медленнее, чем двух стандартных ф-ций. Хоть это и незаметно человеку, но очень хорошо заметно компьютеру.
    ЗЫ: измеряю так:
    PHP:
    <?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);
    ?>
     
    #12 mailbrush, 11 Nov 2009
    Last edited: 11 Nov 2009
    3 people like this.
  13. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    mailbrush респект.
    побыстрее у тебя выполнился, на чуть-чуть)
     
    2 people like this.
  14. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    На чуть-чуть, но быстрее :) Кстати, мне нравятся упрямые люди, потому что я сам такой - не поверю, пока не докажут ;)
     
  15. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    Хватит извращаться уже. Закрыто.
     
  16. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Я не вижу.
    По цифрам - одинаково.
     
Thread Status:
Not open for further replies.