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

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

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

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

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

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

 php -S localhost:8000

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

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

Версии PHP

Текущая стабильная версия (7.2.x): 7.2.11//Дата выхода: 11 октября 2018 г.

Старая стабильная версия (7.1.x): 7.1.23//Дата выпуска: 11 октября 2018 г.

Старая стабильная версия (7.0.x): 7.0.32//Дата выпуска: 13 сентября 2018 г.

Текущая стабильная версия (5.6.x): 5.6.38//Дата выпуска: 13 сентября 2018 г.

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

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

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

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

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

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

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

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 вашего веб-сервера как phpinfo.php и запустите его из браузера. http://localhost/phpinfo.php

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

сообщество

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

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

Онлайн-документация

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

Кроме того, группа PHP 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, включает:

PHP можно запускать на многих других серверах. Для того, чтобы PHP запускался на данном веб-сервере, требуется только, чтобы сервер реализовал один из поддерживаемых SAPI. Например, веб-сервер Sambar может взаимодействовать с PHP через SAPI, который является родным для Microsoft IIS (внутренне называемый isapi в PHP). Кроме того, если конкретный веб-сервер SAPI не поддерживается, можно использовать один из общих интерфейсов, который широко поддерживается веб-серверами. Они включают:

  • CGI (общий интерфейс шлюза)
  • FastCGI
  • FPM (FastCGI Process Manager)

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

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

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

В дополнение к обширной функциональности, предоставляемой в PHP Core, а также через 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 Interop Group (PHP-FIG). Они известны как рекомендации стандартов PHP (PSR). По состоянию на 2 июля 2017 года действуют следующие рекомендации:

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


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

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

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

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

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

Прежде чем отправлять свой вопрос, найдите все сообщения об ошибках, отправленные PHP, и посмотрите, можете ли вы их исправить самостоятельно. Ошибки, такие как "Предупреждение PHP:..." и "У вас есть ошибка в синтаксисе SQL, проверьте руководство...", может быть довольно легко исправить. Отправьте сообщение об ошибке и найдите его в Stack Overflow. Большинство сообщений об ошибках имеют хорошо известные решения. Кроме того, многие из наиболее часто встречающихся сообщений об ошибках были скомпилированы в одну ссылку. Посмотрите, чтобы увидеть, исправлена ли ваша ошибка там. См. Ссылку: Что означает эта ошибка в 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(). Это может произойти несколькими способами. Проверьте наличие блуждающего echo или print, пробел до и после тегов <?php и ?> Или спецификацию Юникода. Рассмотрим использование буферизации вывода. Со многими сценариями нет необходимости включать окончание ?> И проблему легко устранить, удалив тег окончания ?> Из ваших файлов. См. Как исправить ошибку "Заголовки уже отправлены" в PHP.

Как я могу защитить E-Mail от E-Mail?

Подтвердите свой ввод! В последних версиях 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 debrecated" и переключиться на preg_match()?

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

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

Многие функции сбора RDBMS должны вызываться в цикле, пока ресурс результата запроса не возвращает 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.

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

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

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

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

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

Переменные сеанса требуют запуска сеанса. Ознакомьтесь со справочной страницей session_start().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

strlen - Рассчитать длину строки

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

и более строковые функции

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

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

Ссылка

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