[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_match_all
Frost-56
Всем привет.

Есть файлик html, там есть строка с таким содержанием:

<span class="gen"><a href="/profile.php?mode=viewprofile&u=44964" style="color:" class="gen">Ильдар Ганиев</a>


Мне надо через preg_match_all записать в файл только ник, как реализовать ?

Пока получилось написать только:

<?php
$data = file_get_contents("тут ссылка на тот html");
preg_match_all("/\<span class\=\"gen"\>\<a href\=\"(*)\" style\=\"color\:\" class\=\"gen\"\>(.*)\<\/a\>/U",$data,$mch, PREG_SET_ORDER);
$a = fopen("text.txt","a+");
fwrite($a, $mch);
fclose($a);
?>


Ошибок много.
Заранее благодарен.



Спустя 15 минут, 56 секунд (3.01.2012 - 15:45) inpost написал(а):
Объясни, зачем слеш поставил после input ? input\ - зачем тут слеш? Слеш - это экранизация спец.символов, а где они?

Спустя 2 минуты, 3 секунды (3.01.2012 - 15:47) Frost-56 написал(а):
Цитата
Объясни, зачем слеш поставил после input ? input\ - зачем тут слеш? Слеш - это экранизация спец.символов, а где они?


Как видите input там не нужен вообще =)

Спустя 3 минуты, 25 секунд (3.01.2012 - 15:50) inpost написал(а):
Ну так исправь и напиши то, что нужно.
Ато получается ты ничего не делал, сделал видимость работы дав вообще левый код.
Нам то нужно, чтобы ты сам пошевелил извилинами, а если что-то не будет получаться, тогда и будем помогать.

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

Спустя 3 минуты, 42 секунды (3.01.2012 - 15:54) inpost написал(а):
А в целом, обычный вопрос тех, кто работает на регулярках:
- Как экранизировать
- Как создать (или|или)
- Почему в данный код не находит то, что мне надо, ведь он, вроде, правильно написан.

И для всех их нужно хотя бы палец об палец ударить и почитать о регулярках!

Спустя 5 минут, 18 секунд (3.01.2012 - 15:59) Frost-56 написал(а):
Я читал основы preg_match.
Я попробовал сделать, отредактировал первый пост, посмотрите пожалуйста.

Спустя 32 минуты, 46 секунд (3.01.2012 - 16:32) inpost написал(а):
Кавычка не экранизирована в первом теге, закрытие ссылки тоже отсутствует, лишний пробел в конце. Внимательнее быть надо.

Спустя 12 минут, 27 секунд (3.01.2012 - 16:45) Frost-56 написал(а):
Изменил кроме закрытия ссылки. Ковычаками она закрыта же.

И ещё, правильно ли я отметил то что в теге href ?
там может быть любая ссылка просто и она мне не нужна.

Спустя 24 минуты, 4 секунды (3.01.2012 - 17:09) inpost написал(а):
Frost-56
У тебя так открытие второй ссылки идёт, а не закрытие первой. И что изменил, показывать надо.

Спустя 13 минут, 8 секунд (3.01.2012 - 17:22) Frost-56 написал(а):
Может подскажете где именно ?

preg_match_all("/\<span class\=\"gen"\>\<a href\=\"(*)\" style\=\"color\:\" class\=\"gen\"\>(.*)\<a\>/U",$data,$mch, PREG_SET_ORDER);

перед звездочкой надо воткнуть точку ? (.*)

Спустя 3 минуты, 30 секунд (3.01.2012 - 17:25) m4a1fox написал(а):
Frost-56
Корявенько конечно..... но работает! Вроде так как требовалось!

$red = '<span class="gen"><a href="/profile.php?mode=viewprofile&u=44964" style="color:" class="gen">Ильдар Ганиев</a>';
preg_match("#<a\shref=\"(.+?)\"\s(.+?)>[а-яё].+?</a>$#is", $red, $ret);
unset($ret[2]);

print_r($ret);

Спустя 1 минута, 4 секунды (3.01.2012 - 17:26) inpost написал(а):
Тег а закрывается в конце так: </a> , а не так <a>

Спустя 14 минут, 58 секунд (3.01.2012 - 17:41) Frost-56 написал(а):
точно забыл про слеш.
inpost спасибо, исправил, но все равно ошибка где то.

m4a1fox на страницу выводит "Array ( [0] => Array ( ) [1] => Array ( ) )" а мне надо чтобы выводило только ник (в этом случае имя фамилия).

Спустя 18 минут, 52 секунды (3.01.2012 - 18:00) m4a1fox написал(а):
Frost-56
Код полностью в студию! И что возвращает вот эта строка
$data = file_get_contents("тут ссылка на тот html");


-------------------------------------------------------------------------------------

$red = '<span class="gen"><a href="/profile.php?mode=viewprofile&u=44964" style="color:" class="gen">Ильдар Ганиев</a>';
preg_match("#<a [a-z].*>[а-яё].+?</a>$#is", $red, $ret);
print_r($ret);

Спустя 9 минут, 49 секунд (3.01.2012 - 18:10) Frost-56 написал(а):
Через минутку. Сервер упал, может даже из за этого не работает.

Спустя 7 минут, 5 секунд (3.01.2012 - 18:17) inpost написал(а):
Кодировка того сайта, и кодировка твоего - точно ОДИНАКОВЫЕ?

Спустя 36 минут, 29 секунд (3.01.2012 - 18:54) Frost-56 написал(а):
Вот полный код:

<?php
$red = file_get_contents("http://krirminala.net/ru/kn.php");
preg_match("#<a\shref=\"(.+?)\"\s(.+?)>[а-яё].+?</a>$#is", $red, $ret);
unset($ret[2]);
print_r($ret);
?>


Ошибка не исправилась.

Спустя 4 минуты, 35 секунд (3.01.2012 - 18:58) inpost написал(а):
Пробовал вывести red ? Кодировка точно одинаковая на обоих сайтах?

Спустя 7 минут, 10 секунд (3.01.2012 - 19:05) m4a1fox написал(а):
Frost-56
Чет явно не так. Сделай print_r($red) и давай что выведется на экран сюда.

Спустя 2 минуты, 42 секунды (3.01.2012 - 19:08) Frost-56 написал(а):
Цитата
Пробовал вывести red ? Кодировка точно одинаковая на обоих сайтах?

кодировка одинаковая, на обоих сайтах windows-1251.
Цитата
Чет явно не так. Сделай print_r($red) и давай что выведется на экран сюда.

Если делать чтобы выводился red то он выводит сам сайт, а не результат поиска.

Спустя 7 минут, 59 секунд (3.01.2012 - 19:16) m4a1fox написал(а):
Frost-56
Цитата
кодировка одинаковая, на обоих сайтах windows-1251.

первая ошибка. ИМХО конечно, но скрипт ищет на utf-8 кажется.

Спустя 1 минута, 38 секунд (3.01.2012 - 19:18) Frost-56 написал(а):
И что предлагаете сделать ? smile.gif
Ведь очень много сайтов на cp1251 стоят.

он выводит это: http://krirminala.net/ru/memb.php (тут скрипт)

Спустя 24 минуты, 38 секунд (3.01.2012 - 19:42) inpost написал(а):
m4a1fox
если разные, то переводить надо.

Frost-56
Попробуй сделать поиск более простой, сначало href="(.*)" с модификаторами isU

Спустя 3 минуты, 24 секунды (3.01.2012 - 19:46) Frost-56 написал(а):
Цитата (inpost @ 3.01.2012 - 16:42)
m4a1fox
если разные, то переводить надо.

Frost-56
Попробуй сделать поиск более простой, сначало href="(.*)" с модификаторами isU



а можно примерчик, а то не понял нифига )))

Спустя 1 минута, 53 секунды (3.01.2012 - 19:48) inpost написал(а):
Я тебе показал патерн, и модификаторы.
Патерн поиска: href="(.*)"
Модификаторы: isU

Спустя 33 минуты, 58 секунд (3.01.2012 - 20:22) killer8080 написал(а):
Frost-56
оно?
$content = file_get_contents("http://krirminala.net/ru/kn.php");
preg_match_all('#<a[^>]+href="/profile.php\?mode=viewprofile[^>]+>(.*)</a>#isU', $content, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';

Спустя 4 минуты, 35 секунд (3.01.2012 - 20:26) Frost-56 написал(а):
Цитата
оно?


Спасибо большое. Взгляните http://krirminala.net/ru/memb.php
Можно сделать чтобы выводились только ники ?

Спустя 4 минуты, 44 секунды (3.01.2012 - 20:31) killer8080 написал(а):
Цитата (Frost-56 @ 3.01.2012 - 19:26)
Можно сделать чтобы выводились только ники ?

А в чем проблема? В $match[1] у тебя и есть только ники wink.gif

Спустя 1 минута, 47 секунд (3.01.2012 - 20:33) inpost написал(а):
В чём дело?
Обращайся напрямую к $match[1];

Спустя 11 минут, 50 секунд (3.01.2012 - 20:45) Frost-56 написал(а):
Цитата
А в чем проблема? В $match[1] у тебя и есть только ники


Да вот не совсем.

Вот скрипт с записью в txt:

<?php

$content = file_get_contents("http://krirminala.net/ru/kn.php");
preg_match_all('#<a[^>]+href="/profile.php\?mode=viewprofile[^>]+>(.*)</a>#isU', $content, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
$a = fopen("text.txt","a+");
fwrite($a, $match[1]."\n");
fclose($a);
?>


Но в текстовик пишет слово Array и всё.




Спустя 1 час, 7 минут, 41 секунда (3.01.2012 - 21:52) Winston написал(а):
$content = file_get_contents("http://krirminala.net/ru/kn.php");
preg_match_all('#<a.*href="/profile.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match);
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
file_put_contents("file.txt", implode("\n", $match[1]), FILE_APPEND);

Спустя 2 минуты, 8 секунд (3.01.2012 - 21:54) Frost-56 написал(а):
Смотрите что произошло в файле где Print, стало отображаться много лишнего исходника http://krirminala.net/ru/memb.php
а в текстовик ничего не записалось.

Спустя 6 минут, 12 секунд (3.01.2012 - 22:01) Winston написал(а):
Цитата (Frost-56 @ 3.01.2012 - 20:54)
а в текстовик ничего не записалось.

А ты свое имя файла подставил ? biggrin.gif
Цитата (Winston @ 3.01.2012 - 20:52)
file_put_contents("file.txt",




Спустя 2 минуты, 16 секунд Winston написал(а):
Цитата (Frost-56 @ 3.01.2012 - 20:54)
Смотрите что произошло в файле где Print, стало отображаться много лишнего исходника

Ну, тогда оставь регулярку, которую предложил killer8080
preg_match_all('#<a[^>]+href="/profile.php\?mode=viewprofile[^>]+>(.*)</a>#isU', $content, $match);

Спустя 3 минуты, 13 секунд (3.01.2012 - 22:04) Frost-56 написал(а):
laugh.gif пора спать походу идти, реально затупил laugh.gif

Спасибо большое за помощь.

Спустя 3 часа, 21 минута, 19 секунд (4.01.2012 - 01:25) Frost-56 написал(а):
Ещё 3 вопросика образовалось.

Как сделать проверку на количество найденных ников ?
думал сделать типа:

if ($match[1] == str(60))
{ ... } else { ... }


второй вопрос по циклам:

$i = '12000';
как приплюсовать число допустим 40 к 12000 так чтобы в переменной $i число изменилось на 12040 ?

И последний вопрос :

Как сделать так чтобы ники которые уже есть, не записывались ?

Спустя 2 минуты, 11 секунд (4.01.2012 - 01:27) Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 00:25)
Как сделать проверку на количество найденных ников

echo sizeof($match[1]);

Цитата (Frost-56 @ 4.01.2012 - 00:25)
как приплюсовать число допустим 40 к 12000 так чтобы в переменной $i число изменилось на 12040 ?

$i = 12000;
$i += 40;

Цитата (Frost-56 @ 4.01.2012 - 00:25)
Как сделать так чтобы ники которые уже есть, не записывались ?

Ну это уже более сложно. Нужно проверки всякие делать...

Спустя 2 минуты, 54 секунды (4.01.2012 - 01:30) Frost-56 написал(а):
Цитата
echo sizeof($match[1]);


Это значит сделать так ?

$per = sizeof($match[1]);

if ($per == 60)
{ ... } else { ... }


Верно ?


Цитата
$i = 12000;
$i += 40;


А это не катит, мне надо чтобы в сам файл где переменная $i вносились изменения.
Т.к. я один раз использую скрипт, мне надо будет при следующем использовании уже делать

$i = 12040;
$i += 40;

и так много раз, каждый раз изменять вручную не вариант.

Спустя 27 минут, 3 секунды (4.01.2012 - 01:57) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 00:25)
Как сделать так чтобы ники которые уже есть, не записывались ?

удалить их из массива
$match[1] = array_unique($match[1]);

Спустя 7 минут, 57 секунд (4.01.2012 - 02:05) Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 00:25)
Как сделать так чтобы ники которые уже есть, не записывались ?

Хм...killer8080 натолкнул на мысль :) . Вот так можно
$file = file('file.txt'); // Твой файл с никами
$array = array_diff($match[1], $file); // Оставляем только те ники которые отсутствуют в файле
file_put_contents('file.txt', implode("\n", $array), FILE_APPEND); // Записываем

Спустя 6 минут, 31 секунда (4.01.2012 - 02:12) Frost-56 написал(а):
Winston запись повторяющихся ников ведется по прежнему =(

Спустя 2 минуты, 10 секунд (4.01.2012 - 02:14) killer8080 написал(а):
Winston
или так
file_put_contents("file.txt", implode("\n", array_unique(array_merge($match[1], file("file.txt")))));

Спустя 2 минуты, 45 секунд (4.01.2012 - 02:17) Frost-56 написал(а):
killer8080 ошибку выкидывает

Спустя 1 минута, 43 секунды (4.01.2012 - 02:18) Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:17)
killer8080 ошибку выкидывает

Какую ?

Спустя 18 секунд (4.01.2012 - 02:19) killer8080 написал(а):
Frost-56
исправь так, как сейчас. Я там скобку в конце одну пропустил. rolleyes.gif

Спустя 2 минуты, 17 секунд (4.01.2012 - 02:21) Frost-56 написал(а):
Цитата (killer8080 @ 4.01.2012 - 04:19)
Frost-56
исправь так, как сейчас. Я там скобку в конце одну пропустил. rolleyes.gif

заработал, но все равно продолжает дописывать одинаковые ники.

Спустя 1 минута, 5 секунд (4.01.2012 - 02:22) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:21)
заработал, но все равно продолжает дописывать одинаковые ники.

Да ну blink.gif
Покажи код целиком.

Спустя 31 секунда (4.01.2012 - 02:22) Frost-56 написал(а):
<?php
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=40000");

if (preg_match_all('#<a.*href="/profile.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match))
{
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
file_put_contents("text.txt", implode("\n", array_unique(array_merge($match[1], file("text.txt")))));
}
else
{
echo 'Страница не найдена';
}
?>

Спустя 3 секунды (4.01.2012 - 02:23) inpost написал(а):
Frost-56
То есть тебе надо проверить, есть ли в файле ник, и если есть - не дописывать?

Спустя 34 секунды (4.01.2012 - 02:23) Frost-56 написал(а):
inpost, верно.

Спустя 1 минута, 39 секунд (4.01.2012 - 02:25) inpost написал(а):
Вообще логины хранить надо в БД, а не на файлах. Потому что на файлах - геморой.

Спустя 2 минуты, 3 секунды (4.01.2012 - 02:27) Frost-56 написал(а):
Да не подумал что то сразу.
Если другого варианта не получится, придется через бд делать.

Спустя 1 минута, 22 секунды (4.01.2012 - 02:28) inpost написал(а):
Ещё не поздно. Не изобретай велосипед. БД существуют для того, чтобы облегчить работу такую, как у тебя. + БД - это и есть хранение данных на файлах, но в миллионы раз удобнее. Так что на твоём уровне лучше сразу выбрать правильный путь, а не загонять себя в яму.

Спустя 3 минуты, 21 секунда (4.01.2012 - 02:32) killer8080 написал(а):
Frost-56
исправил
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=40000");

if (preg_match_all('#<a.*href="/profile.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match))
{
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
file_put_contents("text.txt", implode("\n", array_unique(array_merge($match[1], file("text.txt", FILE_IGNORE_NEW_LINES)))));
}
else
{
echo 'Страница не найдена';
}


Но inpost конечно дело говорит, на счет БД

Спустя 1 минута, 44 секунды (4.01.2012 - 02:33) Frost-56 написал(а):
killer8080, спасибо большое

Спустя 5 минут, 9 секунд (4.01.2012 - 02:38) Frost-56 написал(а):
А как быть ещё с 2 вопросами ?

Цитата
echo sizeof($match[1]);


Это значит сделать так ?

$per = sizeof($match[1]);

if ($per == 60)
{ ... } else { ... }


Верно ?


Цитата
$i = 12000;
$i += 40;


А это не катит, мне надо чтобы в сам файл где переменная $i вносились изменения.
Т.к. я один раз использую скрипт, мне надо будет при следующем использовании уже делать

$i = 12040;
$i += 40;

и так много раз, каждый раз изменять вручную не вариант.

Спустя 2 минуты, 39 секунд (4.01.2012 - 02:41) inpost написал(а):
Frost-56
Вопросы заново повтори.

Спустя 1 минута, 9 секунд (4.01.2012 - 02:42) Frost-56 написал(а):
Цитата
Как сделать проверку на количество найденных ников ?
думал сделать типа:

if ($match[1] == str(60))
{ ... } else { ... }


второй вопрос по циклам:

$i = '12000';
как приплюсовать число допустим 40 к 12000 так чтобы в переменной $i число изменилось на 12040 ?


Спустя 9 секунд (4.01.2012 - 02:42) Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:38)
Верно ?

Ну можно же было проверить smile.gif
Да верно.




Спустя 34 секунды Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:38)
Т.к. я один раз использую скрипт, мне надо будет при следующем использовании уже делать

Может сессии ?

Спустя 1 минута, 9 секунд (4.01.2012 - 02:43) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:38)
А это не катит, мне надо чтобы в сам файл где переменная $i вносились изменения.
Т.к. я один раз использую скрипт, мне надо будет при следующем использовании уже делать

$i = 12040;
$i += 40;

вообще не понял, что ты пытаешься сделать?

Спустя 17 секунд (4.01.2012 - 02:44) inpost написал(а):
Frost-56
$i = $i + 40;

Спустя 1 минута, 29 секунд (4.01.2012 - 02:45) Frost-56 написал(а):
Winston можно и сессиями, только я не работал ещё с ними unsure.gif

Спустя 3 минуты, 23 секунды (4.01.2012 - 02:49) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:45)
Winston можно и сессиями, только я не работал ещё с ними

А что там с ними работать то? В начале скрипта session_start(), а потом работаешь с массивом $_SESSION.

Спустя 24 минуты, 2 секунды (4.01.2012 - 03:13) Frost-56 написал(а):
Вообщем щас почитал мануалы, ток я что то неправильно делаю.

Вот как бы то что у меня получилось:
<?php
session_start();
$_SESSION['id'] = "44160";
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=$_SESSION['id']");

$_SESSION['id'] += 80;

unset($_SESSION['id']);
session_destroy();

?>


или не надо убивать сессию в конце ?

Спустя 1 минута, 8 секунд (4.01.2012 - 03:14) inpost написал(а):
Frost-56
Убить - это её очистить. А зачем?

Спустя 2 минуты, 24 секунды (4.01.2012 - 03:16) Frost-56 написал(а):
Так, ага, спс, а выгружать тоже не надо
unset($_SESSION['id']);
?

На данный момент такой код:

session_start();
$_SESSION['id'] = "44160";
$id = $_SESSION['id'];
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=$id");

$id += 80;


но он почему то не работает =(

Спустя 11 часов, 51 минута, 17 секунд (4.01.2012 - 15:07) Frost-56 написал(а):
Поможет кто ?

Спустя 15 минут, 47 секунд (4.01.2012 - 15:23) Winston написал(а):
А так?
$_SESSION['id'] += 40;

Спустя 5 минут, 44 секунды (4.01.2012 - 15:29) killer8080 написал(а):
Frost-56
тогда уж как то так
session_start();
if(!isset($_SESSION['id']))
$_SESSION['id'] = "44160";

$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=$_SESSION['id']");

$_SESSION['id'] += 80;

Спустя 1 минута, 9 секунд (4.01.2012 - 15:30) Frost-56 написал(а):
Так нельзя, ошибку будет если $_SESSION['id'] будет в ссылке, поэтому переменной делал

Спустя 12 минут, 10 секунд (4.01.2012 - 15:42) Winston написал(а):
Цитата (Frost-56 @ 4.01.2012 - 14:30)
Так нельзя, ошибку будет если $_SESSION['id'] будет в ссылке, поэтому переменной делал

Ну дык так напиши
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start="  . $_SESSION['id']);

Или так
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start={$_SESSION['id']}");

Спустя 13 минут, 58 секунд (4.01.2012 - 15:56) Frost-56 написал(а):
спс, но не пойму где ошибка.

Выводит пустой экран после того как сделал if ($per >= 80) если сделать if ($per == 60) То работает.


вот весь код:

<?php
session_start();
if(!isset($_SESSION['id']))
$_SESSION['id'] = "44000";
$content = file_get_contents("http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start={$_SESSION['id']}");

if (preg_match_all('#<a.*href="/profile.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match))
{
$per = sizeof($match[1]);
if ($per >= 80)
{
$_SESSION['id'] += 80;
}
else
{
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';
file_put_contents("text.txt", implode("\n", array_unique(array_merge($match[1], file("text.txt", FILE_IGNORE_NEW_LINES)))));
}
}

else
{
echo 'Страница не найдена';
}
?>

Спустя 2 минуты, 50 секунд (4.01.2012 - 15:59) Winston написал(а):
А какое число находится в $per?
Напиши echo $per;

Спустя 5 минут, 7 секунд (4.01.2012 - 16:04) Frost-56 написал(а):
80 пишет

Спустя 8 минут, 20 секунд (4.01.2012 - 16:13) killer8080 написал(а):
Frost-56
для начала зайди сюда, и почитай о стиле кодирования. Твой код, с фигурными скобками в один столбик, совершенно не читабельный. Представь что будет когда начнешь писать код на порядок сложнее? Чтобы легче было искать ошибки, да и вообще читать код, нужно сразу учится хорошему стилю smile.gif

Спустя 3 минуты, 1 секунда (4.01.2012 - 16:16) Winston написал(а):
Цитата (killer8080 @ 4.01.2012 - 15:13)
Твой код, с фигурными скобками в один столбик, совершенно не читабельный

Табуляторы... smile.gif

Спустя 18 минут, 44 секунды (4.01.2012 - 16:34) Frost-56 написал(а):
Изменил код как смог, а теперь вы можете помочь мне с проблемой ?

Спустя 8 минут, 28 секунд (4.01.2012 - 16:43) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 14:56)
Выводит пустой экран после того как сделал if ($per >= 80) если сделать if ($per == 60) То работает.

Ну а чего ты ждал? Внимательно посмотри на свой код.
    if ($per >= 80) {
$_SESSION['id'] += 80;
} else {
echo '<pre>' . htmlspecialchars(print_r($match, 1)) . '</pre>';
file_put_contents("text.txt", implode("\n", array_unique(array_merge($match[1],
file("text.txt", FILE_IGNORE_NEW_LINES)))));
}

У тебя выполняется условие, при этом происходит инкремент переменной, и всё. Запрос будет выполнен, только если не выполнено условие. Какой смысл в этом коде?

Спустя 23 минуты, 8 секунд (4.01.2012 - 17:06) Frost-56 написал(а):
Смысл в том что, если количество записей больше или равно 80 мы добавляем в переменную ещё +80 и страница запроса меняется, а если не больше или не равно количество записей 80 то выполняем выдираем ники и делаем запись в файл.

только до сих пор не могу понять что не так с кодом, вроде правильно написано.

Спустя 8 минут, 3 секунды (4.01.2012 - 17:14) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 16:06)
только до сих пор не могу понять что не так с кодом, вроде правильно написано.

да все не правильно. Зачем тебе нужна сессия в этой задаче? Ты же хочешь просто сграбить все ники? Или что?

Спустя 9 минут, 19 секунд (4.01.2012 - 17:23) Frost-56 написал(а):
да чтобы он грабил постоянно ники, скрипт будет запускаться сам через некоторое время и грабить постоянно, например раз в сутки, поэтому другого варианта не вижу.

Спустя 4 минуты, 9 секунд (4.01.2012 - 17:27) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 16:23)
да чтобы он грабил постоянно ники, скрипт будет запускаться сам через некоторое время и грабить постоянно, например раз в сутки, поэтому другого варианта не вижу.

А что мешает сграбить их все за один раз?

Спустя 1 минута, 31 секунда (4.01.2012 - 17:29) Frost-56 написал(а):
Цитата
А что мешает сграбить их все за один раз?


новые ники на этом сайте часто добавляются и мне надо грабить их сразу как они появились.

Спустя 8 минут, 10 секунд (4.01.2012 - 17:37) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 16:29)
новые ники на этом сайте часто добавляются и мне надо грабить их сразу как они появились.

Ну так +80 ты делаешь для выбора следующей страницы? Не лучше ли сразу одним заходом прочитать все страницы с никами? К тому же сессии тебе не помогут, если скрипт запускать кроном wink.gif

Спустя 4 минуты, 44 секунды (4.01.2012 - 17:42) Frost-56 написал(а):
Цитата
Не лучше ли сразу одним заходом прочитать все страницы с никами?


Как вы предлагаете это сделать ? (мне нужны ники только с последних 3х страниц для начала, а потом ловить новые ники и просто добавлять их).
Ведь надо сделать чтобы он постоянно драл ники.

Спустя 9 минут, 29 секунд (4.01.2012 - 17:51) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 16:42)
Как вы предлагаете это сделать ?

Читать страницы циклом, все что есть. В первый раз.
Последующие читаешь кроном раз в день. Уже только последнюю страницу.

Спустя 1 минута, 50 секунд (4.01.2012 - 17:53) Frost-56 написал(а):
Так я и хочу так.
Последняя страница будет читаться до тех пор пока не будет 80 ников, а как будет 80 будет переход на другую страницу и и начнем копировать её пока не соберется опять 80 ников

Спустя 9 минут, 4 секунды (4.01.2012 - 18:02) killer8080 написал(а):
Frost-56
накидал вариант, попробуй
set_time_limit(0);
$url = 'http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=';
$i = 0;
while(1){
$content = file_get_contents($url . $i);
if(preg_match_all('#<a.*href="/profile\.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match)){
file_put_contents(
"text.txt",
implode("\n",
array_unique(
array_merge(
file("text.txt", FILE_IGNORE_NEW_LINES),
$match[1]
)
)
)
);

$i += 80;
}
else
break
;

}

Спустя 31 минута, 28 секунд (4.01.2012 - 18:34) Frost-56 написал(а):
Спасибо, отличный рабочий скрипт.
Только он копирует все ники самого начала, в результате чего слишком большой файл и долго идет обработка, а мне бы просто с 3й страницы с конца начать.

И можно ли будет запускать этот скрипт кроном ?

Спустя 18 минут, 53 секунды (4.01.2012 - 18:53) inpost написал(а):
Frost-56
"долго", вот поэтому и используют БД.

Спустя 1 час, 52 минуты, 19 секунд (4.01.2012 - 20:45) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 17:34)
И можно ли будет запускать этот скрипт кроном ?

В отличие от твоих попыток с сессиями, можно. Скрипт ни к чему не привязан, и может без проблем работать в CLI режиме.
Цитата (Frost-56 @ 4.01.2012 - 17:34)
Только он копирует все ники самого начала, в результате чего слишком большой файл и долго идет обработка, а мне бы просто с 3й страницы с конца начать.

А что нужны были не все? Ну подставь в $i в начале не 0, а число соответствующее 3 странице с конца, делов то. wink.gif
Можно пойти дальше, и отлавливать офсет из ссылки на последнюю страницу, в пагинации. Тогда вместо слепого перебора в цикле while, можно будет использовать цикл for, проще будет отлавливать последние 3 страницы.

Спустя 2 часа, 30 минут, 49 секунд (4.01.2012 - 23:16) Frost-56 написал(а):
Цитата
Ну подставь в $i в начале не 0, а число соответствующее 3 странице с конца, делов то


число равное 3й странице 44000, поставил.
В итоге, он начал копировать хрен пойми откуда (с 300+ страницы) и дошел до 502 bad getway. sad.gif

Спустя 4 минуты, 47 секунд (4.01.2012 - 23:21) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 22:16)
число равное 3й странице 44000, поставил.

третьей странице с конца соответствует число 44080, это 552 страница. Хочешь сказать он начал копировать с 300-х?
Цитата (Frost-56 @ 4.01.2012 - 22:16)
и дошел до 502 bad getway.

А как ты об этом узнал? Покажи код.

Спустя 1 минута, 40 секунд (4.01.2012 - 23:22) Frost-56 написал(а):
страница запуска скрипта: http://krirminala.net/ru/memb.php
файл для получения данных: http://krirminala.net/ru/text.txt (очистил)

Код:

<?php
set_time_limit(0);
$url = 'http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=';
$i = 44000;
while(1){
$content = file_get_contents($url . $i);
if(preg_match_all('#<a.*href="/profile\.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match)){
file_put_contents(
"text.txt",
implode("\n",
array_unique(
array_merge(
file("text.txt", FILE_IGNORE_NEW_LINES),
$match[1]
)
)
)
);

$i += 80;
}
else
break
;

}
?>

Спустя 17 минут, 11 секунд (4.01.2012 - 23:39) killer8080 написал(а):
Frost-56
проверил, работает!
Единственное ругается в начале из-за попытки открыть не существующий файл, исправил
set_time_limit(0);
$url = 'http://forum.kriminala.net/memberlist.php?mode=joined&order=ASC&start=';
$i = 44000;
if(!file_exists("text.txt"))
file_put_contents("text.txt", '');
while(1){
$content = file_get_contents($url . $i);
if(preg_match_all('#<a.*href="/profile\.php\?mode=viewprofile.*>(.*)</a>#isU', $content, $match)){
file_put_contents(
"text.txt",
implode("\n",
array_unique(
array_merge(
file("text.txt", FILE_IGNORE_NEW_LINES),
$match[1]
)
)
)
);

$i += 80;
}
else
break
;

}

Спустя 4 минуты, 24 секунды (4.01.2012 - 23:44) Frost-56 написал(а):
круто, огромное Вам спасибо cool.gif

посталю + как пройдет это
Цитата
Вы в недавнее время уже меняли репутацию этого пользователя.
До следующего изменения должно пройти 1 дней

Спустя 17 минут, 51 секунда (5.01.2012 - 00:02) Frost-56 написал(а):
Ещё вопрос по cron.
Я пользуюсь услугами известного хостинга. Как мне настроить запуск через cron своего скрипта, ведь доступа к серверу я не имею. Или есть какие то альтернативные варианты запуска скрипта в определенное время без участия пользователя ?

Спустя 3 минуты, 40 секунд (5.01.2012 - 00:05) killer8080 написал(а):
Frost-56
на всех платных хостингах есть крон, возможно и на многих бесплатных. Обычно он доступен через панель управления хостингом, если конечно, не предоставляется SSH доступ. В крайнем случае можно обратится в саппорт хостера. smile.gif

Спустя 15 минут, 41 секунда (5.01.2012 - 00:21) Frost-56 написал(а):
Использую только платные, имхо более устойчивые, функциональные и надежные.
Нашел там эту ф-цию, ещё раз спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.