Архив за Февраль, 2009

Многопоточность

Posted in Статьи on Февраль 24th, 2009 by admin – 1 Comment

Многопоточность на PHP

В статье описана организация мультизапросов средствами PHP с использованием библиотеки cURL. Данный механизм предполагается использовать для создания скриптов, осуществляющих автоматизированные запросы ко множеству веб-серверов.

В своей практике веб-мастерам часто приходится использовать программных роботов, осуществляющих регулярный или массовый запрос веб-страниц, заполениние регистрационных форм или выполняющих другие подобные действия. Традиционно и вполне оправданно для этой цели используется язык PHP и библиотека cURL, которая установлена практически на всех веб-серверах. Библиотека cURL, по сути, является наложением на сокеты и представляет из себя лишь удобный в использовании сервис по формированию http-запроса в зависимости от заданных параметров программиста.

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

Прежде чем начать описывать механизм разработки скриптов сначала о том, что же я подразумеваю под многопоточностью. Дело тут в том, что ни какой многопоточности в PHP на самом деле нет и когда употребляется термин «многопоточность» касательно библиотеки cURL, то речь идет о мультизапросах.

Механизм мультизапросов заключается в том, что во время посылки запросов веб-серверам, PHP не дожидается ответа от каждого поочередно посланного запроса, а посылает (опять же поочередно) сразу несколько запросов, и уже после этого обрабатывает приходящие от них ответы. Поэтому применять многопоточность имеет смысл только тогда, когда осуществляются запросы к разным серверам – если необходимо осуществить большое количество запросов к одному серверу, то многопоточность не принесет заметного увеличения производительности скрипта.

Сразу хочу заметить, что средства работы с многопоточностью в cURL весьма скудные, но даже с теми что есть можно организовать полноценную работу с мультизапросами.

Итак, теперь о практике… Рассмотрим пример, когда нужно загрузить большое количество веб-страниц, чтобы, например, проверить наличие на них кода обратной ссылки. Для этого понадобится следующее:

1. Список всех URI помещаем в массив
2. Создаем массив «обычных» cURL в требуемом количестве (количество потоков) и один cURL_multi
3. Инициализируем каждый созданный cURL (URL из подготовленного ранее массива, переменные post, если требуется, прокси и т.д.)
4. Добавляем каждый cURL в cURL_multi
5. Запускаем все потоки при помощи вызова cURL_multi
6. В цикле опрашиваем состояние cURL_multi и если есть отработавший поток, обрабатываем полученную страницу и на его место запускаем новый cURL. Если список URI закончился, то только обрабатываем результат. Цикл продолжается до тех пор, пока есть хотя бы один незавершенный поток.
7. Закрываем все cURL.

Теперь, собственно, скрипт который выполняет данную операцию:

  1. <?php
  2. function Parse(&amp;$urls,$flowcount) {
  3.   // $urls - массив с URL-адресами
  4.   // $flowcount - количество потоков
  5. //Запуск потоков
  6.   $ch=array();
  7.   $lcount0=count($urls);
  8.   if($flowcount>$lcount0) $flowcount=$lcount0;
  9.   for($flow=0;$flow<$flowcount;$flow++) $ch[]=curl_ini(array_pop($urls)); //создание массива cURL
  10.   $mh=curl_multi_init(); //создание cURL_multi
  11.   for($flow=0;$flow<$flowcount;$flow++) { //В этом цикле инициализируются cURL
  12.     curl_setopt($ch[$flow],CURLOPT_REFERER,‘TESTREFERER’);
  13.     curl_setopt($ch[$flow],CURLOPT_USERAGENT,);
  14.     curl_setopt($ch[$flow],CURLOPT_RETURNTRANSFER,1);
  15.     curl_setopt($ch[$flow],CURLOPT_POST,1);
  16.     curl_setopt($ch[$flow],CURLOPT_POSTFIELDS,‘TEST=TESTVAR’);
  17.     curl_setopt($ch[$flow],CURLOPT_COOKIE,‘TEST=TESTCOOKIE’);
  18.     curl_multi_add_handle($mh,$ch[$flow]);
  19.   }
  20.   $flows=null;
  21.   do { //Основной цикл, продолжается до тех пор, пока есть хотябы один работающий поток
  22.     do curl_multi_exec($mh,$flows); while($flows==$flowcount); //циклическая проверка количества работающих потоков
  23.     $info=curl_multi_info_read($mh);
  24.     if(!count($urls)) { //Больше нет URL для обработки
  25.       $res=curl_multi_getcontent($info[‘handle’]);
  26.       curl_multi_remove_handle($mh,$info[‘handle’]);
  27.       curl_close($info[‘handle’]);
  28.       $flowcount–;
  29.     } else { //Есть еще URL для обработки
  30.       curl_setopt($info[‘handle’],CURLOPT_URL,array_pop($urls));
  31.       $res=curl_multi_getcontent($info[‘handle’]);
  32.       curl_multi_remove_handle($mh,$info[‘handle’]);
  33.       curl_multi_add_handle($mh,$info[‘handle’]);
  34.       curl_multi_exec($mh,$flows);
  35.     }
  36.     //Анализ результатов
  37.     $err=AnalizePage($res);
  38.     if($err) die(‘Некая ошибка!’);
  39.   } while($flows>0);
  40.   curl_multi_close($mh);
  41. }
  42. ?>

В тексте кода достаточно комментариев, чтобы разобраться что происходит. Поясню несколько моментов…

1. Вызов curl_multi_init должен быть осуществлен ОБЯЗАТЕЛЬНО после того, как все “обычные” cURL будут проинициализированы, т.е. нельзя поменять 9ю и 10ю строки местами, поэтому участки кода по инициализации $ch[] и задания необходимых параметров разделены.

2. При каждом вызове curl_multi_exec в строке 22 в переменную $flows помещается количество активных потоков, которое далее сравнивается с количеством запущенных потоков (переменная $flowcount будет уменьшаться, если в списке обрабатываемых URL (массив $urls) больше нет записей).

3. curl_multi_info_read возвращает информацию об очередном отработавшем потоке, или false, если с момента предыдущего вызова этой функции никаких изменений небыло.

4. Функция curl_multi_info_read обновляет данные, помещаемые в переменную $info только после того, как будет выполнен curl_multi_exec, поэтому для обработки каждого потока необходимо использовать обе функции.

5. Чтобы добавить новый поток необходимо последовательно выполнить вызов трех функций: curl_multi_remove_handle, curl_multi_add_handle и curl_multi_exec.

Ну и последнее: иногда важно знать какую-либо дополнительную информацию, связанную с обрабатываемым потоком. В этом случае можно создать ассоциативный массив, ключами которого будут являться идентификаторы потока, т.е. значения в $info['handle'].

Соц.закладки

Posted in Статьи on Февраль 11th, 2009 by admin – 1 Comment

Соц.закладки

Еще раз о социальных закладках: платные и бесплатные сервисы и программы добавления закладок, извлечение практической выгоды

Тема получения ссылок и трафа с соц.закладок весьма избита и обсуждается не один год и сегодня дает уже значительно меньший результат чем пару лет назад. Тем не менее, также как и каталоги ссылок соц.закладки продолжают использоваться для продвижения сайтов. В данной статье я решил привести известные мне сервисы и программы по автоматической регистрации и добавления закладок в сервисы отечественного и зарубежного интернета.

Но все же сначала о том, что такое соц.закладки… Сервис социальных закладок - это сайт, предоставляющий посетителям возможность создать аккаунт и сохранять в нем ссылки на любые страницы интернета. Это, если хотите, некоторое подобие “избранного” Internet explorer’а. Очень часто такие сервисы предоставляют пользователям тулбар для браузера, что позволяет добавлять закладки одним щелчком мыши, не заходя на сайт сервиса.

Сервисы соц.закладок, как правило, предоставляют дополнительные возможности: это наблюдение за закладками других участников или создание целых групп тематических закладок. Предполагается, что это помогает найти интересный сайт бОльшиму числу людей. В сервисе также ведется статистика популярных закладок, наиболее часто добавляемых сайтов, количестве ссылающихся на ваши закладки (если, конечно, ваши закладки общедоступны для других пользователей). Отсюда появляется понятие “раскрученности” аккаунта - чем больше тебе доверяют, тем большее число людей просматривают твои закладки (ссылки).

Для нас наиболее важно то, что на главной странице публикуются новые закладки, созданные пользователями. Это привлекает поисковых роботов, которые, в свою очередь, посещают сайт, находящийся в закладках. Таким образом реализуется, по моему мнению, самая главная полезная особенность соц.закладок - быстрая индексация сайта.

Второй полезный момент - это входящие ссылки. Для прироста ТИЦ и, в особенности, PR рассчитывать на соц.закладки особо не стоит, так как очень часто ссылки оказываются закрытыми инструкцией nofollow, да и поисковые системы давно знают, что такое социальные закладки и мало учитывают находящиеся на них ссылки.

С другой стороны, соц.закладки могут стать источником хоть и небольшого, но все же трафа. Этот траф будет постепенно снижаться, так как добавленная закладка будет все больше уходить в глубь других таких же.

Таким образом, социальные закладки представляют на сегодняшний день для веб-мастера примерно то же, что каталоги ссылок: весьма полезны для того, чтобы дать сайту начальный толчок для развития.

Теперь переходим к более практической части повествования.

Не рекомендуется за раз постить сразу много закладок, да и вообще в одном аккаунте не должно быть много ссылок, тем более на один сайт. Это увеличивает вероятность того, что ваши закладки будут восприняты как спам. Гораздо лучше создать несколько закладок, после чего забыть про этот аккаунт и создавать новый. Если вы ведете блог, то можно создать аккаунт и постить в него ссылку на каждый новый пост, создавая в аккаунте по 10-20 ссылок.

Весьма важным и полезным является то, что можно создавать закладки на любую страницу сайта и, кроме того, самому прописать подходящий анкор. Таким образом можно если не продвинуть, то, по крайней мере, помочь продвинуть сайт по низкочастотным запросам. Если создается много аккаунтов, то целесообразно регистрировать их через прокси-сервера, дабы не возникало вопросов об одинаковых IP-адресах.

Автоматическое добавление закладок

Понятно, что осуществлять вручную регистрацию аккаунтов и добавление закладок - дело рутинное, поэтому на помощь приходят платные и бесплатные сервисы и программы. Изначально я хотел написать подобную программу сам, но решил этого не делать, так как их и без того полно, поэтому ограничусь обзором существующих.

  • Скрипты BmSubmitter (56wmz) и “Закладочник” (48wmz) . Это php-скрипты, осуществляющие автоматическое добавление закладок в англоязычные (bmsubmitter) и русскоязычные (закладочник) сервисы соц.закладок. Скрипт прост в установке, однако цена не маленькая, поэтому покупать имеет смысл только в том случае, если планируется активное использование соц.закладок.
  • Иногда на форумах появляются объявления о платной регистрации (примерно по 5$ по большому количеству сайтов и часто на нескольких аккаунтах на каждом). Например есть одна из тем на форуме тут (72 сервиса, 600 аккаунтов). Авторы подобных постов как правило просят предоставить им титлы и описания, написанные с синонимами в формате AllSubmitter (например так: регистрация в {соц.закладках|социальных закладках|социалках}).
  • Бесплатный сервис BPoster - 18 сервисов. За 20$ можно создать VIP-аккаунт: 86 сервисов, пост сразу в несколько аккаунтов, автоматическая регистрация аккаунтов.
  • Жукладочник - бесплатная десктопная программа, доступна версия 1.1.0.5. Возможности: 16 сервисов, возможность постить в один аккаунт. Для работы необходим .Net Framework.
  • Чемодан Блоггера (Каждому блоггеру - по Чемодану)- бесплатная десктопная программа. В качестве вознаграждения автор требует установить обратную ссылку. Это целый набор инструментов, среди которых есть и создание соц.закладок. Возможности: 15 сервисов, полуавтоматический прогон по социалкам.

Вот на этом, пожалуй, и все. Напоследок приведу список наиболее популярных сервисов соц.закладок.

http://bobrdobr.ru
http://memori.ru
http://moemesto.ru
http://delicious.com
http://www.ru-marks.net
http://toodoo.ru
http://www.100zakladok.ru
http://www.windows-software.info
http://www.szpo.com
http://booki.at
http://www.www-link.de
http://www.favorri.com
http://webmarks.ru
http://mybash.ru
http://www.suptoronto.com
http://www.bd-khobor.com
http://www.toxiclemon.co.uk
http://saveurls.net
http://www.ontrackday.com
http://www.servworks.com
http://www.realestateall.org
http://diggrealestate.com
http://www.mister-wong.ru
http://www.indiareporting.com
http://www.7878748.com
http://designsocialnews.com
http://url.org
http://savelink.org.ua
http://urlmarker.com
http://www.kozete.com
http://links.i.ua
http://www.furl.net
http://internetblabla.com/bookmarks
http://www.bibsonomy.org
http://www.fav-man.de
http://tukhoa.com
http://de.digitalsoul.com
http://www.digitalsoul.com
http://sherwyn.com/scuttle
http://myelect.ru
http://fa.voritos.com
http://linkxyz.com
http://www.inods.de
http://www.w610i.pl
http://www.crnss.com/bmarks
http://amilliondollarincome.com/scuttle
http://klikz.ru
http://www.tabletpccounter.com
http://zakladok.net
http://mytwopence.net
http://web-markz.com
http://adventuresintrucking.com/scuttle
http://www.deine-links.de
http://megite.com
http://www.oznac.sk
http://favorit.0br.com.br
http://bookmarks.vibbo.co.uk
http://fav.orites.fr
http://bookmark.domeniuro.ro
http://www.rank-raider.de
http://avagraphique.com/scuttle
http://text20.ru
http://beemylink.de
http://nwonline.nwresd.org/bookmarks
http://samiajiklinik.com
http://www.camkontakte.com/bookmarks
http://de-firmenlinks.de
http://megagsm.forall.pl/infoweb
http://000b.ru/bookmarks
http://www.simpy.com
http://www.inzy.de
http://www.avtz.com
http://pryggs.com
http://avalinks.com
http://www.allesmegageil.de/bookmarks
http://www.alltagz.de
http://www.erosucher.de/lesezeichen
http://www.supondo.com
http://rss-box.info/bookmarks
http://www.frag-fidel.de
http://www.alltagz.com
http://bookmark-one.com
http://socibook.de
http://somibook.de
http://sbookbar.de
http://www.f4v.de

Регистрация в DMOZ

Posted in Статьи on Февраль 10th, 2009 by admin – 1 Comment

Регистрация в DMOZ

В статье описан каталог DMOZ, преимущества нахождения в нем сайта, а также небольшие заметки, которые помогут избежать ошибок при регистрации и увеличить шанс принятия сайта в каталог

DMOZ (от Directory Mozilla), также известный как “Open Directory Project” (ODP), - это огромный каталог, в котором сгруппированы сайты по тематическим разделам и по языку этих сайтов.

Аудитория поисковых систем значительно больше аудитории каталога DMOZ, но, тем не менее, попадание в этот каталог не становится от этого менее привлекательным. Дело тут в том, что данные из этого каталога используют многие другие сайты-каталоги, в том числе и Google. По сути каталог Google является отражением каталога DMOZ, поэтому регистрация в DMOZ приведет к тому, что через несколько дней (около недели) сайт также попадет в каталог Google, а это уже весьма резкий довод в пользу регистрации в DMOZ.

Так как кроме каталога Google, существует еще большое количество сайтов, использующих DMOZ, то это еще больше способствует увеличени PageRang (и ТИЦ Яндекса).

Регистрация в каталоге DMOZ абсолютно бесплатна, но, тем не менее, может занять очень длительное время. Это обусловлено тем, что DMOZ - это каталог, в котором регистрацию осуществляют модераторы вручную, причем осуществляют они свою деятельность по своей собственной инициативе, не получая за это никакого вознаграждения.

На главной странице каталога красуется информация о том, что (на момент написания статьи) над разделами каталога работают 82243 редактора. Это цифра, несомненно, завышенная, так как показывает не количество работающих редакторов, а количество всех зарегистрированных участников, большинство из которых уже не работает.

В результате такого устройства каталога получается, что в каждом из разделов формируется очередь на модерацию, чем, собственно и объясняется долгое время регистрации в DMOZ.

Теперь перейдем к регистрации в DMOZ. Для регистрации сайт должен удовлетворять следующим требованиям:

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

Я не стал приводить бОльших требований, так как следует учитывать в первую очередь то, что регистрацию осуществляет человек, в то время как суть каталога в том, чтобы предоставить пользователям ПОЛЕЗНОЕ и УНИКАЛЬНОЕ содержание. Поэтому если ваш сайт будет содержать что-то, чего больше нигде нет, то он может быть принят даже в том случае, если никогда не обновлялся - все дело в его полезности. При этом следует учитывать, что уникальность заключается не в уникальности на просторах интернета, а в уникальности в рамках одного раздела каталога DMOZ.

Исходя из той же политики можно судить о том, что НЕ влияет на принятие сайта в каталог:

  • раскрученность домена, количество посетителей;
  • уровень домена, платный/бесплатный хостинг;
  • наличие рекламы.

Учитывайте как работает каталог: после подачи заявки на регистрацию в определенном вами разделе сайт становится в очередь на модерацию. Когда до него дойдет время (от двух недель до нескольких месяцев) редактор раздела может определить, что сайт больше подходит другому разделу, поэтому он может передать заявку в другой раздел. При этом заявка вновь становится в конец списка. Но даже такое “счастье” может и не произойти, если редактор решит, что проще просто удалить заявку, если вы не уделили достаточного внимания выбору подходящего раздела - все зависит от людей.

Кроме выбора раздела необходимо ввести заголовок сайта и его описание. Редактор вправе изменить по своему усмотрению эту информацию, но опять таки, делать этого не обязан. Поэтому если поля заполнены неправильно, то заявка может быть отклонена. Для того, чтобы наиболее правильно написать заголовок и описание лучше всего просто посмотреть что написано у других сайтов в каталоге DMOZ. Тем не менее придерживайтесь следующих правил:

  • заголовок должен быть кратким, желательно официальное название сайта;
  • описание должно содержать 25-30 символов;
  • не использовать html;
  • не повторять название сайта в описании;
  • не писать ЗАГЛАВНЫМИ буквами.

Короче писать следует для людей, а не для поисковых роботов.

Итак, регистрация в DMOZ должна начинаться с того, что будут максимально корректно подобраны заголовок и описание сайта, а также выбран раздел (кроме всего прочего он должен соответствовать языку сайта).

Даже если вам кажется, что при регистрации в DMOZ вы все сделали правильно, может пройти достаточно длительное время прежде чем ваш сайт будет принят. Усугубляет дело также и то, что редакторы не отправляют уведомлений об отклонении, если такое имеет место, поэтому единственный способ выяснить отклонен сайт или нет - это спросить об этом у редактора. Для этого можно задать вопрос в форуме или обратиться непосредственно к редактору (ссылка есть внизу каждого раздела). Вполне возможно, что редактор раздела в течении длительного времени не проявляет активности, тогда вам может помочь редактор другого раздела. На форуме также можно получить информацию о причинах отклонения сайта.

Но в любом случае следует помнить, что модераторы не обязаны отчитываться о своей деятельности (если она, конечно, не нарушает правила каталога) - они работают бесплатно, только исходя из своих личных побуждений, поэтому относитесь с пониманием даже в том случае, если ваш вопрос остался без ответа.