Основы PHP

Отличие веб приложения от обычной программы

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

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

Но веб программирование отличается от обычной программы. В момент когда пользователь видит перед собой страницу и начинает совершать какие-то действия с ней, PHP уже завершил работу. И пользователь взаимодействует не с PHP скриптом, а со страницей HTML, которую он получил в браузер.Результатом работы скрипта на PHP в большинстве случаев является обычный HTML текст.

Читать дальше >

На заметку PHP программисту

1. Все элементы массива $_SERVER, начинающиеся со слова "HTTP_" - это HTTP заголовки. HTTP заголовки присылает клиент и верить им нельзя, так как их легко подделать. Их можно использовать дополнительно в справочных целях, которая, возможно, даст полезную информацию. 

2. Для логирования IP адреса пользователя использовать только REMOTE_ADDR, а всякие HTTP_X_FORWARDED_FOR, X_REAL_IP, VIA использовать только для дополнительной информации.

Читать дальше >

Источники PHP

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

Читать дальше >

Защита от SQL-инъекций

Отключаем "волшебные кавычки"

В настройках php, т.е в файле php.ini надо отключить следующее:
magic_quotes_gpc
magic_quotes_runtime

Если у вас нет доступа файлу php.ini отключить их можно в файле .htaccess:

php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0

Нам нужно их отключить, потому что они могут нам мешать. Начиная с версии 5.3.0 она считается устаревшей, а в 5.4.0 и вовсе удалена.

Читать дальше >

Профайлинг xDebug

Думаю многие программисты занимаются профайлингом. Это заметка для новичков как установить профайлер xDebug. 

Предполагается, что у вас:
- Операционная системы Ubuntu 12.04
- Установлен Apache2.
- Установлен PHP 5.3 или выше.
- Установлен xDebug.

Читать дальше >

Советы по улучшению кода

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

Читать дальше >

PhpMetrics инструмент статического анализа для PHP

Нашел очень интересный инструмент для анализа кода - PhpMetrics.

Мне понравилось легкость его установки и больше количество разных метрик.

Конечно, нельзя приводить свой код к такому виду, чтобы он соответствовал всем этим метрикам. В таком случае вероятно код станет ещё хуже.

Такие инструменты я думаю больше всего подходят Техлидам или Архитекторам. В генерируемых графиках есть такие метрики как Нестабильность и Абстрактность приведенные в книге Роборта Мартина "Чистая Архитектура". Он пишет про эти метрики в Принципе Устойчивых Абстракций. И именно эта метрика мне больше понравилась.

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

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

Про эти и другие метрики можете прочитать в приведенных ниже ссылках.

https://habr.com/ru/post/456150/
https://habr.com/ru/company/intel/blog/106082/

Также можете обратить на другие статические анализаторы для PHP:

  1. Psalm
  2. PHPStan
  3. PHP Depend
Читать дальше >