Comments 40
Поиск работает шустро и все действительно просто я понятно. Не могу сказать, что «зеркало раздач» это до конца верное название, ведь это просто поиск. Если трекер перестанет работать то и многие раздачи просто растеряют сидов через какое-то время.
Эх, проходят года, а на PHP можно написать все так-же, как когда-то.
Эх, проходят года, а на PHP можно написать все так-же, как когда-то.
mysql_connect("localhost", "torrent", "password") or die("Could not connect to MySQL");
Время остановилось. Шел 2015 год. В репозиториях лежал PHP7. А на самом посещаемом IT ресурсе рунета продолжали писать mysql_connect и делать из кода лапшу.
просто статья лежала на модерации лет 5
Я запускаю много сайтов на различных серверах и нигде не встречал PHP7. Конечно, может быть мои сервера старые.
mysql_connect в статусе deprecated начиная с версии PHP 5.5, если мне память не изменяет. Актуальная версия пятой ветки PHP 5.6. Не заметить предупреждения можно только если везде ставить error_reporting(0), что при разработке/тестах очень странно. Или вы из принципа используете устаревшие функции в надежде на то, что ни один из ваших серверов никогда не обновится до актуальной версии?
# apt-cache search php5 | wc -l
100
# apt-cache search php6 | wc -l
0
# apt-cache search php7 | wc -l
0
Debian Stable.
100
# apt-cache search php6 | wc -l
0
# apt-cache search php7 | wc -l
0
Debian Stable.
Автор, а Вы в курсе, что расширение mysql и функции mysql_* deprecated c версии 5.5 и будут удалены в 7?
Ну, можно еще добавить, что Sphinx давно не требует специальных библиотек, а позволяет запрашивать данные по MySQL интерфейсу. Да, некоторый функционал через него пару лет назад не работал (сложная агрегация), но то, что у автора в коде, работало уже тогда.
Но вообще, больше всего меня порадовал вот этот момент
36 файлов. Таймаут в скрипте установлен на 3 минуты/файл. Итого, больше 1.5 часов перед монитором, вручную перебирая цифры. У меня ощущение, что автор не дошел до главы, где объясняют, как в PHP можно получить список файлов в директории, поэтому списал этот момент на «усложнение кода».
Но вообще, больше всего меня порадовал вот этот момент
Открываем браузер, открываем url «http://site.ru/db/insert_to_db.php?f=category_10.csv». Проделываем тоже самое с каждым файлом CSV. Да, все это можно было автоматизировать, но я специально написал так, что бы было максимально всё понятно.
36 файлов. Таймаут в скрипте установлен на 3 минуты/файл. Итого, больше 1.5 часов перед монитором, вручную перебирая цифры. У меня ощущение, что автор не дошел до главы, где объясняют, как в PHP можно получить список файлов в директории, поэтому списал этот момент на «усложнение кода».
В некоторых случаях оптимальней идти напролом, нежели придумывать элегантные решения. Я к таким случаям отношу однократную установку или настройку. Безусловно автор мог создать академический вылизанный код, однократно выполняемый при установке, но посчитал это лишней тратой времени.
Причём здесь «академичность»? Мне кажется, тут есть смысл говорить не об академичности, а о банальном знакомстве автора с возможностями выбранных инструментов. Или вы считаете, что тратить 1.5 часа собственного времени на заполнение базы в полуавтоматическом режиме это нормально? При том, что можно это автоматизировать буквально тремя строчками кода. Не двумястами, не пятьюстами, а тремя. Единственный вариант, когда такое может быть оправдано, это если 1.5 часа твоего времени стоят меньше, чем набор трёх строк кода.
О том, что можно запустить несколько параллельных потоков
http://site.ru/db/insert_to_db.php?f=category_*.csv
в разных окнах/табах, не подумал?А зачем эти сложности? За 10 минут можно такой скрипт накатать:
Его можно дополнительно адаптировать к запуску из web (добавив set_time_limit и заменив PHP_EOL на <br>) — секунд за 20 это можно сделать. А так, он уже готов из консоли работать.
<?php
function println($message) {
echo $message, PHP_EOL;
}
mb_internal_encoding('UTF-8');
$db = new PDO('mysql:host=localhost;port=3306;dbname=torrent;charset=utf8', 'torrent', 'password', [
PDO::ATTR_PERSISTENT => 1,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => 0,
]);
foreach (glob('csv_data/*.csv') as $file) {
$fp = fopen($file, 'r');
if (!is_resource($fp)) {
println("Can't open $file");
continue;
}
$counter = 0;
while (($data = fgetcsv($fp, 0, ';')) !== false) {
if (count($data) == 0 && is_null($data[0])) {
continue;
}
$db->prepare('INSERT INTO `torrents` (`name`,`hash`,`date`,`size`,`topic_id`,`cat_id`,`cat_name`) VALUES (?,?,?,?,?,?,?)')->execute([$data[4], $data[3], $data[6], $data[5], $data[2], $data[0], $data[1]]);
$counter++;
}
println("Processed $counter entries from $file");
fclose($fp);
}
println('Done');
Его можно дополнительно адаптировать к запуску из web (добавив set_time_limit и заменив PHP_EOL на <br>) — секунд за 20 это можно сделать. А так, он уже готов из консоли работать.
Опять же, в MySQL можно напрямую загружать CSV-файлы — вообще тогда никаких скриптов не нужно писать.
К сожалению не понимаю математики про 1.5 часа, таймаут не равен времени исполнения, плюс можно запустить несколько параллельных потоков.
А в реальной жизни бывает так что три строчки кода стоят дороже полного рабочего дня.
А в реальной жизни бывает так что три строчки кода стоят дороже полного рабочего дня.
Автоматизировать и обвешивать плюшками можно до бесконечности.
В этом случае статья заняла бы много экранов, а читатели начали бы зевать уже на файле insert_to_db.php.
Гораздо важнее изложить базовые принципы, пожертовав лишними и отвлекающими внимание плюшками — с чем автор вполне нормально справился (держи пять!).
Кому не хватает автоматического обхода листинга директории — тот сам себе напишет; и ни к чему это тащить сюда, где выжимки самого главного.
з.ы. set_time_limit() лишь ограничивает время исполнения, а не устанавливает его в. Так что, скрипт может выполниться и за 10 секунд, если файл небольшой.
В этом случае статья заняла бы много экранов, а читатели начали бы зевать уже на файле insert_to_db.php.
Гораздо важнее изложить базовые принципы, пожертовав лишними и отвлекающими внимание плюшками — с чем автор вполне нормально справился (держи пять!).
Кому не хватает автоматического обхода листинга директории — тот сам себе напишет; и ни к чему это тащить сюда, где выжимки самого главного.
з.ы. set_time_limit() лишь ограничивает время исполнения, а не устанавливает его в. Так что, скрипт может выполниться и за 10 секунд, если файл небольшой.
можно сообразить про
curl http://site.ru/db/insert_to_db.php?f=category_{1..36}.csv
Я же написал «все это можно было автоматизировать, но я специально написал так, что бы было максимально всё понятно». Или Вы решили проигнорировать это предложение?
а чего там поменялось с mysql?
зы не троль, просто непонятно
зы не троль, просто непонятно
А как сделать чтобы обновлялось каждый час с RuTracker? Раз в месяц обновления — это очень редко.
Просьба. Автор, залейте код на гитхаб и дайте людям оформить баги/предложения/пуллреквесты.
VCS усложняют разработку. ZIP — выбор настоящих программистов! Просите архив, потом выложите ссылку на архив со своими правками, там, глядишь, еще кто подтянется.
Модератор зачем-то удалил ссылку на сайт-пример, не понятно для чего это было сделано. Нарушений правил нету. Попробую оставить её снова. Ведь на рабочем примере будет более понятно, как все работает: rutracker.online
Вот из-за такого кода и насмеиваються над PHP
Подключение в БД копипастом в 3-х разных файлах…
В трех Карл!!!
Зачем использовать mysql_connect, когда все давно используют PDO, он и не диприкейтед и безопасней в использовании?!
Ну а про выборку из базы прямо среди HTML кода, я пожалуй просто промолчу.
Подключение в БД копипастом в 3-х разных файлах…
В трех Карл!!!
Зачем использовать mysql_connect, когда все давно используют PDO, он и не диприкейтед и безопасней в использовании?!
Ну а про выборку из базы прямо среди HTML кода, я пожалуй просто промолчу.
Главная страница на чистом HTML, без использования PHP
Тогда зачем файлу расширение php?
Глянул пример реализации. По запросу «terminator» 951 результат, по «terminator 1991» — 18642. Гениально.
Столько критики, а за восемь лет никто правильную статью не написал, между тем последний дамп Рутрекера 11 дней назад выложен. Зато все знают, как надо.
Sign up to leave a comment.
Как запустить собственный торрент-поисковик на базе RuTracker?