Код
#статьи

Для чего используют PHP и почему его ненавидят

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

 vlada_maestro / shutterstock

PHP — один из самых популярных языков программирования в веб-разработке. Он применяется для создания сайтов и веб-приложений любой сложности: от лендингов и блогов до интернет-магазинов и браузерных игр.

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

Какие задачи можно решить на PHP

Для начала работы создается страница с расширением .php или .html (в зависимости от конфигурации сервера). Исходный код этой страницы содержит теги разметки html и непосредственно PHP-команды. Они заключаются между операторами <? PHP (допустимо писать <?) и ?>. Вот как выглядит подобный код:

<?
$username = “Петя”; //Переменная с именем пользователя
?>
<div>
<p>Здравствуйте, <? echo $username; ?>!</p>
</div>

Открыв эту страницу, пользователь увидит надпись «Здравствуйте, Петя!». Если вы уже знакомы с программированием, то могли заметить, что $username — это переменная, а команда echo используется для вывода данных на экран.

В PHP поддерживаются применение функций, математические вычисления, работа с переменными (как в примере выше) и массивами, прописывание условий «если — то», создание объектов и многое другое. Чаще всего это используется:

  • для отправки форм;
  • работы с базами данных;
  • создания динамичных страниц;
  • использование сессий и cookies;
  • загрузки и обработки файлов;
  • создания изображений;
  • парсинга.

Теперь обо всем этом по порядку.

Формы

Если вы знакомы с html, то знаете, что с его помощью нельзя просто так получить информацию, введенную пользователем. То есть вы можете создать красивую форму, но без PHP или другого подобного языка все данные просто исчезнут, когда он нажмет кнопку «Отправить».

Для начала создается форма подобного вида:

<form action=”/auth.php” method=”post”> <!--Форма-->
<input type=”text” name=”login” placeholder=”Логин”><br> <!--Поле ввода логина-->
<input type=”password” name=”password” placeholder=”Пароль”><br> <!--Поле ввода пароля-->
<input type=”submit” value=”Войти”> <!--Кнопка отправки данных-->
</form>

У тега <form> есть два атрибута: action и method. В первом указывается страница, куда будут отправлены данные, а во втором — метод передачи. Всего их два:

  • POST — безопасный, но медленный метод. Им пользуются для передачи конфиденциальной информации: пароли, логины, адреса и так далее.
  • GET — простой, но уязвимый метод. Вы могли видеть ссылки вида index.php? page=8& category=2. Информация записывается прямо в ссылку, и любой может поменять ее значение или поделиться ею, поэтому лучше не передавать так ничего секретного и позаботиться о дополнительной безопасности.

Из формы на страницу auth.php будут переданы переменные login и password. В зависимости от метода они попадут в супермассив $_POST или $_GET. Дальше на этой странице можно будет сделать с ними все что угодно, в том числе и проверить их наличие в базе данных.

Базы данных

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

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

Продолжим пример с авторизацией. Страница auth.php получает логин и пароль. Дальше она может сделать запрос в базу данных, чтобы узнать, существует ли такая комбинация.

<?
//Получаем данные из супермассива $_POST в переменные для удобства
$login = $_POST[‘login’];
$password = $_POST[‘password’];
//Делаем запрос в базу данных, чтобы проверить наличие пользователя с таким логином и паролем
$queryResult = mysql_query(“SELECT * FROM userlist WHERE login=’$login’ AND password=’$password’”);
//Выполняем проверку
 If(mysql_num_rows($queryResult) == 1) {
//Если есть1 совпадение, то выводим надпись об успешности операции
echo “Вы успешно вошли!”;
} else {
//Иначе пишем, что комбинация неверна
echo “Неверный логин или пароль!”;
}
?>

Разумеется, это очень упрощенная версия кода, которую вряд ли можно назвать защищенной. На самом деле нужно выполнить множество проверок, чтобы исключить вероятность SQL-инъекции — это когда пользователь пытается ввести некорректную информацию, чтобы получить доступ к базе данных.

Динамичные страницы

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

На PHP достаточно создать один файл, который будет отвечать за главную страницу, каталог товаров и все остальное.

Чтобы сделать это, используйте метод GET. Если пользователь перейдет по ссылке index.php, он окажется на главной. А если введет index.php? page=articles& id=5, то увидит статью с идентификатором пять.

Также можно подключать другие файлы с помощью функции include (). Допустим, у вас есть несколько страниц:

  • index.php;
  • contacts.php;
  • cart.php;
  • about.php и так далее.

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

<body>
<div class=”wrapper”>
<? include(“/includes/header.php”); ?>
<div class=’content’>
Контент сайта: статьи, изображения и прочее.
</div>
<? include(“/includes/footer.php”); ?>
</div>
</body>

Это экономит массу времени и места, потому что не нужно каждый раз прописывать этот код заново.

Также обратите внимание, что подключаемые файлы лучше хранить в отдельной папке. В файле .htaccess нужно запретить доступ к содержимому этого каталога напрямую. Это обезопасит ваш сайт от утечки данных.

Что такое .htaccess?

Это файл конфигурации сервера, который позволяет управлять страницами сайта. В нём можно прописывать настройки редиректа, безопасности и отображения страниц, а также оптимизировать скорость загрузки контента. Обычно файл .htaccess лежит в корневой папке, но может находиться где угодно — тогда настройки в нём будут действовать только на файлы из этого раздела. Создать и редактировать .htaccess можно с помощью любого текстового редактора.

Сессии и куки

Следующая интересная возможность — сессии и куки. Они нужны для того, чтобы не забивать базу данных и хранить часть информации на компьютере пользователя. Например, многие интернет-магазины помещают в куки пользователя данные о посещениях и просмотренных товарах, чтобы потом вывести не «Добро пожаловать! Посмотрите наши гироскутеры!», а «Рады снова вас видеть! Вернулись за гироскутером XYZ?».

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

<?session_start(); //Запуск сессии. Эта строка всегда должна быть первой на странице, где нужно использовать сессии.
//Делаем запрос в базу данных
$queryResult = mysql_query(“SELECT * FROM userlist WHERE login=’$_SESSION[login]’ AND password=’$_SESSION[password]’”);
//Проверяем, есть ли совпадение
 If(mysql_num_row($queryResult) == 1) {
//В случае успеха получаем массив с данными из таблицы
$user = mysql_fetch_array($queryResult);
}
Echo “Добро пожаловать, ”.$user[‘name’].”!”;
?>

Работать с такими вещами нужно аккуратно, потому что можно забить данными компьютер пользователя или нарушить законодательство некоторых стран. По европейским и российским законам, например, вы обязаны спросить разрешение на использование cookies.

Файлы

Можно реализовать не только загрузку файлов на сервер, но и их редактирование.

Вот пример кода, позволяющий редактировать данные в блокноте:

<?
$fileText = file_get_contents(“article.txt”); //Получаем текст из файла
 If(isset($_POST[‘text’])) { //Проверяем, отправил ли пользователь форму
$file = fopen(“article.txt”, ”w”); //Открываем файл для записи
$fileWrite = fwrite($file, $_POST[‘text’]); //Вносим изменения
fclose($file); //Закрываем файл
}
?>
<form method=”post”>
<textarea name=”text”><?echo $fileText;?></textarea><!--Выводим текст в поле для редактирования--><br>
<input type=”submit” value=”Отредактировать”>
</form>

На PHP вполне можно создать файловый менеджер или текстовый редактор.

Изображения

Используется, например, для реализации капчи, когда нужно, чтобы каждый раз выводилось уникальное число. Для этого создается файл captcha.php, а потом он указывается как ссылка на изображение.

<img src=”/captcha.php” title=”Введите код с картинки”>

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

<?
$image = imagecreatetruecolor(100, 100); //Создаем полотно с разрешением100 ×100 пикселей
$avatar = imagecreatefromjpeg(‘avatar_01.jpg’); //Загружаем изображение из файла
//Отрисовываем загруженный файл на полотне 
imagecopyresampled($image, $avatar, 0, 0, 0, 0, 100, 100, 100, 100);
//Сохраняем
imagejpeg($image_p, 'avatar_02.jpg', 100);
?>

Если вы собираетесь использовать этот код, добавьте масштабирование и поработайте над соотношением сторон.

Парсинг

Парсинг — это сбор информации с других сайтов. Например, вы часто могли видеть поиск по сайту, который реализован с помощью Google или «Яндекса».

<?
$query = $_POST[‘query’]; //Получаем запрос пользователя
$searchQuery = “https://yandex.ru/search/?text=site:skillbox.ru+”.$query; //Преобразуем запрос в ссылку
$results = file_get_html($searhQuery); //Получаем страницу
$links = $results->find('a'); //Находим все ссылки на странице
?>

Так это реализуется с помощью библиотеки PHP Simple HTML DOM Parser. Но, как вы могли заметить, мы получили все ссылки на странице — то есть не только ведущие на найденные сайты, но и ведущие на другие проекты «Яндекса».

Почему программисты ненавидят PHP

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

10 худших языков программирования

Одна из причин ненависти к PHP — переменные. Если в других языках их нужно объявить заранее, да еще и указав тип, то в PHP можно просто поставить знак «$» в любой части кода.

Сравните код на C:

int a; //Объявляем числовую переменную
a = 5*10; //Проводим с ней операции

И код на PHP

$a = 5*10; //Объявляем и сразу же начинаем вычисления

С одной стороны, это упрощает жизнь. С другой — в переменную можно поместить что угодно и когда угодно. У них нет какого-то типа, а это значит, что число запросто может стать строкой. Если вы этого не хотели, то вместо вычислений вы получите ошибку. Это и дар, и проклятие одновременно.

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

Другие языки, вроде JavaScript, можно выносить в отдельный файл и оттуда взаимодействовать со страницей. В PHP же это будет выглядеть так:

<div>
<?
$queryResult = mysql_query(“SELECT id,title FROM articles ORDER BY id”);
if(mysql_num_rows($queryResult) >= 1) {
while($article = mysql_fetch_array($queryResult)) {
echo “<a href=’blog.php?id=$article[id]’>$article[title]</a><br>”;
}
} else {echo “Здесь пока нет статей”;}
?>
</div>

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

Еще PHP достаточно прост в изучении, поэтому на нем создано около 83% сайтов по всему интернету. Его простота стала причиной появления миллионов сайтов с кривым кодом. Поэтому можно сказать, что ненависть вызвана неопытными разработчиками.

Новички любят всё усложнять и пишут так:

<?
echo “<!DOCTYPE html>”;
echo “<html>”;
echo “<head>”;
echo “<title>”.$title.”</title>”;
echo “</head>”;
echo “<body>”;
echo $text;
echo “</body>”;
echo “</html>”;
?>

Хотя можно написать так:

<!DOCTYPE html>
<html>
<head>
<title><? echo $title; ?></title>
</head>
<body>
<? echo $text; ?>
</body>
</html>

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

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

В старых версиях была уязвимость, которая позволяла создать переменную через ссылку. То есть если сейчас из ссылки? var=5 мы получим ячейку в супермассив $_GET, раньше создавалась еще и переменная $var. И если программист забывал выполнить проверку всех данных, то его сайт был в опасности. Сейчас этой уязвимости нет, как и многих других, но мнение людей все равно не меняется.

У PHP на самом деле много недостатков:

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

Многие ошибки исправляются, и с каждой версией их становится меньше, хотя PHP считают «мертвым» языком уже больше 20 лет.

Заключение

PHP — отличный язык, с помощью которого можно реализовать любой функционал. Хоть его и не любят многие разработчики, со своей задачей он справляется отлично. И неразумно игнорировать его просто потому, что так делают многие, — нужно просто подстроиться под несколько недостатков, чтобы воспользоваться огромным количеством преимуществ.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия PHP-разработчик с нуля до PRO Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована