Архив

Публикации с меткой ‘php’

Решение проблемы в MediaWiki с большими категориями (Large Categories)

15 февраля 2011 Нет комментариев

На одном из проектов используется движок MediaWiki. В некоторых особенно больших категориях находится до 40000 статей. После обновления до версии 1.16 было обнаружено, что при заходе на страничку с листингом категории. SQL запрос выполняется более 30 секунд (на не самом медленном сервере).

Пришлось искать решение, но в открытых источниках оно так и не было найдено, так что я посмотрел, как это было сделано в старых версиях движка. Итак, критическое место:
Читать далее…

Автоматическое создание Torrent’ов для раздачи файлов на вебсервере Apache + MySQL + PHP

1 марта 2010 32 комментария

Столкнулся с тем, что на одном из моих сайтов трафик по файлам серьезно вырос с ростом посещаемости ресурса. Файлов достаточно много, средний размер около 80 мб. После отключения файлового сервера за нагрузку и вынужденный переезд стал думать в сторону торрентов, что бы снизить прямую нагрузку на файловый сервер и даже иметь возможность какое-то время обходится без него в случае поломок и.т.д.

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

1) Трекер. Для моих целей не нужна регистрация пользователей и не нужен рейтинг, поэтому была взята простейшая его реализация, что бы можно было встроить в свой код. Вуаля трекер всего несколько килобайт веса с минимальным количеством кода, с которым легко разобраться и всего с одной таблицей в БД: OpenTracker. Правда пришлось его слегка переделать и сменить mysql_pconnect на mysql_connect. Что бы коннекты долго не оставались висячими и не достигался лимит подключений БД. Рекомендую ставить трекер на отдельную БД, в случае если нагрузка будет большой. Если вы установили OpenTracker В папку torrent на сервере, то ваш Announce URL для создания торрентов будет: http://yoursite.ru/torrent/announce.php

2) Когда у вас есть трекер хорошо бы автоматизировать создание торрент файлов. Мне удалось встроить это в админку с использованием свободного класса «Torrent RW». Использование класса не просто, а очень просто. Например, для создания торрента для заданного файла требуется 4 строчки:

$torrent = new Torrent( ‘./path-to-file-or-folder’, ‘ http://yoursite.ru/torrent/announce.php’ );
if ( ! $error = $torrent->error() ) // error method return the last error message
$torrent->save(‘test.torrent’); // save to disk
else
echo ‘DEBUG: ‘,$error;

3) Третий компонент это сидер который раздает первую копию файла. Третьим компонентом можете быть вы сами с домашнего компьютера. Если же хочется что бы и раздачу делал сервер, то для этого можно использовать PHP программу TorrentFlux. Ставится в несколько кликов на Web-сервер и управляется через браузер. Добавляете через веб-интерфейс торрент указываете файл и сервер сам раздает файлик. К сожалению мне не удалось сходу автоматизировать раздачу после создания торрента. Приходится делать это руками. Если вдруг кому удастся дайте знать. =)