Перейти к публикации

Alex-GR

Клиенты
  • Публикации

    79
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    2

Сообщения, опубликованные пользователем Alex-GR

  1. Бот Бинга "compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm" нашел на сайте скрытую ссылку и переходит по ней не с сайта, а напрямую:

    https://site.ru/engine/go.php?url=aHR0cDovL3d3dy5xxxxxxyb2JvZm9yZXgucnUvb3BlcmF0aW9ucy93ZWxXXXXWJvbnVzLz9hPXXXXXD%3D

    В результате генерируется варнинг:

    [error] 6433#6433: *204088 FastCGI sent in stderr: "PHP message: PHP Warning:  Undefined array key "HTTP_REFERER" in /var/www/5c73z9h6/data/www/site.ru/engine/go.php on line 47" while reading response header from upstream, client: 157.55.39.127, server: site.ru, request: "GET /engine/go.php?url=aHR0cDovL3d3dy5xxxxxxyb2JvZm9yZXgucnUvb3BlcmF0aW9ucy93ZWxXXXXWJvbnVzLz9hPXXXXXD%3D HTTP/2.0", upstream: "fastcgi://unix:/var/www/php-fpm/xxxxxx.sock:", host: "site.ru"

    Нужно бы сделать проверку переменной HTTP_REFERER.

    Не критично, но запланируйте на будущие релизы DLE.

    Забыл указать:

    Версия DataLife Engine: 14.3
    Версия PHP: 8.0.10

     
       
  2. 384149 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Undefined constant "error" in /var/www/1111/data/www/site.ru/engine/classes/recaptcha.php:105

    Смотрим 105 строку файла recaptcha.php и видим, что нет кавычек в переменной $answers:

    $answers [error-codes]

    А должно быть:

    $answers['error-codes']

    Исправьте ошибку.

  3. 23 минуты назад, celsoft сказал:

    Не стоит задача снижать нагрузку, и не может стоять, потому как контента может быть много на странице, есть еще комментарии, есть еще custom комментариев и т.д.

    Задача стоит исключительно в том чтобы экономить трафик а также увеличивать скорость переиндексации т.к. поисковику не нужно самому обрабатывать контент. Все. Больше никаких задач не стоит в данном случае и стоять не может.

    Возможно это и так - вы разработчики, и вы знаете код лучше.

    А баг ваш когда устраните?

  4.  И уж если, цитирую:

    "Для публикаций добавлена поддержка отдачи заголовка "304 Not Modified", в случае отправки на сервер соответствующего запроса от поисковых систем. Если публикация не редактировалась за указанный период, то DLE будет отдавать просто короткий соответствующий HTTP с кодом 304. Что позволит снизить расход трафика на сервере, и несколько снизить нагрузку на сервер."

    стоит задача снизить нагрузку на сервер, то стоит проверку модификации публикации организовать как можно ближе к получению переменной $_DOCUMENT_DATE из БД (или кеша), в файлах show.full.php и static.php, а не выполнять "туевую хучу" кода (в том числе и запросов к БД) до проверки модификации публикации бесполезно.

  5. А если вы перед эхо очистите буфер - то код сайта выводится не будет, только строка "Есть данные":

    if ($IfModifiedSince && $IfModifiedSince >= $_DOCUMENT_DATE) {
    	//header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    	ob_end_clean();
    	echo 'Есть данные';
    die();

     

    Ну и "вишенка на торте". Вот такой код:

    if ($IfModifiedSince && $IfModifiedSince >= $_DOCUMENT_DATE) {
    	ob_end_clean();
    	header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    	die();
    }

    отрабатывает без предупреждений со стороны Nginx.

  6. И ещё - сделайте простую проверку того, что данные передаются до вывода заголовка 304 Not Modified: в файле /engine/modules/functions.php закомментируйте строку и добавьте echo, чтобы быть уверенным, что отрабатывает именно этот код:

    //header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    echo 'Есть данные';

    и через curl отправьте запрос с указанием заголовка If-Modified-Since - вы получите код сайта и в конце текст "Есть данные", хотя кода быть не должно! Вывод должен быть нулевым.

  7. 11 минут назад, proba сказал:

    Нет!

    Тогда как вы объясните тот момент, что варнинги перестают сыпаться в лог ошибок после переноса кода проверки даты с функции GzipOut выше первого echo в файле /engine/modules/main.php?

  8. Как я и обещал, я решил причину вывода предупреждения Nginx. Это баг DLE версии 14.2.

    Виновником оказался код DLE, а вернее невнимательность его разработчиков.

    Для начала хочу напомнить celsoft-ту вот это правило: https://www.php.net/manual/ru/function.header.php

    Оно гласит: "Помните, что функцию header() можно вызывать только если клиенту ещё не передавались данные. То есть она должна идти первой в выводе, перед её вызовом не должно быть никаких HTML-тегов, пустых строк и т.п.".

    Теперь смотрим файл /engine/modules/functions.php, в котором прописана функция GzipOut. В ней проверяются 2 условия - в запросе должен быть заголовок If-Modified-Since и сравнивается дата изменения документа с датой, переданной в заголовке If-Modified-Since. Все верно, все работает правильно.

    Теперь смотрим, где вызывается функция GzipOut? Это файл /engine/modules/main.php, самый конец. А чуть выше идёт передача данных клиенту:

    echo $tpl->result['main'];
    echo "\n<!-- DataLife Engine Copyright SoftNews Media Group (http://dle-news.ru) -->\r\n";

    Нарушено приведённое выше правило для функции header(). Вырезаем код проверки даты из функции GzipOut и вставляем его выше строки

    echo $tpl->result['main'];

    И о чудо - все работает правильно, предупреждений от Nginx нет, не нужно "настраивать и тюнинговать сервер и искать нестыковки в конфигурациях"!
    Остались только те проблемы, которые в компетенции DLE, верно?

    • Поддерживаю 2
  9. 6 часов назад, celsoft сказал:

    его ставит апач

    Апача нет. Nginx + PHP-FPM.

    Я, конечно, только учусь. Но я докопаюсь до причины.

    Не понятно, почему вы так против. Я обозначил проблему, и я её решу.

    Вам то легче её решить. У вас знаний и опыта больше. Но если не хотите - ваше право. Напрягает отношение к клиентам.

    13 лет я с вами. И вы тихонечко посылаете меня на.... Почему? За что?

    Впрочем, это ваше право. Зря я лицензии покупал. C таким отношением...

    • Поддерживаю 1
  10. 3 часа назад, celsoft сказал:

    Вообще не имеет никакого отношения к DLE и к версии DLE. Ошибка говорит что на сервер было посланы данные которые превышают лимиты установленные на сервере. DLE работает на сервере. А данные посылает не DLE, а пользователь сайта, например браузер или вообще любой клиент.

    Имеет отношение к DLE. При запросе поисковиков с заголовком If-Modified-Since DLE возвращает ответ "HTTP/1.1 304 Not Modified" и "Content-Length  0" именно Nginx, который принимает не нулевые данные, указанные в заголовке Content-Length и посланные DLE. Не снаружи, а внутри. Отсюда и варнинг.

    Тут данные посылаются не на сервер, а идет ответ на запрос поисковика с DLE на Nginx, и в заголовках и реальных данных расхождение. Как решить эту проблему?

  11. Добрый день!

    При переходе на версию 14.2 в логах Nginx появились предупреждения вида:

    [warn] 27840#27840: *85737 upstream sent more data than specified in "Content-Length" header while reading upstream, client: 66.249.76.61, server: ...

    Они возникают в момент обращения поисковиков к страницам сайта: поисковик делает запрос на сайт с заголовком If-Modified-Since или If-None-Match и если контент страницы не изменился, движок отдает код "304 Not Modified" - именно в этом случае возникает ошибка.  Кто подскажет, как можно убрать эти предупреждения?

    Сайт - avtoforex.ru

  12. 15 часов назад, Mr. Bot сказал:

    Но типичный контингент DLE щёлкает переключатели в панели и не думает о последствиях, т.к. не умеет об этом думать)

    Рад, что "нетипичный" контингент умеет думать... тем местом, на котором сидит. И читать не умеет от слова "вообще"...

    И почему девочки суют свой длинный нос туда, где "Макар телят не пас"? Вопрос риторический.

  13. 09.02.2021 в 00:42, Captain сказал:

    Баг не баг, но стоит убрать главную страницу из цепочки, в справках Яндекса и Google её нет, первой позицией идёт рубрика.

    Google. Пример разметки:

    Не уверен, что это правильно. Посмотрите строку навигации приведенной страницы Google ""Google. Пример разметки:

    Главная - Центр Поиска Google  - Документация - Расширенная поисковая оптимизация

    Главная страница есть в строке навигации.

  14. 5 часов назад, MSK сказал:

    расширение php установлено?

    Вероятнее всего, эта ошибка связана с несовместимостью с PHP 8. Вот, например:

    https://stackoverflow.com/questions/64868685/fatal-error-cannot-declare-class-xmlparser-because-the-name-is-already-in-use

    У меня лента RSS отключена, поэтому не было таких ошибок.

  15. Еще ошибка:

    PHP message: PHP Fatal error:  Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, null given in /var/www/.../engine/api/api.class.php:402

    Наверное, нужно пересмотреть все функции count(), у меня в плагине точно такая же ошибка была.

    И еще ошибка, там же:

    PHP message: PHP Fatal error:  Uncaught TypeError: chmod(): Argument #2 ($permissions) must be of type int, string given in /var/www/.../engine/api/api.class.php:418

     

  16. 02.02.2021 в 17:40, Xore сказал:

    Есть проблема, что не будут загружаться файлы через download.php. Скачиваются пустые файлы

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

    PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function get_magic_quotes_gpc() in /var/www/.../engine/classes/min/lib/HTTP/ConditionalGet.php:319
    PHP message: PHP Fatal error:  Uncaught ArgumentCountError: set_time_limit() expects exactly 1 argument, 0 given in /var/www/.../engine/classes/download.class.php:105

    Это пока все, что заметил. Тестирую дальше PHP 8 на локалке.

  17. 11 часов назад, alex32 сказал:

    Может, просто контент так себе?

    Может. Но рейтинг звездами для статей от пользователей редко когда опускается ниже 4. Есть вопросы, уточнения, благодарят за информацию, кто-то указывает на найденные ошибки. Но абсолютно все комменты -1.

    4 часа назад, kamensk сказал:

    Автор в чем проблема? Если ты хошь, чтобы тебе шли только положительные отлики - ставь тогда вариант рейтинга только "нравится" и не будет тогда самолюбие ущемленно))

    Да не в самолюбии дело. Вы не поняли. Для всех 100% комментов выставлен рейтинг -1. Сегодня опубликовал коммент, через время он уже -1. Да и попробуйте вручную коменнты для более 600 статей перелопатить и выставить -1.

    Говорю же - больше на бота похоже, "комментный маньяк" - это уж совсем из области фантастики.

  18. Модуль googlemap.

    Вначале идет кнопка "Уведомить поисковые системы о наличии новой версии карты сайта", а в самом конце - "Создать / Обновить файл карты сайта".

    Возможно, вначале нужно сгенерить сайтемап, а потом его уже отправлять? И кнопки в таком же приоритете расставить?

    Фигня, конечно, но...

    Заранее благодарен, если прислушаетесь. Выкину пару строк из плагина.

  19. Добрый день всему сообществу!

    Возник такой вопрос: все комментарии на сайте получили -1. Настройка комментов - "нравится", "не нравится". Некоторые поправил на 0, но через время они опять оказались в -1. Такое ощущение, что это какой-то бот индексирует эти ява скрипты и накручивает "минус единички". Далек от мысли, что это маньяк следит за коментами и всем ставит -1. Ладно - мне. Но всем подряд? И на всех страницах?

    Никто не сталкивался с такими проблемами? Может, Celsoft что-то сможет подсказать?

    _ttps://avtoforex.ru

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

  20. Уже вышла новая версия движка, но баг остается - я редактирую коммент и он автоматом публикуется, хотя я нажимаю кнопку "Принять исправления". Или так и было задумано изначально?

    Вы уж ответьте, чтобы я понимал - исправите вы этот баг или нужно плагин писать?

    Простите, забыл - avtoforex.ru

  21. Если отредактировать комментарий, то он автоматом публикуется, но продолжает "висеть" в графе " Комментарии ожидающие проверки: " до тех пор, пока не очистишь кеш. Хотя, по идее, публиковаться коммент должен только тогда, когда я проверил текст после редактирования и одобрил его.

    • Поддерживаю 1
  22. 17 минут назад, celsoft сказал:

    Я не даю готовых инструкций для злоумышленников. Если вы считаете что сделали все правильно, это ваш личный собственный выбор. Мое дело вас предупредить, а дальше вы уже делаете свой выбор. Я вас не отговариваю.

    Конечно не даете - для данного случая их просто нет. Если внимательно посмотреть вот на эту часть настроек:

    Optional: (figcaption, Flow) | (Flow, figcaption) | Flow

    то мы увидим, что для тега figure разрешены или потомки figcaption, Flow, или потомки Flow, figcaption, или потомки Flow.

     

    Открываем официальный сайт HTML Purifier  с примерами http://htmlpurifier.org/docs/enduser-customize.html и читаем:

    Цитата

    Flow - Any number of inline elements, block elements and text, like div

    Другими словами, возможны 3 варианта расположения потомков в теге figure:

    <figure>
    <figcaption></figcaption>
    инлайновые элементы, блочные элементы и текст
    </figure>
    
    <figure>
    инлайновые элементы, блочные элементы и текст
    <figcaption></figcaption>
    </figure>
    
    <figure>
    инлайновые элементы, блочные элементы и текст
    </figure>

    Но в такой конфигурации парсер почему-то вырезает теги thumb, а если оставить только Flow - то нет.

    Где дыра?

     

    38 минут назад, celsoft сказал:

    А мета только для микроразметки используется? Нет. Это управляющий важной информацией код, влияющий на кодировку, на метатеги страницы, и т.д. И его использование просто в тексте новости небезопасно, поэтому его не не может быть, как того же JS. Опасность для сайта не только воровство вашего пароля, но понижение его ранжирования и изменение кодировки и влияние на отображение. А это все может делать тег <meta>

    Вот именно с этой точки зрения и с той точки зрения, что грамотный вебмастер будет максимально автоматизировать свой труд, я и не стал лезть в настройки редактора Froala Editor для того, чтобы прописывать микроразметку изображений. Это все делается плагином в парсере автоматически.

  23. 5 часов назад, celsoft сказал:

    Какой незакрытый класс? Все в коде который предназначен для показа уменьшенной копии с увеличением корректно закрыто и валидно. Поэтому вы вставляете некорректный код видимо. Более того редактор Froala Editor сам вставляет картинки именно в виде HTML может, а использовать BB теги или HTML для вставки картинок, указывается в настройках DLE в админпанели. Поэтому утверждать что Froala Editor не поддерживает вставку в виде HTML для уменьшенных картинок некорректно. Таких проблем в DLE нет.

    Да, здесь я неправ - когда тестировал вставку HTML кода увеличивающегося по клику изображения, забыл закрывающий тег </a>, а редактор его вставлял неправильно.

    5 часов назад, celsoft сказал:

    Потому что изучите HTML стандарты. В div может быть любой обычный текст, а в figure нет. Поэтому никакого бага тут нет. DLE проверяет валидность HTML кода, что является основой в безопасности скрипта и вашего сайта в целом.

    Давайте посмотрим на эту страничку: https://developer.mozilla.org/ru/docs/Web/HTML/Element/figure

    HTML-элемент <figure> (Иллюстрация с необязательной подписью) представляет самостоятельный контент, часто с подписью (заголовком), которая указывается с помощью элемента (<figcaption>). Диаграмма и её подпись представляет собой единое целое.

    Категории контента:

    Основной поток, секционный корень, явный контент

    Разрешённое содержимое:

    Элемент <figcaption> за которым следует основной поток; или поточный контент за которым следует элемент <figcaption>; или поточный контент.

     

    Читаем определение основного потока: https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Content_categories#Основной_поток

    Основной поток

    Элементы основного потока обычно содержат текст и встроенный контент.

    HTML стандарты говорят о том, что в теге <figure> может быть текст.

     

    Идем дальше. Версия DLE 13.3. Установлена "с нуля".

    <figure>
        <a itemprop="image" itemscope itemtype="https://schema.org/ImageObject" itemprop="url contentUrl" class="highslide" href="https://site.ru/uploads/boxsmall.jpg" target="_blank">
    	<img itemprop="url contentUrl" src="https://site.ru/uploads/boxsmall.jpg" alt="Принцип работы советника Setka TLP." class="fr-fic fr-dii">
    	<meta itemprop="width" content="300">
    	<meta itemprop="height" content="411">
        </a>
        <figcaption>Подпись к картинке.</figcaption>
    </figure>

    Это валидный код? Теги meta уже вырежет парсер  редактора Froala Editor. Нужно настраивать редактор. Или можно вставить изображение в тегах  thumb, а в парсере DLE переписать код парсинга тега thumb так, чтобы он автоматом добавлял микроразметку к изображению. И не расписывать вручную код каждой картинки, которых на сайте может быть тысячи.

    5 часов назад, celsoft сказал:

    Решать нужно правильно и корректно, как вам и написали, а не делать дыру в безопасности сайта. Что вы и успешно сделали своей строчкой в плагине.

    О какой дыре в безопасности идет речь? Если в файле engine/classes/parse.class.php поменять код:

    $def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common');
    на
    $def->addElement('figure',   'Block', 'Flow', 'Common');

    Если я чего то не понимаю - объсните конкретней, а не кидайтесь громкими беспочвенными фразами.

     

    И еще момент. Редактор Froala Editor к каждому изображению добавляет класс.

    Объясню подробней. Вствляем 3 изображения в полную новость:

    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">

    Пока все правильно - редактор добавил к каждому изображению сласс fr-fic fr-dii. Класс fr-dii предназначен для выравнивания по центру, класс fr-fil - выравнивание слева, а класс fr-fir - справа.

    Теперь встроенными средствами выравниваем второе изображение справа, а третье - слева. И получаем код:

    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii fr-fir">
    <img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii fr-fil">

    Редактор не удаляет класс fr-dii, а добавляет классы fr-fil и fr-fir к нему. Не уверен, что это правильно.

×
×
  • Создать...