проверить правильность кода php

Как и какими средствами находить ошибки в PHP коде?

При разработке, порой, код не работает так, как задумано или вообще не работает. Сижу, гадаю: что и где не так?

В итоге часто проблема мелкая, дурацкая опечатка, ошибка в синтаксисе и прочее. Профессионалом так не станешь, если по каждой ерунде бегать по ресурсам. А я хочу им быть.

Вопрос: какие есть способы, чтобы найти ошибки в PHP коде? Какие инструменты, методы, плагины, пути и пр.?

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

6 ответов 6

Вчера всё работало, а сегодня не работает / Код не работает как задумано

Debugging (Отладка)

В чем заключается процесс отладки? Что это такое?

Процесс отладки состоит в том, что мы останавливаем выполнения скрипта в любом месте, смотрим, что находится в переменных, в функциях, анализируем и переходим в другие места; ищем те места, где поведение отклоняется от правильного.

Будет рассмотрен пример с PHPStorm, но отладить код можно и в любой другой IDE.

Подготовка

Для начала необходимо, чтобы в PHP имелась библиотека для отладки под названием xdebug. Если её еще нет, то надо скачать на xdebug.org.

Далее в php.ini прописываем настройки:

Перезагружаем сервер, на всякий случай.

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

нажимаем Add new local server

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Запуск

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

В данном случае, т.к. функция вызывается сразу на той же странице, то при нажатии кнопки Debug — отладчик моментально вызовет функцию, выполнение «заморозится» на первом же брейкпойнте. В ином случае, для активации требуется исполнить действие, при котором произойдет исполнение нужного участка кода (клик на кнопку, передача POST-запроса с формы с данными и другие действия).

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Процесс

Для самого процесса используются элементы управления (см. изображение выше, выделено зеленым прямоугольником) и немного из дополнительно (см. изображение выше, выделено оранжевым прямоугольником).

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Show Execution Point ( Alt+F10 ) — переносит в файл и текущую линию отлаживаемого скрипта. Например, если файлов много, решили посмотреть что в других вкладках, а потом забыли где у вас отладка 🙂

Step Over ( F8 ) — делает один шаг, не заходя внутрь функции. Т.е. если на текущей линии есть какая-то функция, а не просто переменная со значением, то при клике данной кнопки, отладчик не будет заходить внутрь неё.

Step Into ( F7 ) — делает шаг. Но в отличие от предыдущей, если есть вложенный вызов (например функция), то заходит внутрь неё.

Step Out ( Shift+F8 ) — выполняет команды до завершения текущей функции. Удобно, если случайно вошли во вложенный вызов и нужно быстро из него выйти, не завершая при этом отладку.

Rerun ( Ctrl+F5 ) — перезапускает отладку.

Resume Program( F9 ) — продолжает выполнение скрипта с текущего момента. Если больше нет других точек останова, то отладка заканчивается и скрипт продолжает работу. В ином случае работа прерывается на следующей точке останова.

Stop ( Ctrl+F2 ) — завершает отладку.

View Breakpoints ( Ctrl+Shift+F8 ) — просмотр всех установленных брейкпойнтов.

Mute Breakpoints — отключает брейкпойнты.

Итак, в текущем коде видно значение входного параметра:

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Дальнейшие нажатия F8 переместят линию кода на строки 11, 12 и, наконец, 15.

Дополнительно

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Это удобно, если останов нужен только при определённом значении, а не всегда (особенно в случае с циклами).

Источник

Онлайн-тестеры PHP, JS и CSS кода

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Полезные инструменты в складчину программиста, веб-разработчика, тестировщика. Эти онлайн-тестеры помогут протестировать ваш веб-код еще до внедрения на сайте, найти ошибки и «пофиксить» в реальном времени. Есть возможность симулировать любую версию PHP и даже фреймворки, а также протестировать и другой код, например CSS или Java Script.

PHPTester

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Позволяет протестировать свой php-код в режиме онлайн прямо в вашем браузере без использования веб-сервера. Поддерживаемые версии PHP: 5.5, 5.6, 7.0

Ссылка: //phptester.net/

PHP Sandbox

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Отличается от предыдущего только тем, что дает возможность выбрать любую версию PHP — от 4.4.9 до 7.4.

Ссылка: http://sandbox.onlinephpfunctions.com/

PHP Online Test

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Удобный тестер с приятным пользовательским интерфейсом. Содержит в себе много еще других плюшек, например PHP виджеты, API, декодеры/энкодеры. Мне он очень понравился, рекомендую.

Ссылка: //phpfiddle.org/

PHP syntax checker

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Осуществляет проверку синтаксиса в PHP-коде. Позволяет загрузить и проверить код из файла. Поддерживает версий PHP: 5.3, 5.4, 5.5, 5.6, 7.1

Ссылка: https://extendsclass.com/php-tester.html

JS.DO — Online JavaScript Editor

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Название говорит за себя — этот сервис тестирует ваш JS-код. После регистрации можно указать URL-адрес файла с кодом и проверить в реальном времени, не выходя из браузера. Есть возможность симулировать фреймворки — jQuery, Bootstrap.

Ссылка: https://js.do/

CSSDesk

проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php

Замечательный онлайн-сервис. Позволяет поэкспериментировать с CSS-кодом в реальном времени и сразу просматривать результат. Готовый код вы можете скачать. А главное, сервис простой и дружелюбный. Новичку, однозначно понравится!

Источник

Автоматическая проверка кода для PHP

Разрешите представить Вам перевод статьи Johannes Schmitt Automated Code Reviews for PHP. Лично мне она помогла несколько иначе взглянуть на процесс разработки и тестирования своих приложений. А оригинальный подход автора к тестированию, как минимум, заслуживает внимания.
Если вам тоже интересно, добро пожаловать под кат.

С тех пор как появился Trevis, вы можете в мгновение ока внедрить непрерывную интеграцию во все свои PHP-проекты. Это помогает не только улучшить качество кода, но и существенно упрощает поддержку библиотек, предоставляя информацию о сборке прямо в запрос на обновление(pull request) и, тем самым, уменьшает время получения обратной связи. Travis очень хорош, но, как и другие инструменты тестирования, страдает от наследственной болезни — что бы что-то сделать ему нужны тесты. Готовь биться об заклад, что у вас нет ни одного проекта честно покрытого тестами на 100% или, даже, близко к этому. Это я еще надеюсь, что тесты вы пишите.

Как вам возможно известно, я поддерживаю значительное число плагинов(bundles) для Symfony2 и самостоятельных PHP-библиотек. И благодаря сообществу(спасибо ребята, так держать) я постоянно получаю запросы на обновление в свои репозитории. Некоторые из запросов совершенно бесполезные, некоторые заслуживают внимания, некоторые можно добавлять в основную ветку. Но как бы тщательно не проверялся запрос, время от времени случается так, что добавляется то что не работает или работает, но не всегда.

Пару месяцев назад я попытался изменить эту ситуацию, идея была довольно простой: создать систему которая проверяет код запроса на обновление и дает обратную связь. Я довольно быстро сделал прототип и добавил в него пару простых проверок. Затем, захотел добавить более сложны, например, проверку может ли метод быть вызван. Что бы понять пользу такой проверки, посмотрите на следующий пример:

Type Inference of PHP Code

Я потратил довольно много времени вникая в концепции потока данных, потока управления и абстрактной интерпретации. Что само по себе выглядит довольно сложно и выходит за рамки этой статьи. Но позвольте мне привести всего несколько примеров и дать вам общее представление об этих концепциях.

Анализ потока управления(Control Flow Analysis)

Анализ этого потока позволяет определить в каком порядке будут выполняться различные блоки вашего кода.

Для этого кода поток управления будет выглядеть так:
проверить правильность кода php. Смотреть фото проверить правильность кода php. Смотреть картинку проверить правильность кода php. Картинка про проверить правильность кода php. Фото проверить правильность кода php
Мы начинаем в if, затем двигаемся к «foor» или «bar» и, наконец, выходим. Само по себе нам это вряд ли чем-то поможет, но это послужит основой для следующего шага.

Анализ потока данных(Data Flow Analysis)

Анализ потока данных позволяет определить как изменяется контекст выполнения пока мы движемся по схеме которую определили в анализе потока управления.

Абстрактная интерпретация(Abstract Interpretation)

Для нашего случая эта концепция сводится к вопросу «Какие предположения мы можем сделать, если знаем результат условного выражения?». Давайте взглянем на другой пример:

Автоматическая система проверки

Какой от всего этого толк, спросите вы. В начале статьи я сказал, что моей целью было создание автоматической системы проверки кода. И я думаю что сейчас она готова для широкого использования и обсуждения. Я протестировал своей системой ведущие PHP библиотеки, такие как, Zend Framework 2, Symfony2, Doctrine, Propel и многие другие. Она содержит более 100 правил проверки, которые вы можете использовать и конфигурировать. Если у вас есть PHP-проект на Github вы можете легко попробовать. Просто залогинтесь http://jmsyst.com/automated-code-reviews и выберете нужный репозиторий. А если не понравиться, можете выключить в любое время.

Если теперь кто-то скажет, что PHP-программисты не слишком серьезно относятся к качеству кода, отправляйте их их ко мне.

Источник

Автоматическая проверка кода за 5 минут

Данная инструкция показывает как автоматизировать проверку на code style в вашем php проекте.

Давайте посмотрим как будет выглядеть настройка в новом проекте.

Шаг 1 — Делаем инициализацию composer (у кого он уже настроен, пропускаем)

Для этого в корне вашего проекта запускаем команду. Если у вас не установлен composer, то можете обратиться к официальной документации getcomposer.org

Шаг 3 — Добавляем нужные библиотеки

Шаг 4 — Добавляем обработчик хука

Сам обработчик можно написать на чем угодно, но так как статься про php то будем писать код на нем.

В данном примере код будет проходить 3 проверки:
— проверка на синтаксические ошибки
— проверка на PSR2 через code sniffer

PSR2 можно заменить на любой другой который поддерживает code sniffer. Список поддерживаемых стандартов можно увидеть введя команду

Шаг 5 — Конфигурируем composer для реализации автозапуска проверки на pre-commit

5.1 Создаем сам обработчик который будет копировать файлик pre-commit.php в папку хуков гита

5.2 Настраиваем composer чтобы запускался обработчик
в composer.json добавляем следующую секцию

pre-update-cmd, pre-install-cmd — перед install и update удаляется старый обработчик

post-install-cmd, post-update-cmd — после install и update будет устанавливаться обработчик на pre commit

В итоге файлкик composer.json примет следующий вид

Запускаем еще раз composer install чтобы файлик скопировался куда надо.

Все готово, теперь если вы попытаетесь закомитить код с кривым code style то git console вам об этом скажет.

В качестве примере давайте создадим в папке src файлик MyClass.php по следующим содержаением.

Пытаемся закомитить и получаем ошибки проверки кода.

Источник

Фильтрация и проверка данных PHP. Частые ошибки

Материал предназначен в основном для начинающих веб-программистов.

Введение.

Часто ко мне обращаются клиенты, у которых установлены самописные CMS или модули, написанные начинающими веб-программистами, которые не понимают, что нужно для защиты данных и зачастую копируют функции фильтрации, не задумываясь о том как они работают и что именно нужно с ними делать.

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

В сети много статей по поводу фильтрации данных, но они как правильно не полные и без подробные примеров.

Разбор полетов.

Фильтрация. Ошибка №1

Для числовых переменных используется такая проверка:

Почему она приведет к SQL инъекции? Дело в том, что пользователь может указать в переменной input_number значение:

В таком случаи проверка будет успешно пройдена, т.к. функция intval получает целочисленное значение переменной, т.е. 1, но в самой переменной $number ничего не изменилось, поэтому весь вредоносный код будет передан в SQL запрос.
Правильная фильтрация:

Конечно, условие может меняться, например если вам нужно получить только определенный диапазон:

Если вы используете чекбоксы или мультиселекты с числовыми значениями, выполните такую проверку:

array_map
Так же встречаю фильтрацию в виде:

Ничего кроме улыбки это не может вызвать 🙂

Фильтрация. Ошибка №2.

Для стринг-переменных используется такая фильтрация:

Функция addslashes экранирует спец. символы, но она не учитывает кодировку БД и возможен обход фильтрации. Не стану копировать текст автора, который описал данную уязвимость и дам просто ссылку Chris Shiflett (перевод можно поискать в рунете).

Если вы не предполагаете вхождение html тегов, то лучше всего сделать такую фильтрацию:

strip_tags — убирает html теги.
htmlspecialchars — преобразует спец. символы в html сущности.
Так вы защитите себя от XSS атаки, помимо SQL инъекции.
Если же вам нужны html теги, но только как для вывода исходного кода, то достаточно использовать:

Если вам важно, чтобы значение переменной не было пустой, то используйте функцию trim, пример:

Фильтрация. Ошибка №3.

Она касается поиска в БД.
Для поиска по числам используйте фильтрацию, описанную в первой ошибке.
Для поиска по тексту используйте фильтрацию, описанную во второй ошибке, но с оговорками.
Для того, чтобы пользователь не смог выполнить логическую ошибку, нужно удалять или экранировать спец. символы SQL.
Пример без доп. обработки строки:

На выходе у нас получится запрос вида:

Это значительно увеличит нагрузку на базу.
В своём скрипте я использую функцию, которая удаляет нежелательные мне символы из поиска:

Конечно, не все из выше перечисленных символов представляют опасность, но в моём случаи они не нужны, поэтому выполняю поиск и замену.
Пример использования фильтрации:

Также советую сделать ограничение по количеству символов в поиске, хотя бы не меньше 3-х, т.к. если у вас будет большое количество записей в базе, то поиск по 1-2 символам будет значительно увеличивать нагрузку на БД.

Фильтрация. Ошибка №4.

Не фильтруются значения в переменной $_COOKIE. Некоторые думаю, что раз эту переменную нельзя передать через форму, то это гарантия безопасности.
Данную переменную очень легко подделать любым браузером, отредактировав куки сайта.
Например, в одной известной CMS была проверка, используемого шаблона сайта:

В данном случаи можно подменить значение переменной $_COOKIE[‘skin’] и вызвать ошибку, в результате которой вы увидите абсолютный путь до папки сайта.
Если вы используете значение куков для сохранения в базу, то используйте одну из выше описанных фильтраций, тоже касается и переменной $_SERVER.

Фильтрация. Ошибка №5.

В PHP скрипте переменная $group будет равна 5, если в скрипте она не была объявлена со значением по умолчанию.

Фильтрация. Ошибка №6.
Проверка. Ошибка №1.

Сталкивался со случаями, когда для AJAX запроса (например: повышение репутации) передавалось имя пользователя или его ID (кому повышается репутация), но в самом PHP не было проверки на существование такого пользователя.
Например:

Получается мы создаем запись в базе, которая совершенно бесполезна нам.

Проверка. Ошибка №2.

При выполнении различного рода действий (добавление, редактирование, удаление) с данными не забывайте проверять права пользователя на доступ к данной функции и дополнительные возможности (использование html тегов или возможность опубликовать материал без проверки).

Давно исправлял в одном модуле форума подобную ошибку, когда любой пользователь мог отредактировать сообщение администрации.

Проверка. Ошибка №3.

При использовании нескольких php файлов сделайте простую проверку.
В файле index.php (или в любом другом главном файле) напишите такую строчку перед подключением других php файлов:

В начале других php файлов напишите:

Так вы ограничите доступ к файлам.

Проверка. Ошибка №4.

Используйте хеши для пользователей. Это поможет предотвратить вызов той или иной функции путём XSS.
Пример составления хеша для пользователей:

Далее во все важные формы подставляйте инпут со значением текущего хеша пользователя:

Во время выполнения скрипта осуществляйте проверку:

Проверка. Ошибка №5.

При выводе SQL ошибок сделайте простое ограничение к доступу информации. Например задайте пароль для GET переменной:

Это позволит скрыть от хакера информацию, которая может ему помочь во взломе сайта.

Проверка. Ошибка №5.

Старайтесь не подключать файлы, получая имена файлов извне.
Например:

В таком случаи вы предотвратите подключение файлов, которые не были вами предусмотрены.

Совет.

Для большей надежности используйте один из готовых и популярных классов для фильтрации данных, дабы самому не пропустить какие-то вредоносные символы/данные. Также в этих классах часто имеется возможность выбора фильтра данных.

UPD: Поправил пост. Перенес все советы по поводу функций и переменных, которые были в комментариях.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *