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

Зачем программисты изучают язык PHP

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

К преимуществам этого языка относят широкие возможности и закрытый для пользователей код. Основные минусы – на сервере должен быть специальный интерпретатор (недочет исправили в последних версиях языка), а также некоторые особенности синтаксиса, из-за которых множатся скрытые баги и появляется «говнокод». Об этом мы обязательно поговорим чуть ниже. А пока – давайте знакомиться с самим языком.

Какие задачи решают на PHP

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

Выглядит код таким образом:

[php]<? $name = “Маша”; //В переменную вносим имя посетителя ?>

<div>

Привет, <? echo $name; ?>!

//Вывод на экран текста
</div>
[/php]

Если открыть эту страничку, вы увидите на экране «Привет, Маша!». Возможно, вы уже и сами поняли, что $name – это переменная, которой мы присвоили в коде значение, а echo – команда вывода содержимого переменной на экран.

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

Применяют PHP преимущественно:

  • Для интерактивного общения с пользователями: отправки форм, онлайн-чатов и т.д.
  • Работы с БД и файлами;
  • Использования cookies, работы с сессиями;
  • Работы с динамическими страницами, в том числе, с управлением мышью или с тачпада;
  • Создания движущихся изображений;
  • Функций парсинга.

Сайты с использованием PHP могут создаваться двумя методами:

  • HTML-страницы с PHP-вставками. Устаревший вариант, но и сейчас иногда используется. В статичные HTML-страницы добавляется код php в тех местах, где нужна динамика и общение с пользователем. Такие сайты не имеют адин-раздела, все правки, в том числе, изменение контента, выполняются вручную прямо в коде. Большая часть кода остается открытой.
  • PHP-сайты, где HTML-разметка применяется для шаблонов и оформления контента. Привычные всем современные «движки» сайтов, где управление удобно, а страницы каждый раз генерируются при обращении к сайту. В результате код – закрытый, а управление доступно даже пользователям.

Но вернемся к языку и поговорим о его возможностях немного подробнее.

Формы

формы в php

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

В PHP формы реализуются примерно так:

[php]

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

[/php]

Тег <form> имеет 2 атрибута:

  1. POST — метод отправки данных с высокой степенью защиты. Его недостаток – низкая скорость передачи данных. Применяется для авторизации, передачи платежных данных и т.д.
  2. GET — быстрая передача данных, но практически незащищенная. При отправке информация добавляется прямо в ссылку. Это может быть, например, так: index.php?page=8&post=4. Этим методом отправляют сведения, которые нет смысла защищать. Например, переход к определенной странице при нажатии на кнопку.

Описанная выше форма отправит на сервер содержимое двух переменных — login и password. Далее в коде страницы они могут обрабатываться, как удобно. Может проводиться проверка на наличие такой пары в базе пользователей или добавление новой записи, переход в личный кабинет пользователя после проверки или на страницу проверки информации «Пользователя не существует» и т.д.

Работа с базами данных

Одно из преимуществ php-сайтов – большая часть данных, за исключением, разве что, графики и файлов, хранится в таблицах MySQL или другой разновидности базы данных. Это позволяет быстро редактировать любой контент, добавлять нужные сведения на сайт, вносить другие изменения.

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

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

[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 “Неверный логин или пароль!”;
}
?>
[/php]

Само собой, в примере код максимально упрощенный и практически без какой-то защиты. В реальности придется выполнить большое количество проверок, в том числе на SQL-инъекцию, т.е. попытки добавление в поле ввода вместо запрошенной информации фрагментов программного кода для получения доступа к БД.

Создание динамических страниц

Создание динамических страниц

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

Просто представьте, что для внесения небольших изменений в меню или дизайн придется вносить изменения в каждый HTML-файл, соответствующий одной странице сайта. А что делать, если таких страниц тысячи? Или подумайте, как это «весело», в случае выявления опечатки в статье обращаться к программисту. Кто не застал эти времена, поверьте на слово: ситуация не доставляла радости ни пользователям, ни программистам.

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

Для этого применяется метод GET, результат работы которого выглядит следующим образом:

  • по ссылке index.php пользователь оказывается на главной;
  • при добавлении к этой ссылке идентификатора получается ссылка типа: index.php?page=articles&id=3, пользователь увидит  том же дизайне статью, хранящуюся в базе под номером 3.

Кроме того, вы можете к разным страницам подключать файлы-шаблоны при помощи функции include(). Например, у вас есть разные страницы – главная, о компании, каталог товаров и т.д. И на каждой из них должны быть одинаковые элементы – «шапка», «подвал» сайта, верхнее или боковое меню и т.д.

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

[php]<body>
<div class=”wrapper”>
<? include(“/includes/header.php”); ?> //Подключение «шапки» сайта

<div class=’content’>
// Здесь будет любой контент
</div>

<? include(“/includes/footer.php”); ?> // Подключили «подал» сайта
</div>

</body>
[/php]

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

Поговорим о сессиях и cookie

Использование сессий пользователя и файлов куки помогает ускорить работу сайта

Использование сессий пользователя и файлов куки помогает ускорить работу сайта для пользователя и снизить нагрузку на базу данных при помощи хранения части информации прямо на компьютере пользователя. Так, нередко интернет-магазины хранят в cookie информацию о просмотренных товарах, в результате чего при повторном посещении вы получаете подсказки типа «вы просматривали….».  

Также очень удобно пользоваться сессиями для того, чтобы запомнить пользователя. И тогда не придется каждый раз обращаться к базе данных, чтобы проверить авторизацию. Вы же помните любимую многими кнопку «запомнить меня»? И входите на сайт изо дня в день без логинов-паролей. Очень удобно. И сайту не требуется из раза в раз проводить проверку данных.

Например:

[php]<?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’].”!”;
?>
[/php]

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

Работа с файлами

При помощи PHP можно организовать добавление файлов на сервер, а также их редактирование, что особенно интересно.

Приведенный ниже код позволит изменять данные из файла в привычном всем блокноте:

[php]<? $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><!—Выводим текст в поле для редактирования—>
<input type=”submit” value=”Отредактировать”>
</form>

[/php]

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

Что можно делать с картинками

Одна из интересных возможностей работы с графическими файлами применяется при создании капчи

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

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

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

В результате пользователь видит привычную капчу-картинку. А сайт автоматически сравнивает введенные символы с теми, что были сгенерированы.

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

[php]<?
$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);
?>
[/php]

Этот код – не более, чем пример. Для использования его на практике не забудьте добавить масштабирование и проработать правильное соотношение сторон.

Парсинг

Парсингом называют автоматический сбор информации с разных сайтов. Иногда его применяют для сбора информации из справочных каталогов. Но есть и более наглядный пример. Все вы видели на сайтах встроенный Google или Яндекс-поиск. На самом деле, он реализован именно методом парсинга.

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

Этот поиск был реализован при помощи одной из библиотек, которая называется PHP Simple HTML DOM Parser. Обратите внимание, в примере мы получаем все ссылки, которые имеются на странице, т.е. не только на страницы нужного сайта, но и на любые проекты Яндекса. Полноценная реализация поиска по сайту, само собой, не столь проста.

За что программисты не любят PHP

За что программисты не любят PHP

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

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

Казалось бы, такой подход – намного проще и быстрее. Но на самом деле возможность положить в любую переменную что угодно в любой момент времени приводит к багам, искать которые бывает очень сложно.

Например, вам нужно целочисленное число. В том же Си вы в переменную типа int сможете отправить только подходящее по типу значение. Иначе программа «вылетит» по ошибке. В PHP значение прекрасно «поместится» в переменной, ведь типов данных нет. В результате ошибка появился уже на этапе вычислений, если в вашей переменной вместо целого числа окажется, например, строка. Чтобы пользоваться преимуществами такого решения необходима внимательность и опыт. Иначе проблем не избежать.

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

Конечно, можно дисциплинированно подключать HTML из отдельных файлов шаблонов, как это было показано в примере выше с подключением «шапки» и «подвала» сайта, но далеко не все так поступают.

При этом PHP относительно прост в изучении, и писать на нем берутся очень многие. Сегодня в интернете более 80% сайтов написано на PHP. Само собой, что в результате появляется огромное количество «говнокода», что также раздражает опытных разработчиков. Более того, именно PHP стал очень благоприятной средой для того, чтобы плодить подобное «добро». Если в том же C# вы наделаете ошибок, придется очень долго ловить баги, чтобы заставить код начать работать. А PHP начинает работать практически сразу, просто несколько «криво».

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

Кроме того, программисты отмечают в числе недостатков PHP:

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

Ну, и не обходится без традиций и привычек. Уже просто принято ругать PHP и называть его «мертвым языком». При этом постоянно появляются новые версии языка, и работают с ним миллионы людей по всему миру.

Подведем итоги

В общем, PHP – прекрасный и полезный язык, позволяющий создавать практически любой функционал для веб-проектов. Игнорировать его исключительно, наслушавшись коллег, нет никакого смысла. Тем более, что выучить PHP и правда несложно, а пользы для веб-разработчика он приносит много. В конце концов, если вы хотите специализироваться на WEB, даже при остром нежелании, рано или поздно вы столкнетесь с необходимостью внести правки или доработать php-сайт. А недостатки языка нужно изучить и учитывать в процессе работы. В конце концов, идеальных ЯП не существует. А PHP наряду с недостатками имеет огромное количество преимуществ и возможностей.


[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]

3 комментария к “Зачем программисты учат PHP и почему его ненавидят”

  1. как это мало фреймворков?! В PHP больше фреймворков чем в любом другом языке за исключением JS

Оставьте комментарий

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

Прокрутить вверх