скрипт любой сложности

[Удален]
#31

<?php
ignore_user_abort ( '1' );
set_time_limit ( '0' );

function fetch_remote_file( $url ) {
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0';
@ini_set ( 'allow_url_fopen', '1' );
@ini_set ( 'default_socket_timeout', '5' );
@ini_set ( 'user_agent', $user_agent );
if ( function_exists ( 'curl_init' ) ) {
if ( $ch = curl_init ( ) ) {
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HEADER, false );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, '5' );
curl_setopt ( $ch, CURLOPT_USERAGENT, $user_agent );
if ( $data = curl_exec ( $ch ) ) {
curl_close ( $ch );
return $data;
}
}
}
return false;
}
$base = fetch_remote_file ( 'http://rdf.dmoz.org/rdf/content.example.txt' );
preg_match_all ( '|<link r:resource="http://(.*)/(.*)"/>|Usi', $base, $array );
$array [ ] = array_unique ( $array [ '1' ] );
$count = count ( $array [ '3' ] ) - '1';
for ( $i = '0'; $i <= $count; $i ++ ) {
if ( isset ( $array [ '3' ] [ $i ] ) ) echo preg_replace ( array ( '|(.*):(.*)|si', '|www.|si' ), '$1', $array [ '3' ] [ $i ] ) . '<br>';
}
?>

написал быстренько, не пробовал с большой базой, не дождался когда сольется )))) потому не могу сказать как работает, проверил на примере )

[Удален]
#32

KosoyRoman, там на 2гб файлег)))

dkameleon
На сайте с 09.12.2005
Offline
386
#33
KosoyRoman:
потому не могу сказать как работает

в том то и оно ;)

что работает с мелким файлом - не всегда сработает и с большим.

и почему <link r:resource=, если их как раз не надо?

вообще, чтоб не грузить инет-канал, лучше считать, что файл уже скачан и лежит в папке со скриптом.

Дизайн интерьера (http://balabukha.com/)
bojo
На сайте с 25.02.2008
Offline
72
#34
dkameleon:

таким образом вы выберете всё подряд :)
кстати, некоторые хосты там с портами, некоторые просто айпишки.

Да будут выбраны все доменные имена, что в этом плохого? =) В выдаче будут только уникальные имена доменов, без дублекатов, если необходимо отсеч номер порта, не проблема, команда станет сложнее ровно на один символ. Там где IP, выведет IP.

dkameleon:
что с потреблением ресурсов у данного метода? :) время/диск/процессор.

А Вы измерьте =) Если не часто запускать то вполне терпимо, при условии что команда уложилась в одну строчку.

2KosoyRoman

В каком месте бред?

Кстати, в твоем коде, зачем проверять на существование curl_init, если код вызываюший fetch_remote_file наивно пологает, что возвращается всегда именно содержимое файла.

Вот это:


$array [] = array_unique ( $array [ '1' ] );
$count = count ( $array [ '3' ] ) - '1';
for ( $i = '0'; $i <= $count; $i ++ ) {
if ( isset ( $array [ '3' ] [ $i ] ) ) echo preg_replace ( array ( '|(.*):(.*)|si', '|www.|si' ), '$1', $array [ '3' ] [ $i ] ) . '<br>';
}

сворачивается к одной строчке цикла foreach или ты тоже свои творения отцениваешь по размеру строк кода? Ну и не рационально матчить то, что не используешь, темболее на таких объемах входных данных, вобщем код на троечку.

xzorro
На сайте с 20.04.2009
Offline
7
#35

dkameleon, здается мне поблочное чтение надо делать -fopen fgets fseek и полученные кусочки обрабатывать. Проблема нехватки памяти по крайней мере будет решена :)

bearman, интерестно было бы ваше решение задачки dkameleon увидеть

[Удален]
#36
xzorro:
dkameleon, здается мне поблочное чтение надо делать -fopen fgets fseek и полученные кусочки обрабатывать. Проблема нехватки памяти по крайней мере будет решена :)

bearman, интерестно было бы ваше решение задачки dkameleon увидеть

100% решал бы не на пхп. думаю что на авк ли подобных языках.

bojo
На сайте с 25.02.2008
Offline
72
#37
bearman:
100% решал бы не на пхп. думаю что на авк ли подобных языках.

Да чего тут решать то, тупа домены выдрать из файла, напиши уже скорее свой вариант на awk =)

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#38

Так по чём 1000 символов?

Неизменность точки зрения неизменно порождает иллюзию понимания.
[Удален]
#39

все готовы проиграть? :)

motango:~/tests# time awk -f script.awk content.rdf.u8 | sort -u > domains

real 1m12.102s
user 1m7.904s
sys 0m1.712s

http://helldude.ru/trash/domains

bearman добавил 07.05.2009 в 00:43

bearman:
все готовы проиграть? :)



http://helldude.ru/trash/domains

38 секунд выборка, остальное время - сортировка ....

dkameleon
На сайте с 09.12.2005
Offline
386
#40
bearman:
все готовы проиграть?

поздравляю :)) теперь у вас будут клиенты на авк :)))

ПС. белая страничка впечатлила ;)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий