php, сессия, копирование

Discussion in 'PHP' started by rubik-nerubik, 10 Jul 2007.

  1. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    Народ, как бы мне сделать что-то вароде граббера .т.е. нужен скрипт на пхп, который при заходе на него открывает какую-то определенную страницу и копирует заданную часть строки, типа от <body> до </body>...
     
    1 person likes this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    PHP:
    <html>
        <head><title>Parser</title></head>
            <body>
            <form method="POST">
            Location of the file: <input type="text" name="url" value="" style="width: 120;height:20;" /><br/></br>
            Before: <input type="text" name="before" value="" style="width: 60;height:20;" /><br/></br>
            After: <input type="text" name="after" value="" style="width: 60;height:20;" /><br/></br>
            <input type="submit" name="end" value="Parse..."/>
            </form>
            <?php
                set_time_limit
    (0);

                
    $url     = isset($_POST['url'])            ?    $_POST['url']         : '';
                
    $before = isset($_POST['before'])        ?    $_POST['before']     : '';
                
    $after     = isset($_POST['after'])        ?    $_POST['after']     : '';
                
    $end     = isset($_POST['end'])            ?    $_POST['end']         : '';
                
    $file    'file.txt';

                if(
    $end)
                {
                    if(
    $url && $before && $after)
                    {
                         
    $ps        file_get_contents($url);

                         
    $pattern "#".$before."(.*?)".$after."#is";

                          
    preg_match_all($pattern$ps$outPREG_SET_ORDER);
                        foreach(
    $out as $row)
                        {
                            if(
    $handle fopen($file'ab'))
                            {
                                
    fwrite($handle$row[1]."\r\n");
                                
    fclose($handle);
                            }
                        }
                    }
                    else
                    {
                        echo 
    "Заполните все поля";
                    }
                }
            
    ?>
            </body>
    </html>

    Вписываешь ссылку в первое поле...
    Во второе поле вписываешь слово или тэг от которого будет браться все до второго тэга(3 поля)
    Короче допустим ввели в первое поле: http://www.mail.ru
    Во второе: <body bgcolor=white topmargin=0 leftmargin=0 rightmargin=0 marginwidth=0 marginheight=0 >
    В третье: </body>

    То в файл file.txt запишет все что находится между этими тэгами
     
  3. Helios

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

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    эм... а причем тут сессия?
     
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Helios, да етма вообще создана не по названия...
    Сначла вроде было другое название и в другом разщделе..
    Перенесли и переименовали тему видимо...
    Ток к чему..
    ВПоолне обычное нахвание должно быть - Парсер
     
  5. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    PHP:
    <?
    $i=file_get_contents('ссылка на страницу'); 
    preg_match_all("/\<body\>(.*?)\<\/body\>/i",$i,$p);
    echo 
    $p[1][0];
    ?>
     
  6. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    а зачем _all?
     
  7. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    на всякий случай он загадочно говорил может он удет использовать другой тег и в каждом нужна будет такая процедура))
    Если нет то вот без _all
    PHP:
    <? 
    $i=file_get_contents('ссылка на страницу');  
    preg_match("/\<body\>(.*?)\<\/body\>/i",$i,$p); 
    echo 
    $p[1]; 
    ?>
     
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    GreenBear, ну может vizard-06 посчитал что боди может быть не одно на странице...
    vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
    И вывести
    PHP:
    print_r($row[1]);
     
  9. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    незнаю что там у тебя не работает у меня всё работает например я использую так
    PHP:
    <?
    $bash='<div>рез</div><div>два</div><div>три</div><div>четыре</div><div>пять</div><div>....</div>';
        
    $kol_pars=preg_match_all("/\<div\>(.*?)\<\/div\>/i",$bash,$bash_pars);
        for(
    $i=0;$i<$kol_pars;$i++)
        echo 
    $bash_pars[0][$i].'<br>';
    ?>
    :D :D :D
     
  10. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Только не $bash_pars[0][$i], а $bash_pars[1][$i].

    С какой радости не будет? И без прег_сет_ордер жизнь прекрасна.
    В массиве $p[1] будут вхождения первой подмаски, индексом [0] выбирается первое.
    Это используемый по дефолту тип PREG_PATTERN_ORDER