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

Форум АНТИЧАТ (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=44155)

rubik-nerubik 10.07.2007 13:13

php, сессия, копирование
 
Народ, как бы мне сделать что-то вароде граббера .т.е. нужен скрипт на пхп, который при заходе на него открывает какую-то определенную страницу и копирует заданную часть строки, типа от <body> до </body>...

Isis 10.07.2007 13:27

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 запишет все что находится между этими тэгами

Helios 11.07.2007 17:43

эм... а причем тут сессия?

Isis 11.07.2007 17:46

Helios, да етма вообще создана не по названия...
Сначла вроде было другое название и в другом разщделе..
Перенесли и переименовали тему видимо...
Ток к чему..
ВПоолне обычное нахвание должно быть - Парсер

vizard-06 15.07.2007 02:24

PHP код:

<?
$i
=file_get_contents('ссылка на страницу'); 
preg_match_all("/\<body\>(.*?)\<\/body\>/i",$i,$p);
echo 
$p[1][0];
?>


GreenBear 15.07.2007 03:02

а зачем _all?

vizard-06 15.07.2007 03:07

Цитата:

Сообщение от GreenBear
а зачем _all?

на всякий случай он загадочно говорил может он удет использовать другой тег и в каждом нужна будет такая процедура))
Если нет то вот без _all
PHP код:

<? 
$i
=file_get_contents('ссылка на страницу');  
preg_match("/\<body\>(.*?)\<\/body\>/i",$i,$p); 
echo 
$p[1]; 
?>


Isis 15.07.2007 03:08

GreenBear, ну может vizard-06 посчитал что боди может быть не одно на странице...
vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
PHP код:

print_r($row[1]); 


vizard-06 15.07.2007 03:17

Цитата:

Сообщение от Isis
GreenBear, ну может vizard-06 посчитал что боди может быть не одно на странице...
vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
PHP код:

print_r($row[1]); 


незнаю что там у тебя не работает у меня всё работает например я использую так
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

_Great_ 15.07.2007 09:13

Цитата:

for($i=0;$i<$kol_pars;$i++)
echo $bash_pars[0][$i].'<br>';
Только не $bash_pars[0][$i], а $bash_pars[1][$i].

Цитата:

Сообщение от Isis
vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
PHP код:

print_r($row[1]); 


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


Время: 13:26