За последние 24 часа нас посетили 23272 программиста и 670 роботов. Сейчас ищет 871 программист ...

Код PHP генерирует много замечаний?

Тема в разделе "PHP для новичков", создана пользователем psh358, 28 фев 2022.

  1. psh358

    psh358 Новичок

    С нами с:
    16 фев 2022
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте.

    У меня сайт на NGINX. Получилось так, что страницы HTML выглядят нормально, если в каком-либо месте есть определенное количество букв. Если их меньше, то тогда код HTML не до конца загружается, т.е. страница не до конца грузится. С этим серверские админы справились кое как, хотя мне пришлось им долго доказывать, что это на сервере что-то не в порядке, а не в моих страницах.
    В итоге админы сказали, что мой код PHP генерирует много замечаний, при этом есть лимит на эти замечания, они как-то скорректировали это - сделали чтобы меньше замечаний попадало в отчет. Вроде так.

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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.081
    Симпатии:
    1.238
    Адрес:
    там-сям
    Нотисов и ворнингов не должно быть вообще. Разбирайся с каждым из них.
    В настройках PHP лимитов как таковых, на количество замечаний нет. Или кто-то из нас неправильно понял :) Админы могли включить буферизацию чтобы твои ошибки не ломали работу header(). Или могли изменить уровень вывода ошибок. В любом случае, это костыль, временная мера. Спрятать проблему ≠ решить её.
    --- Добавлено ---
    А без гадания, получить с хостинга лог с ошибками нельзя? Там всё должно быть расписано.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.081
    Симпатии:
    1.238
    Адрес:
    там-сям
    Ещё замечание: на публичном хостинге ошибки любого уровня не должны вылазить на страницу. Чтобы не давать потенциальному зловреду информацию для анализа и атаки. Но ты должен о них знать! По взрослому, ошибки должны перехватываться и записываться в логи, доступные только тебе.
    --- Добавлено ---
    Звучит как-то не очень! И nginx скорее всего тут не при чём. Можешь по-подробнее что происходит? Какие ошибки?
     
  4. psh358

    psh358 Новичок

    С нами с:
    16 фев 2022
    Сообщения:
    5
    Симпатии:
    0
    Мне так ответили:

    Удалось воспроизвести проблему. Причиной оказалась совокупность нескольких факторов:
    - логирование в php не было настроено, соответственно все ошибки передавались в nginx
    - ваш php-код генерирует большое количество замечаний и предупреждений
    - nginx имеет ограничение на длину строки ошибок в 2048 байт. Длина сообщений об ошибках превышали это значение.

    Полный механизм понять не удалось, в нем еще как-то задействован механизм keep-alive.
    Изменил в настройках php ( /opt/php74/.../php.ini ) директиву error_reporting на такую:
    error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
    После этого вывод в лог значительно сократился и проблема не проявлялась.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.081
    Симпатии:
    1.238
    Адрес:
    там-сям
    Ну вот теперь когда логирование уже настроено, надо просить эти логи и с каждой ошибкой разбираться. Пробовать на локалке.
    Админ замаскировал проблему, понизив error_reporting. Но он не исправил код. Понимаешь, вываливание ошибок на страницу это уже вторичная проблема. Как покраснение носа при простуде. А есть первичные. Наверное неинициализированные переменные / отсутствующшие индексы массивов репортились. От этого логика программы может сбоить.
     
  6. psh358

    psh358 Новичок

    С нами с:
    16 фев 2022
    Сообщения:
    5
    Симпатии:
    0
    В текущем логе ошибок в основном (около 95%) одна ошибка - скорее всего это лишний - mysqli_close($asdfg);
    Получается, что я в некоторых местах поставил mysqli_close($asdfg); , а также еще и в конце всего кода программы был mysqli_close($asdfg); . Вот он на эту строку в конце кода и ругается. Я нижнюю оставил, а остальные убрал.

    Еще, нужно ли где-то тут предварительно инициализировать переменные:
    $a=(int)$_GET['a'];
    $b = $_SERVER['REMOTE_ADDR'];
    $bb1 = mysqli_connect($host, $us, $pass);
    $aaa=mysqli_query($bb1, "SELECT * FROM dd WHERE pp='123'");
    $bbb=mysqli_fetch_assoc($aaa);
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.081
    Симпатии:
    1.238
    Адрес:
    там-сям
    Если БЫ эти строки были единственными, то mysqli_connect не сработал бы из-за неинициированнвх переменных, а дальше как домино mysqli_query и fetch.
    --- Добавлено ---
    Когда логи есть полноценные, такие ситуации видно именно в развитии - ошибка, за ней следствие.
     
  8. psh358

    psh358 Новичок

    С нами с:
    16 фев 2022
    Сообщения:
    5
    Симпатии:
    0
    В строке $bb1 = mysqli_connect($host, $us, $pass); - тут вопрос про переменную $bb1 , а не то что в скобках. Что в скобках - эти переменные есть инициированные, просто я их не показал.

    А как на счет остальных - надо ли инициировать переменные?
    --- Добавлено ---
    После корректировок mysqli_close($asdfg; ) - файл error.log - почему-то вообще перестал заполняться ошибками или предупреждениями. Может быть это была основная ошибка?