Азбука/Знакомства
Служба Знакомств
Проблемы
Некэшированный внешний запрос
При обращении к страницам знакомств идёт обращение к http://azbyka.ru/forum/blog_external.php?bloguserid=727 причём без кэширования.
Эта ссылка встречается в следующих файлах:
modules/news/_dnevnik.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/comment.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/dnevnik.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/dnevnik2-17.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/izb.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/my.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727"; modules/news/search.php: $url_rss = "http://azbyka.ru/forum/blog_external.php?bloguserid=727";
Что нужно сделать:
- . Код обращения к этому url_rss оставить только в одном файле, а не копировать по разным
- . Удалить лишние, неиспользуемые файлы
- . Применить для кэширования готовое решение Cache:Lite: http://pear.php.net/package/Cache_Lite/docs
Подобная история и с frss.php Остаётся неясным, пишется cache_rss.xml в frss/cache_rss.xml или прямо в /cache_rss.xml
Пропавший overlay.png
В style.css прописана загрузка /znakomstva/images/admin/overlay.png, но самого файла нет.
last.info и напоминания
В index.php проверяется last.info Было бы неплохо вынести это из главной страницы Знакомств (сейчас случайно выбранному человеку замедляется показ страницы путём отправки в это время писем для всех, кому пришло время напомнить).
Лучше сделать отдельным файлом, который вызывать по cron.
Использование opendir и readdir
В частности, для http://azbyka.ru/znakomstva/index.php?module=news&file=add вызывается файл /home/azbyka/www/azbyka.ru/znakomstva/modules/news/add.php в котором используется конструкция вида
$handle=@opendir($smiles_path); while(false!==($file=@readdir($handle))) { }
Всё это недопустимо. Нельзя добавлять @. Нельзя не проверять $handle. Нельзя сравнивать результат readdir с false (и через ==). В итоге получаем бесконечный цикл. Я вроде уже раньше писал об этом. Это действо по замене смайликов должно быть функцией.
Запросы к базе
Запросы к базе без использования индексов.
Запрос FROM a_messenger_messages
К таблице azbyka_znakomstv кто-то делает запрос вида
SELECT * FROM a_messenger_messages WHERE (fromid='23704' AND toid='35199' AND hide_from=0) OR (toid='23704' AND fromid='35199' AND hide_to=0) ORDER BY id DESC LIMIT 0,20;
Он выполняется более 3 секунд, что ненормально долго. Проблема в том, что индексы для таблицы совершенно не подходят для этого запроса.
Ситуация выглядит так:
# Query_time: 4.032949 Lock_time: 0.000051 Rows_sent: 3 Rows_examined: 2364018
Чтобы сделать запрос без использования кэша:
SELECT SQL_NO_CACHE
Запрос FROM a_dnevnik_comments
SELECT COUNT(DISTINCT did) FROM a_dnevnik_comments; SELECT * FROM a_dnevnik_comments GROUP BY did ORDER BY data DESC LIMIT 10770,30;
Запрос FROM a_forum_topics_visits
SELECT COUNT(*) FROM a_forum_topics_visits WHERE tid='4683' AND data>'1337333621';
Запрос FROM a_dnevnik
SELECT COUNT(*) FROM a_dnevnik WHERE hidden='0' AND no_comments='0' AND uid NOT IN (21753);
Запрос FROM a_dnevnik_comments
SELECT * FROM a_dnevnik_comments GROUP BY did ORDER BY id DESC LIMIT 53040,30
Ссылки
- Про Using where и индексы: http://alegenk.livejournal.com/19188.html
Отправка писем
Код отправки писем накопирован много раз в разных местах. Отчёты о недоставке приходят на разные адреса. Это потому что в качестве обратных так указано, и ещё адреса для доставки писем с ошибками не указаны. Надо сделать общий адрес и поставить обработку этих писем с ошибками. Также надо правильно закодировать заголовки писем (используя правильный код для отправки писем).
=== Замечания по коду: Нужно посмотреть в описании функции file_put_contents значение 3-го параметра
+function MyLOG($mess) {^M + $tmp = file_get_contents($_SERVER['DOCUMENT_ROOT']."/znakomstva/modules/news/dne.log");^M + file_put_contents($_SERVER['DOCUMENT_ROOT']."/znakomstva/modules/news/dne.log", $mess . "\r\n" . $tmp);^M
Что хотели сказать этим кодом:
<script type="text/javascript"> window.___azcfg = {api: 'http://azbyka.ru/days/api'}; (function() { var el = document.createElement('script'); el.type = 'text/javascript'; el.async = true; el.src = 'http://azbyka.ru/days/assets/js/api.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(el, s); })(); </script>