<?php
include_once('simple_html_dom.php');
$url = 'xlpharmacy.com';
$keyword = file ('keys/keywords.txt');
foreach ($keyword as $key) {
$key = trim ($key);
$query = preg_replace ('/ /','/\+/',$key);
$pagenum = array (0);
$positions = array();
foreach ($pagenum as $pagenum_ex) {
$content = file_get_html("http://www.google.com/search?q=".$query."&num=100&hl=en&lr=&as_qdr=all&start=".$pagenum_ex."&sa=N");
preg_match_all("|<h3 class=\"r\"><a href=\"([^\"].*)\".*class=l>(.*)<\/a><\/h3><div class=\"s\">(.*)<br>|isU", $content, $data);
for ($i=0;$i<101; $i++) {
$data_ex = $data [0][$i];
$data_ex = preg_match ("/a href=\"([^\"].*)\".*class=l/isU", $data_ex, $links);
//echo $links[1]." ".$i."<br>";
$positions[] = $links[1];
}
}
foreach($positions as $pos=>$link){
$pattern = "/".$url."/";
$site = preg_match ($pattern, $link, $match);
if($url == $match[0]){
$pos+=1;
echo "<table border=1><tr><td>".$key."</td><td>".$pos."</td></tr></table>";
}
}
flush ();
}
?>
После 25-й итерации выдает фатал еррор:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16 bytes) in /home/user/domains/url.com/public_html/path/to/script/simple_html_dom.php on line 847
Подскажите что-нибудь для решения проблемы плиз.
P.S. Скрипт использует PHP Simple HTML DOM Parser
Спустя 41 минута, 59 секунд (2.07.2010 - 16:55) linker написал(а):
Первое что на ум пришло, открывайте и читайте построчно из файла, так сэкономите кучу места на массиве $keyword
Спустя 13 минут, 49 секунд (2.07.2010 - 17:09) Rombl4 написал(а):
Ну мне кажется массив $keyword тут мало роли играет, т.к. ресурсоемкие операции начинаются при парсинге страниц гугла с сотней результатов.
Спустя 17 минут, 28 секунд (2.07.2010 - 17:26) tomash написал(а):
Rombl4
попробуйте $content как-то по частям скармливать, что-ли
попробуйте $content как-то по частям скармливать, что-ли
Спустя 52 минуты, 35 секунд (2.07.2010 - 18:19) Rombl4 написал(а):
Цитата |
попробуйте $content как-то по частям скармливать, что-ли |
Даже не представляю как это сделать. Да и в $content 100 Кб в среднем подгружается, не думаю что это так много.
Спустя 38 минут, 39 секунд (2.07.2010 - 18:57) kirik написал(а):
Еще flush (); в конце подразумевает то, что вы все складываете в буфер для каждого кейворда - зачем?
Цитата (Rombl4 @ 2.07.2010 - 08:13) |
P.S. Скрипт использует PHP Simple HTML DOM Parser |
Не заметно, что используется Скажите, зачем вы используете file_get_html, когда потом все равно разбираете результат регулярками?
Спустя 30 минут, 29 секунд (2.07.2010 - 19:28) Rombl4 написал(а):
Цитата |
Еще flush (); в конце подразумевает то, что вы все складываете в буфер для каждого кейворда - зачем? |
Чтоб результаты сразу выводились на экран.
Цитата |
Не заметно, что используется smile.gif Скажите, зачем вы используете file_get_html, когда потом все равно разбираете результат регулярками? |
Пробовал через file_get_contents и курл разобрать регуляркой гугловую выдачу, ничего не получалось. Она выдается ява-скриптом. А file_get_html приводит страницу к нормальному виду, оставляет только хтмл, и разобрать не составляет труда.
Вообще это мой 5-й в жизни скрипт, поэтому сделано через одно место. Но фактически он меня устраивает, т.к. работает быстро, и гугл пока не банил, хоть я к нему запросов достаточно много делал. Вот правда не устраивает фатал еррор )
Спустя 3 часа, 6 минут, 43 секунды (2.07.2010 - 22:34) linker написал(а):
И всетаки читайте файл keywords.txt построчно, вам всего-то 16 байт памяти не хватает.
Спустя 2 дня, 6 часов, 27 минут, 6 секунд (5.07.2010 - 05:02) kirik написал(а):
Цитата (linker @ 2.07.2010 - 14:34) |
Пробовал через file_get_contents и курл разобрать регуляркой гугловую выдачу, ничего не получалось. Она выдается ява-скриптом. |
Неа.. Она выдается обычным html.