Для чего используют PHP и почему его ненавидят
Для чего нужен язык программирования PHP: какие возможности он дает, что можно реализовать с его помощью и в чем главная боль PHP-разработчиков.
vlada_maestro / shutterstock
PHP — один из самых популярных языков программирования в веб-разработке. Он применяется для создания сайтов и веб-приложений любой сложности: от лендингов и блогов до интернет-магазинов и браузерных игр.
Его преимущества — в широких возможностях и защищенности благодаря закрытому исходному коду. К минусам можно отнести то, что без сервера с интерпретатором код работать не будет (исправлено в новых версиях языка).
Какие задачи можно решить на PHP
Для начала работы создается страница с расширением .php или .html (в зависимости от конфигурации сервера). Исходный код этой страницы содержит теги разметки html и непосредственно PHP-команды. Они заключаются между операторами <? PHP (допустимо писать <?) и ?>. Вот как выглядит подобный код:
Открыв эту страницу, пользователь увидит надпись «Здравствуйте, Петя!». Если вы уже знакомы с программированием, то могли заметить, что $username — это переменная, а команда echo используется для вывода данных на экран.
В PHP поддерживаются применение функций, математические вычисления, работа с переменными (как в примере выше) и массивами, прописывание условий «если — то», создание объектов и многое другое. Чаще всего это используется:
- для отправки форм;
- работы с базами данных;
- создания динамичных страниц;
- использование сессий и cookies;
- загрузки и обработки файлов;
- создания изображений;
- парсинга.
Теперь обо всем этом по порядку.
Формы
Если вы знакомы с html, то знаете, что с его помощью нельзя просто так получить информацию, введенную пользователем. То есть вы можете создать красивую форму, но без PHP или другого подобного языка все данные просто исчезнут, когда он нажмет кнопку «Отправить».
Для начала создается форма подобного вида:
У тега <form> есть два атрибута: action и method. В первом указывается страница, куда будут отправлены данные, а во втором — метод передачи. Всего их два:
- POST — безопасный, но медленный метод. Им пользуются для передачи конфиденциальной информации: пароли, логины, адреса и так далее.
- GET — простой, но уязвимый метод. Вы могли видеть ссылки вида index.php? page=8& category=2. Информация записывается прямо в ссылку, и любой может поменять ее значение или поделиться ею, поэтому лучше не передавать так ничего секретного и позаботиться о дополнительной безопасности.
Из формы на страницу auth.php будут переданы переменные login и password. В зависимости от метода они попадут в супермассив $_POST или $_GET. Дальше на этой странице можно будет сделать с ними все что угодно, в том числе и проверить их наличие в базе данных.
Читайте также:
Базы данных
К сайту на PHP подключается база данных. Это во многом упрощает разработку, потому что вся информация будет храниться в таблицах, а не в самом коде. Так быстрее редактировать и добавлять данные на сайт.
Например, сведения о пользователе. Если бы не базы данных, пришлось бы хранить все авторизационные данные в коде, а это не лучший вариант, потому что тогда загрузка длилась бы вечность.
Продолжим пример с авторизацией. Страница auth.php получает логин и пароль. Дальше она может сделать запрос в базу данных, чтобы узнать, существует ли такая комбинация.
Разумеется, это очень упрощенная версия кода, которую вряд ли можно назвать защищенной. На самом деле нужно выполнить множество проверок, чтобы исключить вероятность SQL-инъекции — это когда пользователь пытается ввести некорректную информацию, чтобы получить доступ к базе данных.
Динамичные страницы
Это одна из лучших возможностей PHP. Представьте, что вы создали десять страниц на html. Если вы захотите внести изменение в дизайн, то придется переделывать все десять файлов. А если страниц будет несколько десятков, сотен или даже тысяч, то нужно будет заняться и ими.
На PHP достаточно создать один файл, который будет отвечать за главную страницу, каталог товаров и все остальное.
Чтобы сделать это, используйте метод GET. Если пользователь перейдет по ссылке index.php, он окажется на главной. А если введет index.php? page=articles& id=5, то увидит статью с идентификатором пять.
Также можно подключать другие файлы с помощью функции include (). Допустим, у вас есть несколько страниц:
- index.php;
- contacts.php;
- cart.php;
- about.php и так далее.
И вам нужно, чтобы на этих страницах были какие-то общие элементы — например, одинаковые шапка и подвал сайта. Для этого вы можете создать файл с разметкой для этих элементов и подключать его в нужных местах.
Это экономит массу времени и места, потому что не нужно каждый раз прописывать этот код заново.
Также обратите внимание, что подключаемые файлы лучше хранить в отдельной папке. В файле .htaccess нужно запретить доступ к содержимому этого каталога напрямую. Это обезопасит ваш сайт от утечки данных.
Что такое .htaccess?
Это файл конфигурации сервера, который позволяет управлять страницами сайта. В нём можно прописывать настройки редиректа, безопасности и отображения страниц, а также оптимизировать скорость загрузки контента. Обычно файл .htaccess лежит в корневой папке, но может находиться где угодно — тогда настройки в нём будут действовать только на файлы из этого раздела. Создать и редактировать .htaccess можно с помощью любого текстового редактора.
Сессии и куки
Следующая интересная возможность — сессии и куки. Они нужны для того, чтобы не забивать базу данных и хранить часть информации на компьютере пользователя. Например, многие интернет-магазины помещают в куки пользователя данные о посещениях и просмотренных товарах, чтобы потом вывести не «Добро пожаловать! Посмотрите наши гироскутеры!», а «Рады снова вас видеть! Вернулись за гироскутером XYZ?».
Также их можно использовать для создания системы авторизации.
Работать с такими вещами нужно аккуратно, потому что можно забить данными компьютер пользователя или нарушить законодательство некоторых стран. По европейским и российским законам, например, вы обязаны спросить разрешение на использование cookies.
Файлы
Можно реализовать не только загрузку файлов на сервер, но и их редактирование.
Вот пример кода, позволяющий редактировать данные в блокноте:
На PHP вполне можно создать файловый менеджер или текстовый редактор.
Изображения
Используется, например, для реализации капчи, когда нужно, чтобы каждый раз выводилось уникальное число. Для этого создается файл captcha.php, а потом он указывается как ссылка на изображение.
В самом этом файле генерируется случайное число, а потом выводится на изображение. Или можно обрезать картинку, загруженную пользователем. Например, если необходимо подогнать все аватарки под один размер.
Если вы собираетесь использовать этот код, добавьте масштабирование и поработайте над соотношением сторон.
Парсинг
Парсинг — это сбор информации с других сайтов. Например, вы часто могли видеть поиск по сайту, который реализован с помощью Google или «Яндекса».
Так это реализуется с помощью библиотеки PHP Simple HTML DOM Parser. Но, как вы могли заметить, мы получили все ссылки на странице — то есть не только ведущие на найденные сайты, но и ведущие на другие проекты «Яндекса».
Почему программисты ненавидят PHP
Если вы были хоть на одном форуме для программистов, то могли увидеть множество негативных высказываний.
Одна из причин ненависти к PHP — переменные. Если в других языках их нужно объявить заранее, да еще и указав тип, то в PHP можно просто поставить знак «$» в любой части кода.
Сравните код на C:
И код на PHP
С одной стороны, это упрощает жизнь. С другой — в переменную можно поместить что угодно и когда угодно. У них нет какого-то типа, а это значит, что число запросто может стать строкой. Если вы этого не хотели, то вместо вычислений вы получите ошибку. Это и дар, и проклятие одновременно.
Следующая причина — смешанный код. PHP приходится использовать в файлах с версткой HTML. Это затрудняет работу с кодом, потому что не всегда можно легко найти нужный фрагмент или понять, где ты находишься сейчас.
Другие языки, вроде JavaScript, можно выносить в отдельный файл и оттуда взаимодействовать со страницей. В PHP же это будет выглядеть так:
То есть исходный код является смесью двух языков. Хотя этого можно избежать, если не писать код в этом же файле, а подключать другие, как это было в примере с подключением шапки и футера.
Еще PHP достаточно прост в изучении, поэтому на нем создано около 83% сайтов по всему интернету. Его простота стала причиной появления миллионов сайтов с кривым кодом. Поэтому можно сказать, что ненависть вызвана неопытными разработчиками.
Новички любят всё усложнять и пишут так:
Хотя можно написать так:
И хотя таких примеров много и в других языках, именно простота PHP послужила благоприятной средой для появления всего этого добра. Если на C# придется постараться, чтобы заставить кривой код работать, то PHP постарается за вас.
Также можно сказать, что определенная доля предвзятости будет всегда. В новых версиях языка исправлено очень много ошибок, но программисты все равно продолжают смеяться над ними, потому что сложилась такая традиция.
В старых версиях была уязвимость, которая позволяла создать переменную через ссылку. То есть если сейчас из ссылки? var=5 мы получим ячейку в супермассив $_GET, раньше создавалась еще и переменная $var. И если программист забывал выполнить проверку всех данных, то его сайт был в опасности. Сейчас этой уязвимости нет, как и многих других, но мнение людей все равно не меняется.
У PHP на самом деле много недостатков:
- неудобная работа с объектами;
- огромное количество встроенных функций, которое замедляет загрузку и ограничивает в выборе имени для своих функций;
- небольшое количество пакетов и фреймворков;
- неудобные регулярные выражения;
- отсутствие многопоточности и так далее.
Многие ошибки исправляются, и с каждой версией их становится меньше, хотя PHP считают «мертвым» языком уже больше 20 лет.
Заключение
PHP — отличный язык, с помощью которого можно реализовать любой функционал. Хоть его и не любят многие разработчики, со своей задачей он справляется отлично. И неразумно игнорировать его просто потому, что так делают многие, — нужно просто подстроиться под несколько недостатков, чтобы воспользоваться огромным количеством преимуществ.