Есть файлик 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 ?
там может быть любая ссылка просто и она мне не нужна.
И ещё, правильно ли я отметил то что в теге 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);
перед звездочкой надо воткнуть точку ? (.*)
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 ( ) )" а мне надо чтобы выводило только ник (в этом случае имя фамилия).
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) и давай что выведется на экран сюда.
Чет явно не так. Сделай 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 написал(а):
И что предлагаете сделать ? 
Ведь очень много сайтов на cp1251 стоят.
он выводит это: http://krirminala.net/ru/memb.php (тут скрипт)

Ведь очень много сайтов на cp1251 стоят.
он выводит это: http://krirminala.net/ru/memb.php (тут скрипт)
Спустя 24 минуты, 38 секунд (3.01.2012 - 19:42) inpost написал(а):
m4a1fox
если разные, то переводить надо.
Frost-56
Попробуй сделать поиск более простой, сначало href="(.*)" с модификаторами isU
если разные, то переводить надо.
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
Патерн поиска: 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] у тебя и есть только ники

Спустя 1 минута, 47 секунд (3.01.2012 - 20:33) inpost написал(а):
В чём дело?
Обращайся напрямую к $match[1];
Обращайся напрямую к $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) |
а в текстовик ничего не записалось. |
А ты свое имя файла подставил ?

Цитата (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 написал(а):


Спасибо большое за помощь.
Спустя 3 часа, 21 минута, 19 секунд (4.01.2012 - 01:25) Frost-56 написал(а):
Ещё 3 вопросика образовалось.
Как сделать проверку на количество найденных ников ?
думал сделать типа:
if ($match[1] == str(60))
{ ... } else { ... }
второй вопрос по циклам:
$i = '12000';
как приплюсовать число допустим 40 к 12000 так чтобы в переменной $i число изменилось на 12040 ?
И последний вопрос :
Как сделать так чтобы ники которые уже есть, не записывались ?
Как сделать проверку на количество найденных ников ?
думал сделать типа:
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
исправь так, как сейчас. Я там скобку в конце одну пропустил.
исправь так, как сейчас. Я там скобку в конце одну пропустил.

Спустя 2 минуты, 17 секунд (4.01.2012 - 02:21) Frost-56 написал(а):
Цитата (killer8080 @ 4.01.2012 - 04:19) |
Frost-56 исправь так, как сейчас. Я там скобку в конце одну пропустил. ![]() |
заработал, но все равно продолжает дописывать одинаковые ники.
Спустя 1 минута, 5 секунд (4.01.2012 - 02:22) killer8080 написал(а):
Цитата (Frost-56 @ 4.01.2012 - 01:21) |
заработал, но все равно продолжает дописывать одинаковые ники. |
Да ну

Покажи код целиком.
Спустя 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
исправил
Но inpost конечно дело говорит, на счет БД
исправил
$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) |
Верно ? |
Ну можно же было проверить

Да верно.
Спустя 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 можно и сессиями, только я не работал ещё с ними

Спустя 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) То работает.
вот весь код:
Выводит пустой экран после того как сделал 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;
Напиши echo $per;
Спустя 5 минут, 7 секунд (4.01.2012 - 16:04) Frost-56 написал(а):
80 пишет
Спустя 8 минут, 20 секунд (4.01.2012 - 16:13) killer8080 написал(а):
Frost-56
для начала зайди сюда, и почитай о стиле кодирования. Твой код, с фигурными скобками в один столбик, совершенно не читабельный. Представь что будет когда начнешь писать код на порядок сложнее? Чтобы легче было искать ошибки, да и вообще читать код, нужно сразу учится хорошему стилю
для начала зайди сюда, и почитай о стиле кодирования. Твой код, с фигурными скобками в один столбик, совершенно не читабельный. Представь что будет когда начнешь писать код на порядок сложнее? Чтобы легче было искать ошибки, да и вообще читать код, нужно сразу учится хорошему стилю

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

Спустя 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 ты делаешь для выбора следующей страницы? Не лучше ли сразу одним заходом прочитать все страницы с никами? К тому же сессии тебе не помогут, если скрипт запускать кроном

Спустя 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 ников
Последняя страница будет читаться до тех пор пока не будет 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й страницы с конца начать.
И можно ли будет запускать этот скрипт кроном ?
Только он копирует все ники самого начала, в результате чего слишком большой файл и долго идет обработка, а мне бы просто с 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 странице с конца, делов то.

Можно пойти дальше, и отлавливать офсет из ссылки на последнюю страницу, в пагинации. Тогда вместо слепого перебора в цикле while, можно будет использовать цикл for, проще будет отлавливать последние 3 страницы.
Спустя 2 часа, 30 минут, 49 секунд (4.01.2012 - 23:16) Frost-56 написал(а):
Цитата |
Ну подставь в $i в начале не 0, а число соответствующее 3 странице с конца, делов то |
число равное 3й странице 44000, поставил.
В итоге, он начал копировать хрен пойми откуда (с 300+ страницы) и дошел до 502 bad getway.

Спустя 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 (очистил)
Код:
файл для получения данных: 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 написал(а):
круто, огромное Вам спасибо 
посталю + как пройдет это

посталю + как пройдет это
Цитата |
Вы в недавнее время уже меняли репутацию этого пользователя. До следующего изменения должно пройти 1 дней |
Спустя 17 минут, 51 секунда (5.01.2012 - 00:02) Frost-56 написал(а):
Ещё вопрос по cron.
Я пользуюсь услугами известного хостинга. Как мне настроить запуск через cron своего скрипта, ведь доступа к серверу я не имею. Или есть какие то альтернативные варианты запуска скрипта в определенное время без участия пользователя ?
Я пользуюсь услугами известного хостинга. Как мне настроить запуск через cron своего скрипта, ведь доступа к серверу я не имею. Или есть какие то альтернативные варианты запуска скрипта в определенное время без участия пользователя ?
Спустя 3 минуты, 40 секунд (5.01.2012 - 00:05) killer8080 написал(а):
Frost-56
на всех платных хостингах есть крон, возможно и на многих бесплатных. Обычно он доступен через панель управления хостингом, если конечно, не предоставляется SSH доступ. В крайнем случае можно обратится в саппорт хостера.
на всех платных хостингах есть крон, возможно и на многих бесплатных. Обычно он доступен через панель управления хостингом, если конечно, не предоставляется SSH доступ. В крайнем случае можно обратится в саппорт хостера.

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