[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    http://www.php.net/manual/ru/function.parse-url.php
     
  2. Zircool

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

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Здравствуйте..Как сделать редирект..Есть ссылка
    PHP:
    http://100mbps.ru/?pid=111&bid=3 
    Необходимо что бы при переходе на данную ссылку пользователь перенаправлялся на страницу
    PHP:
    http://billing.100mbps.ru/?pid=111&bid=3&type=banner&redirect=1  
    Переменные pid и bid динамичны и меняют све значение...
     
  3. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    редирект с host.ru на host.net
    нужно сделать чтобы при переходе по ссылке вида http://host.ru/blablabla
    (неважно что в урле после host.ru хоть host.ru/index.php )
    чтобы редиректило всегда на host.net
    ах да... permanent (301 — документ перемещен постоянно)
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    #Wolf# Как то так
    Code:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?host\.ru [NC]
    RewriteRule ^.*$ http://host.net/ [L,R=301] 
     
    _________________________
  5. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Как проверить является ли строка IP адресом.
    Т.е. например 127.0.0.1 верно, а 266.0.0.1 неверно?
     
    1 person likes this.
  6. erihtoney

    erihtoney Member

    Joined:
    3 Mar 2009
    Messages:
    91
    Likes Received:
    73
    Reputations:
    20
    PHP:
    <?
    $ip=$_SERVER['REMOTE_ADDR'];
    $array_ip=split("\.",$ip);
    if(
    $array_ip[0]<=255 && $array_ip[1]<=255 && $array_ip[2]<=255 && $array_ip[3]<=255)
    {
        echo 
    "OK";
    }
    else
    {
        echo 
    "Error";
    }
    ?>
    Почему-то ничего больше на ум не приходит,кроме данного способа.
     
    2 people like this.
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?php
    function validateIpAddress($ip_addr) {
       if(
    preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$ip_addr))  {
           
    $parts=explode(".",$ip_addr);
            foreach(
    $parts as $ip_parts)  {
              if(
    intval($ip_parts)>255 || intval($ip_parts)<0)
                   return 
    false
            }
        return 
    true;
      }
      else
        return 
    false
    }

    // Пример использования:

    if (validateIpAddress('1000.2.3.4')) echo 'Валидный IP';
    else echo 
    'Невалидный IP'
    ?>
     
    1 person likes this.
  8. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    А ip2long кто отменил? False в случае невалидности.
     
    3 people like this.
  9. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Не всегда все так просто:
    PHP:
    <?
    for (
    $i=0$i<=255$i++)
    {
    $out="1.1.1.1".chr($i)."numb of char $i<br>";
     if(
    ip2long($out)) echo $out;

    У меня такой вопрос как можно с помошью .htaccess заставить 1-у картинку из множества с одинаковым расширением(.gif,.jpeg, etc) интерпритироваться как php код, то есть в например в дириктории множества картинок с одинаковым расширением и мне нужно как то одну едиственную с вполне конкретным именнем(допустим shell.gif) заставить выполняться как php а все остальные по прежнему имели mime type картинки, реально ли это зделать через .htaccess?
     
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    <Files "shell.gif">
    AddType application/x-httpd-php .gif
    </Files>
     
    1 person likes this.
  11. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Доброго времени суток, у меня маленький вопрос, допустим есть такой html:
    HTML:
    
    <table align="center" width="80%"><tr><td> google.ru </td><td>PR:<b><font color=green> 2 </font></b>тИЦ:<b><font color=red> 10 </font></b></td></tr><tr><td> mail.ru </td><td>PR:<b><font color=green> 7 </font></b>тИЦ:<b><font color=red> 1700 </font></b></td></tr></table>
    
    
    какой патерн более разумно использовать если мне надо выдрать данные в таком виде:
    google.ru PR:2 тИЦ:10
    mail.ru PR:7 тИЦ:1700
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Никакой, если в скрипте нужно просто такие строки выводить

    PHP:
    <?
    $in '<table align="center" width="80%"><tr><td> google.ru </td><td>PR:<b><font color=green> 2 </font></b>тИЦ:<b><font color=red> 10 </font></b></td></tr><tr><td> mail.ru </td><td>PR:<b><font color=green> 7 </font></b>тИЦ:<b><font color=red> 1700 </font></b></td></tr></table>';

    $in str_replace('</tr><tr>','<br />',$in);
    echo 
    strip_tags($in,'<br>');

    ?>
     
    _________________________
    #392 Gifts, 24 Apr 2009
    Last edited: 24 Apr 2009
  13. PaCo

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

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Ну примерно так я и делал, но мне это не понравилось вот и хотел как вытянуть регуляркой(че то потерн не выходит), да в html есть и еще таблицы и много другого контента, я например делаю так :

    PHP:
    $in =<<<HTML
    Здесь html в то числе и таблицы с <tr> <td>
    ........

    а вот эта таблица уникальна(в смысле в коде больше не встречаеться):
    <table align="center" width="80%"><tr><td> google.ru </td><td>PR:<b><font color=green> 2 </font></b>тИЦ:<b><font color=red> 10 </font></b></td></tr><tr><td> mail.ru </td><td>PR:<b><font color=green> 7 </font></b>тИЦ:<b><font color=red> 1700 </font></b></td></tr></table> 

    ...... еще htm


    HTML;

    preg_match('#<table align="center" width="80\%">(.*)</table>#sU',$in ,$match);
    $match=!empty($match[1]) ? array_map('strip_tags',explode('</tr>',rtrim($match[1],'</tr>'))) : null;
    print_r($match);
     
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Думаю универсальной на все случаи жизни в данном случае не придумать, обязательно должно быть какое-то ограничение справа, либо расширение нужное, либо слеш, либо ">" и etc., вот вариант со слешем:

    PHP:
    <?php 
    $text
    ='Hello http://allow1.url/preg/match.php/ Hello allo https://allow2.url/preg/match.php/ ла-ла http://allow3.url/preg/match.php/ sss https://allow4.url/preg/match.php/'
    preg_match_all("#(http://.*/.*/.*/)|(https://.*/.*/.*/)#Ui"$text$res); 
    print_r($res);
    ?>
    а вот вариант с заданным расширением (фактически просто ограничитель справа, слеш есть или нет в конце ссылки - значение не имеет особого, думаю объяснять не надо, http://sait/admin и http://sait/admin/) в итоге дадут одинаковый результат):

    PHP:
    <?php 
    $text
    ='Hello http://allow1.url/preg/match.php Hello allo https://allow2.url/preg/match.php ла-ла http://allow3.url/preg/match.php/ sss https://allow4.url/preg/match.php/'
    preg_match_all("#(http://.*/.*/.*php)|(https://.*/.*/.*php)#Ui"$text$res); 
    print_r($res[0]);
    ?>
    либо парсить ссылки включая "<a href='kfkfkfkfkf'>название_ссылки</a>", что вообще-то более правильно и действительно универсальнее

    Т.е. принцип составления ЛЮБОГО регулярного выражения простой - должно быть НАЧАЛО и должен быть КОНЕЦ, как это не странно. Если спошлняковый текст (не имена файлов и т.д., если проводить аналогию с поиском, там ОГРАНИЧЕННЫЙ текст. А тут - сплошняк сплошной.

    ЗЫЖ: Вроде бы:) Если не прав - думаю поправят
     
    #394 Pashkela, 28 Apr 2009
    Last edited: 28 Apr 2009
  15. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    а и вставленно http|https, просто расширенно
     
  16. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    PHP:
    preg_match_all('~https?://\S+~i',$in,$out);
    В урле не должно быть пробельных символов.
     
    _________________________
  17. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    delete
     
    #397 Дикс, 30 Apr 2009
    Last edited: 30 Apr 2009
  18. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    у меня вопрос, как из форума выдрать кол-во репы, дату реги, кол-во сообщений, ник
    форум на вобле, (в принципе пример ачата думаю поможет) и желательно с разъяснением если сможет кто
     
  19. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    Возьмем в пример ачат
    де та выцепил часть кода, по его примеру для другого форума смог сделать только репу

    PHP:
    <?php 
    //chek on antichat
    $id 41269//id на ачате 
    $summ 0//начальное кол-во репы. 
    $all 0//всего поставленно 

    $content file_get_contents("http://forum.antichat.ru/view_reputation.php?userid={$id}&count=11111111111111111"); 
    preg_match_all('#<nobr><b>\+([0-9]{1,5})</b></nobr>#i',$content,$pluses); 
    preg_match_all('#<nobr><b>\-([0-9]{1,5})</b></nobr>#i',$content,$minuses); 


    foreach(
    $pluses['1'] as $plus

        
    $summ += $plus
        
    $all++; 


    foreach(
    $minuses['1'] as $minus

        
    $summ $summ $minus
        
    $all++; 



    echo 
    'Количество репутации: '.$summ.'<br>Всего поставлено: '.$all.' раз<br><br>'
    ?>

    Далее надо выцепить ник, в исходном коде это такой кусок:
    HTML:
    <div style="font-size:18pt">Alekzzzander</div>
    <div class="smallfont">Участник форума</div>
    (для примера взял ещё и статус)

    далее идем на кол-во сообщений, исходный код:
    HTML:
    <legend>Сообщения</legend>
    <table cellpadding="0" cellspacing="3" border="0">
    <tr>
    <td>
    Всего сообщений: <strong>118</strong>

    далее дата реги:
    HTML:
    <div class="fieldset">
    <div style="padding:3px">
    Регистрация: <strong>05.09.2007</strong>
    </div>
    </div>
     
  20. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    ну если я захочу сделать для каждого человека свое этот вариант же не прокатит, именно поэтому и написал сюда :) мне надо что бы из всей страницы я мог ввести id юзера и тут же мне показываело эти данные
     
Thread Status:
Not open for further replies.