PHP (PHP: Hypertext Preprocessor) - широко используемый, высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки.

PHP - широко используемый, высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь разработанный для серверной веб-разработки. Первоначальный проект PHP, изобретенный Расмусом Лердорфом, обозначал "Персональную домашнюю страницу". Сегодня это означает рекурсивное сокращение PHP: Hypertext Preprocessor.

Последний стабильный выпуск, изменения разработки и ветки разработки можно найти на веб-сайте PHP, а исходный код, написанный на C, доступен в репозитории PHP GitHub.

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

Есть варианты, такие как Cygwin (Linux на Windows), в которых вы можете установить PHP, как и любой другой Linux - CygWin (Linux на Windows)

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

 php -S localhost:8000

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

Примечание: чтобы сделать онлайн-демонстрацию по вашему вопросу, вы можете использовать кодовую панель, 3v4l или PHP Sandbox, которые действуют как jsfiddle, но для PHP. Тем не менее, все соответствующие коды должны быть включены в ваш вопрос или ответ.

Версии PHP

Текущая стабильная версия (7.3.x): 7.3.2//Дата выпуска: 07 февраля 2019 г.

Старая стабильная версия (7.2.x): 7.2.15//Дата выхода: 07 февраля 2019

Старая стабильная версия (7.1.x): 7.1.26//Дата выпуска: 10 января 2019

Рекомендуется использовать текущую стабильную выпущенную версию. Все версии ниже 7.1 официально не поддерживаются и объявлены как устаревшие. Список поддерживаемых веток и их статус поддержки можно найти здесь.

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

Пример PHP-скрипта

Этот скрипт отображает Hello World! на вашем экране.

<?php 
   echo 'Hello World!';
?>

Чтобы запустить этот скрипт в консоли, сохраните его в текущем рабочем каталоге в файле с именем hello.php и просто выполните команду: php hello.php.

Если на вашем компьютере не установлен PHP - вы можете попробовать этот простой скрипт с помощью Docker, просто запустите:

docker run -it --rm --name php-test php:7.1-cli php -r 'echo "Hello World!";'

Интерактивные оболочки

Для интерактивного тестирования кода PHP в оболочке REPL, посетите http://psysh.org/. Используя это, вы сможете тестировать функции и фрагменты кода без потери контекста для переменных, и выполнение не будет прервано из-за исключений или ошибок.

Информация о конфигурации PHP

Этот скрипт отображает информацию о конфигурации:

<?php 
   phpinfo();
?>

Сохраните файл в корне документа вашего веб-сервера как phpinfo.php и запустите его из браузера. http://localhost/phpinfo.php

Не забудьте удалить его впоследствии по соображениям безопасности.

сообщество

PHP имеет много активных форумов сообщества, в том числе:

Дополнительная информация

Интернет документация

Руководство по PHP - это официальная документация по синтаксису языка, содержащая функцию поиска и ярлыки URL (например, https://secure.php.net/explode). API хорошо документирован для связанных и дополнительных расширений. Большинство дополнительных расширений можно найти в PECL. Репозиторий PEAR содержит множество классов, предоставляемых сообществом. Также можно скачать автономную версию документации здесь.

Кроме того, PHP Framework Interop Group (PHP-FIG) создала наборы стандартов в отношении стилей и стандартов кодирования PHP. Эти стандартные рекомендации PHP (PSR) можно найти здесь.

Учебники по PHP

Информация о безопасности PHP

Бесплатные онлайн-уроки

Бесплатные книги по программированию на PHP

Поддержка базы данных

PHP поддерживает широкий спектр баз данных, как реляционных, так и нереляционных.

PHP часто соединяется с реляционной базой данных MySQL. PHP также включает отличную поддержку баз данных для PostgreSQL, SQLite, Microsoft SQL Server (справочник по API), Oracle, IBM DB2 & Cloudscape, Apache Derby и даже ODBC.

Все современные версии PHP включают PDO: встроенную библиотеку абстракций доступа к данным с широкими возможностями подключения. В последнее время появились расширения PECL, которые предлагают поддержку базы данных "NoSQL", включая Apache Thrift (для Apache Cassandra), MongoDB, Redis и другие.

Поддержка SAPI

Как и многие другие приложения, веб-серверы предоставляют API-интерфейсы (интерфейсы прикладного программирования) для расширения своих функциональных возможностей с помощью сторонних расширений. API, предоставляемый веб-сервером, обычно называется SAPI (Server API). Используя разные SAPI, PHP может работать на разных веб-серверах как серверный язык сценариев. Список веб-серверов, связанных с поддерживаемыми SAPI, включает в себя:

Если конкретный SAPI не поддерживается сервером, то можно использовать один из общих интерфейсов, которые широко поддерживаются веб-серверами. Они включают:

  • CGI (Общий интерфейс шлюза)
  • FPM (менеджер процессов FastCGI)

Изначально PHP был предназначен для разработки серверных веб-приложений, но могут быть разработаны и автономные и клиентские приложения. Чтобы соответствовать своей серверно-ориентированной архитектуре, PHP определяет и реализует CLI (интерфейс командной строки) SAPI для этих приложений.

PHP также может быть использован как средство отправки почты (portmanteau для почтового фильтра).

Полезный сторонний код и инструменты

В дополнение к обширной функциональности, предоставляемой в ядре PHP и через PEAR и PECL, в мир PHP внесен ряд примечательных сторонних вкладов, некоторые из которых перечислены ниже:

Управление пакетами с помощью Composer

Composer - это инструмент управления пакетами для PHP, вдохновленный npm для NodeJS и Bundler для Ruby. Это позволяет указывать зависимости для каждого проекта в файле JSON.

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

Композитор решает следующие проблемы:

  1. У вас есть проект, который зависит от ряда библиотек.
  2. Некоторые из этих библиотек зависят от других библиотек.
  3. Вы объявляете вещи, от которых зависите.
  4. Composer определяет, какие версии каких пакетов необходимо установить, и загружает их в каталог (обычно vendor) в вашем проекте.

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

Каркасы

PHP имеет множество объектно-ориентированных сред веб-приложений, которые предоставляют множество общих функций, необходимых для создания современных веб-приложений из коробки. Наиболее известными являются:

Системы управления контентом

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

Объектно-реляционное отображение

Объектно-реляционные карты пытаются решить или смягчить проблему несоответствия объектно-реляционного импеданса путем прозрачного отображения между структурами таблиц в базе данных и бизнес-объектами приложения. Наиболее известные ORM в мире PHP:

WebSockets

WebSocket - это компьютерный коммуникационный протокол, который обеспечивает полнодуплексные каналы связи по одному TCP-соединению.

Популярные вопросы и ответы

Инструменты обеспечения качества

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

Популярные вопросы и ответы

Иды

Интегрированная среда разработки (IDE) - это программное обеспечение, которое предоставляет большинство инструментов, необходимых для создания другого программного обеспечения, в удобной упаковке. Стандартными функциями IDE обычно являются редакторы исходного кода с подсветкой синтаксиса, дополнением кода, а также функциональностью отладки, поддержкой сборки, интеграцией системы контроля версий и многим другим. Некоторые из основных известных PHP IDE:

Популярные вопросы и ответы

Стандарты и соглашения по кодированию

Существует ряд стандартов кодирования, которые были предложены и приняты группой взаимодействия PHP Framework (PHP-FIG). Они известны как Рекомендации по стандартам PHP (PSR). По состоянию на 2 июля 2017 года действуют следующие рекомендации:

Полный список всех рекомендаций, а также их статус можно найти на странице рекомендаций PHP-FIG.


Часто задаваемые вопросы

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

У меня типичная проблема "не работает". Что я должен сделать, прежде чем задать вопрос?

Причины типичной проблемы "не работает" или "работает на локальном хосте, но не работает на производственном сервере" можно легко диагностировать, установив для параметра display_errors значение On или 1.

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

Прежде чем оставить свой вопрос, найдите все сообщения об ошибках, о которых сообщает PHP, и посмотрите, сможете ли вы их исправить самостоятельно. Такие ошибки, как "Предупреждение PHP:…" и "В вашем синтаксисе SQL есть ошибка; проверьте руководство…", могут быть довольно легко исправить. Гуглите сообщение об ошибке и найдите его в переполнении стека. Большинство сообщений об ошибках имеют известные решения. Кроме того, многие из наиболее часто встречающихся сообщений об ошибках были собраны в одну ссылку. Просмотрите его, чтобы увидеть, устранена ли там ваша ошибка. См. Ссылку: Что означает эта ошибка в PHP?

display_errors можно установить значение On несколькими способами. На вашей машине для разработки вы должны установить значение, отредактировав файл php.ini. На производственном сервере, если невозможно (или желательно) редактировать этот файл, добавьте эти строки в начале скрипта:

// Turn on all error reporting
error_reporting(-1);

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

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

Убедитесь, что вы не скрываете ошибки, используя синтаксис @. Это не очень хорошая практика, особенно во время разработки, когда вы хотите получать уведомления об ошибках. Из руководства:

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

Вы можете быстро переопределить это поведение с помощью set_error_handler("var_dump"); который грубо печатает все сообщения об ошибках независимо от @decorators или отключил error_reporting.

Является ли PHP уязвимым? Как мне защитить мое PHP-приложение?

Что касается безопасности, вы не можете обеспечить безопасность своего приложения на 100%. 100% безопасное приложение не существует в реальном мире, но вы можете уменьшить вероятность взлома вашего приложения, следуя нижеуказанным стандартам:

В приведенных выше ссылках упоминаются общие уязвимости и контрмеры.

Как сделать мои запросы к базе данных безопасными от внедрения SQL?

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

  • Подготовьте инструкцию SQL, содержащую заполнители
  • Привязать переменные PHP к этим заполнителям
  • Выполнить подготовленное выражение

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

Обратите внимание: старое расширение ext/mysql не поддерживает подготовленные операторы. Это устарело в PHP 5.5 и удалено в PHP 7. Вместо этого используйте PDO или MySqli.

Смотрите также

Мои специальные персонажи облажались. Зачем?

Вам нужно узнать, что такое наборы символов, и правильно использовать кодировки в вашем скрипте. Некоторые ресурсы, которые помогут вам начать эту тему:

"Заголовки уже отправлены..."

Вы выводите контент и запускаете PHP по умолчанию Content-type: text/html header, прежде чем сделать свой собственный вызов header(). Есть несколько способов, которыми это может произойти. Проверьте наличие случайного echo или print, пробелов до и после тегов <?php и ?> Или спецификации Unicode. Рассмотрите возможность использования буферизации вывода. Во многих сценариях нет необходимости включать окончание ?> И проблема легко решается удалением тега окончания ?> Из ваших файлов. Смотрите Как исправить ошибку "Заголовки уже отправлены" в PHP.

Как сделать электронную почту защищенной от внедрения электронной почты?

Подтвердите ваш вклад! В последних версиях PHP mail() больше не уязвим для вставки заголовка электронной почты через строку темы или получателя, поскольку он удаляет все управляющие символы, но вы можете убедиться, что список получателей не содержит несколько адресов если это не то, что вы хотите. Если вы разрешаете пользователю указывать часть тела сообщения, вы также должны проверить или дезинфицировать его, чтобы он не мог, например, добавить новые части MIME или преждевременно завершить их. Поэтому для создания сообщений MIME настоятельно рекомендуется использовать библиотеку. Смотрите, например, PEAR Mail_Mime.

Могу ли я защитить свой PHP-код от кражи? Если так, то как?

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

Как можно писать строки в PHP?

Существует четыре способа написания строковых литералов в PHP. Каждый метод немного отличается с точки зрения escape-последовательностей и интерполяции строк. Например, '\n' - это буквенная двухсимвольная строка с символами \ и n, а "\n" - это односимвольная строка с символом LF. Все они выдают значения типа string (который на самом деле является байтовым массивом, так как он полностью не кодируется).

Когда/почему функция mail() не работает?

Функция mail() зависит от правильной конфигурации сервера. Посмотрите, что функция PHP mail не завершает отправку электронной почты по списку распространенных причин. Затем исследуйте PHPMailer/SwiftMailer как альтернативу.

Что означает конкретный оператор в PHP?

Посмотрите эту вики-страницу сообщества для полезного списка.

Как мне разобрать HTML/XML с PHP?

Посмотрите, как вы анализируете и обрабатываете HTML/XML в PHP? и Лучший XML-парсер для PHP.

Как включить отчеты об ошибках, чтобы найти источник проблем?

Посмотрите производственный сервер PHP - включите сообщения об ошибках. Обычно вам нужно просто error_reporting(E_ALL); вверху вашего скрипта, если только там нет ошибки разбора. Как очень грубый метод set_error_handler("var_dump"); переопределяет все необычные параметры отключения. А в случае внутренней ошибки сервера HTTP 500 или совершенно пустой страницы, вам часто нужно сначала заглянуть в веб-серверы error.log.

Как исправить сообщения "eregi is deprecated" и перейти на preg_match()?

См. Как я могу преобразовать выражения ereg в preg в PHP? ,

Почему mysqli_fetch_array() или mysqli_fetch_assoc() возвращают только одну строку?

Многие функции выборки СУБД должны вызываться в цикле, пока ресурс результата запроса не вернет FALSE.

// A common looping pattern, appending result rows onto the array $rowset
$result = mysqli_query($link, "SELECT column1, column2 FROM table");
if ($result) {
  $rowset = array();
  while ($row = mysqli_fetch_array($result)) {
    // Append the current row onto $rowset
    $rowset[] = $row;
  }
}
else {
  echo mysqli_error($link);
}

Могу ли я заполнить свойства класса new object() вызовами new object() или вызовами функций?

Нет. Смотрите Instance как свойство статического класса; см. Почему атрибуты PHP не разрешают функции? за попытку объяснения.

Как я могу исправить ошибку mysqli_fetch_array() или mysqli_fetch_assoc() expects parameter 1 to be resource, boolean given?

Это вызвано ошибочным запросом, который обычно указывает на синтаксическую ошибку в операторе SQL. Другой распространенной причиной является использование зарезервированного ключевого слова MySQL в качестве имени таблицы или столбца, не заключая его в обратные ноты. Например:

$query = 'SELECT order FROM my_table'; // This will fail
$query = 'SELECT 'order' FROM my_table'; //This will work

Используйте echo mysqli_error($link) для просмотра сообщения об ошибке, сгенерированного MySQL.

Как мне подтвердить адрес электронной почты?

Просто используйте filter_var() с фильтром FILTER_VALIDATE_EMAIL. См. Как проверить адрес электронной почты в PHP.

Как мне декодировать и извлекать данные JSON?

См. Как извлечь данные из JSON с помощью PHP? и примеры json_decode() в руководстве о том, как пройти через полученные структуры объекта/массива.

Почему моя назначенная переменная сеанса не появляется в следующем сценарии?

Переменные сеанса требуют запуска сеанса. Пожалуйста, просмотрите страницу руководства для session_start().

Кроме того, файлы cookie должны быть включены, как описано на этой странице Google.

Что означает мое сообщение об ошибке:

Многие из наиболее часто встречающихся сообщений об ошибках в PHP собраны в одну ссылку.

См. Ссылку: Что означает эта ошибка в PHP?

Как отсортировать массивы?

Вы не поверите, как часто возникает этот вопрос, поэтому мы сделали ссылку на него:

Справка: все основные способы сортировки массивов в PHP

Как я могу получить значение из сложного вложенного массива и/или объекта?

Вы должны понимать структуры, о которых сообщают отладочные служебные функции var_dump() и print_r(), а также различия в том, как отображаются массивы и объекты stdClass.

См. Ссылку: Как я могу получить доступ к массиву/объекту

Встроенные массивы и строковые функции в PHP

В PHP есть ряд встроенных функций для управления строкой или массивом. Несколько основных функций включают в себя:

str_replace - функция замены строк

Заменяет содержимое и вхождение чего-либо или части строки на другое.

strlen - вычисляет длину строки

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

и больше строковых функций

is_array - находит, является ли переменная массивом или нет

и больше функций массива

Ссылка

Связанные теги