Азбука/Знакомства: различия между версиями

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску
Строка 90: Строка 90:
Также надо правильно закодировать заголовки писем (используя правильный код для отправки писем).
Также надо правильно закодировать заголовки писем (используя правильный код для отправки писем).


=== Замечания по коду:
Нужно посмотреть в описании функции 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
Что хотели сказать этим кодом:
<pre>
<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>
</pre>


[[Категория:Азбука]]
[[Категория:Азбука]]

Версия 23:50, 27 сентября 2013

Служба Знакомств

Проблемы

Некэшированный внешний запрос

При обращении к страницам знакомств идёт обращение к 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";

Что нужно сделать:

  1. . Код обращения к этому url_rss оставить только в одном файле, а не копировать по разным
  2. . Удалить лишние, неиспользуемые файлы
  3. . Применить для кэширования готовое решение 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

Ссылки

Отправка писем

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

=== Замечания по коду: Нужно посмотреть в описании функции 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>