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

Current Stable Version (7.3.x) : 7.3.10 //Release Date: 26 Sep 2019

Old Stable Version (7.2.x) : 7.2.23 //Release Date: 26 Sep 2019

Old Stable Version (7.1.x) : 7.1.32 //Release Date: 30 Aug 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://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 (Common Gateway Interface)
  • 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 Interop Group (PHP-FIG). Они известны как Рекомендации по стандартам PHP (PSR). По состоянию на 2 июля 2017 года действуют следующие рекомендации:

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


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

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

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

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

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

Прежде чем оставить свой вопрос, найдите все сообщения об ошибках, о которых сообщает PHP, и посмотрите, сможете ли вы их исправить самостоятельно. Ошибки, такие как "Предупреждение PHP:…" и "В синтаксисе SQL есть ошибка; проверьте руководство…", могут быть довольно легко исправить. Гуглите сообщение об ошибке и ищите его на Qaru. Большинство сообщений об ошибках имеют известные решения. Кроме того, многие из наиболее часто встречающихся сообщений об ошибках были собраны в одну ссылку. Просмотрите его, чтобы увидеть, устранена ли там ваша ошибка. См. Ссылка: Что означает эта ошибка в 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 к этим заполнителям
  • Выполнить подготовленное выражение

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

Notice: the old ext/mysql extension does not support prepared statements. It was deprecated in PHP 5.5 и removed in PHP 7. Use PDO or MySqli instead.

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

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

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

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

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

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

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

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

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

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

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

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

Функция mail() зависит от правильной конфигурации сервера. См. Функция почты PHP не завершает отправку электронной почты для получения списка общих причин. Затем найдите 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() или вызовами функций?

Нет. Смотрите Экземпляр как свойство статического класса; см. Почему атрибуты 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 - String Replace function

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

strlen - Calculate string length

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

and more string functions

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

and more array functions

Ссылка

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


Официальный логотип:

php logo