Экстракт PHP

PHP - Hypertext Preprocessor (первоначально PHP/FI - Personal Home Page / Form Interpreter), а позже названный Personal Home Page Tools. Это скриптовый язык общего назначения, использует большое число синтаксических заимствований из C, интенсивно применяется для разработки серверной части веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов.

Основы

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

Вставки PHP в страницу выполняются внутри ограничителей  <?php ?>. Допускается (но признано устаревшим и практически не используется) использование сокращённого варианта <? ?>. Кроме того, до версии 7.0 допускалось использование ограничителей языка программирования ASP <% %> и <script language="php"> </script>. Работа сокращённых конструкций определяется в конфигурационном файле php.ini.

Синтаксис

!!!!!!!!!

Отдельные выражения PHP завершаются  ; , но в некоторых случаях допускаются исключения.

Ключевые слова (например, if, else, while, echo и т. д.), классы, функции и пользовательские функции не чувствительны к регистру.

PHP поддерживает три типа комментариев: в стиле языка Си (ограниченные /* */), C++ (от // и до конца строки) и оболочки UNIX (от # и до конца строки).

Имена переменных начинаются с символа $, тип переменной объявлять не нужно. Имена переменных и констант чувствительны к регистру символов. Имена классов, методов классов и функций к регистру символов не чувствительны. Переменные обрабатываются в строках, заключённых в двойные кавычки "", и heredoc-строках (строках, созданных при помощи оператора <<<). Переменные в строках, заключённых в одинарные кавычки '' и nowdoc не обрабатываются.

Инструкции разделяются с помощью точки с запятой ;, за исключением некоторых случаев, после объявления конструкции if else и циклов while.

Переменные

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

В PHP есть три разных области видимости переменных:

  • local действуют в пределах области определения функций
  • global действуют в области всего скрипта
  • static сохраняет значение за пределами определения в области функции, но доступна только в области функции.

Все глобальные переменные PHP доступны в массиве через индекс имени переменной: global $day="sunday"; echo($GLOBALS['day']); $GLOBALS['day']="monday";

Типы

Скалярные типы значений:

  • int целочисленный
    • !!! зависит от системы
      • знаковое 32 бит в диапазоне -2_147_483_648..2_147_483_647.
      • in 64 bit systems. -9223372036854775808..9223372036854775807
      • PHP_INT_MAX - The largest integer supported
        PHP_INT_MIN - The smallest integer supported
        PHP_INT_SIZE - The size of an integer in bytes
    • для целочисленных констант и представлений доступны нотации
      • 1234; // десятичное число
      • 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)
      • 0o123; // восьмеричное число (начиная с PHP 8.1.0)
      • 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
      • 0b11111111; // двоичное число (эквивалентно 255 в десятичной системе)
      • 1_234_567; // десятичное число (с PHP 7.4.0)
  • float число с плавающей точкой
  • bool логический:
    • значения {true, false}
  • string строковый
    • строковый константы в нотации с одинарными и двойными кавычками равноценны: "abc" == 'abc'

Нескалярные типы значений:

  • null - это особый тип данных с единственным значением NULL, которое принимают неинициализированные переменные, инициализированные константой null, удалённые с помощью unset()
  • array массив PHP является ассоциативной коллекцией
    • array("Volvo","BMW","Toyota");
  • object - тип экземпляра класса
    • объект создается $week = new Week();
    • публичные свойства и методы объекта доступны: echo($week -> today);
  • resource внешний ресурс, который не является типом данных PHP, но позволяет получить к нему доступ

Константа

/

  • define(string $name, mixed $value, bool $case_insensitive = false): bool определяет именованную константу во время выполнения
    • name - имя константы, рекомендуется придерживаться правил для имен переменных, не использовать зарезервированные имена
    • value - значение константы, допустимые типы int, float, string, bool или null, в PHP 7 к разрешенным типам добавлен array
    • case_insensitive - если параметр установлен как true, то константа будет определена без учёта регистра. По умолчанию константа чувствительна к регистру, то есть CONSTANT и Constant представляют разные значения
      • Начиная с PHP 7.3.0, определение нечувствительных к регистру констант объявлено устаревшим. Начиная с PHP 8.0.0, допустимым значением является только false, передача true вызовет предупреждение.
      • Нечувствительные к регистру константы хранятся в нижнем регистре.
  • defined(string $name): bool проверяет существование и наличие значения указанной константы
  • constant(string $name): mixed Возвращает значение константы, указанной в параметре name.

define("GREETING", "Welcome to W3Schools.com!");
echo GREETING;

Массив

Существует более 80 php-функций выполняющих обработку массива.

Индексированный массив

Массив с элементами доступными через числовые индексы создается  функцией Array() или непосредственным присвоением индексированных значений. Начальный индекс массива всегда 0:

//

Ассоциативный массив

В ассоциативном массиве хранятся пары ключ=>значение.

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

Многомерный массив

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

Предопределённые константы

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

  • __FILE__ содержит полный путь и имя текущего файла с развёрнутыми симлинками; для файла подключенного через include контанта содержит путь подключаемого файла
  • __DIR__ содержит полный путь директории файла; не содержит слеш в конце, за исключением корневой директории; эквивалентно вызову dirname(__FILE__)
  • __FUNCTION__ содержит имя функции или {closure} для анонимной функции
  • __LINE__ текущий номер строки в файле
  • __TRAIT__ содержит имя трейта
  • __CLASS__ имя класса при использовании в методах
  • __METHOD__ имя метода класса
  • __NAMESPACE__ имя текущего пространства имён

Предопределённые переменные

/

Суперглобальные массивы /Superglobal arrays

/

  • $GLOBALS - Ассоциативный массив (array), содержащий ссылки на все переменные, определённые в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива
  • $_​SERVER - информация о сервере и среде исполнения
    • [REQUEST_URI] => /wp-admin/admin-post.php
    • [USER] => admin
    • [SCRIPT_NAME] => /admin-post.php
    • [QUERY_STRING] =>
    • [REQUEST_METHOD] => POST
    • [REDIRECT_URL] =>
    • [REQUEST_SCHEME] => https
    • [REMOTE_ADDR] => 88.63.3.65
    • [HTTP_REFERER] => https://reks.biz/wp-content/themes/spacious/page-templates/lang-debug.php
    • [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
    • [CONTENT_TYPE] => application/x-www-form-urlencoded
    • [HTTP_ORIGIN] => https://reks.biz
    • [HTTP_HOST] => reks.biz
    • [HTTPS] => on
    • [HTTP_AUTHORIZATION] =>
    • [UNIQUE_ID] => XxXXxXXxXXXxxXXxXxxXXxXXxXx
    • [PHP_SELF] => /wp-admin/admin-post.php
    • [REQUEST_TIME_FLOAT] => 1659966100.5367
    • [REQUEST_TIME] => 1659966100
  • $_​GET - переменные HTTP GET, ассоциативный массив переменных, переданных скрипту через параметры URL (известные также как строка запроса), массив заполняется не только для GET-запросов, а скорее для всех запросов со строкой запроса.
  • $_​POST - ассоциативный массив данных, переданных скрипту через HTTP методом POST при использовании application/x-www-form-urlencoded или multipart/form-data в заголовке Content-Type запроса HTTP.
  • $_​FILES ассоциативный массив элементов, загруженных в текущий скрипт через метод HTTP POST.
  • $_​REQUEST - Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
  • $_​SESSION - Ассоциативный массив, содержащий доступные переменные сессии
  • $_​ENV - Ассоциативный массив (array) значений, переданных скрипту через переменные окружения. Эти значения импортируются в глобальное пространство имён PHP из системных переменных окружения, в котором запущен парсер PHP. Большинство значений передаётся из командной оболочки, под которой запущен PHP, и в разных системах, вероятно, используются разные типы оболочек поэтому окончательный список невозможно представить. Некоторые переменные окружения включают CGI-переменные, причём их наличие не зависит от того, запущен ли PHP как модуль сервера или как препроцессор CGI.
  • $_​COOKIE - Ассоциативный массив (array) значений, переданных скрипту через HTTP Cookies.
  • $http_​response_​header - Массив похож на функцию get_headers(). При использовании обёртки HTTP, $http_response_header будет заполняться заголовками ответа HTTP. $http_response_header будет создан в локальной области видимости.
  • $argc содержит количество аргументов, переданных текущему скрипту при запуске из командной строки
  • $argv содержит массив всех аргументов, переданных скрипту при запуске из командной строки.
    • первый аргумент $argv[0] всегда содержит имя файла запущенного скрипта
    • также доступен как $_SERVER['argv'].

Базовые конструкции

Условия

Тернарный оператор - форма сокращённой записи условного выражения
( condition expr ) ? true expr : false expr
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

match () { => , => }

Оператор условия if предполагает два варианта синтаксиса.
if (expression1): statement1;
[elseif (expression2): statement2;]
[else: statement3;]

if ( expression1 ) { statement1; }
[elseif ( expression2 ) { statement2; }]
[else { statement3; }]

switch () { case : break; }

expression false или 0
true или другие значения?

//

 

Оператор цикла

//

//

do {
echo $i;
break;
} while ($i > 0);

//

for (expr1; expr2; expr3)
statement

//

foreach (iterable_expression as $value)
statement
foreach (iterable_expression as $key => $value)
statement

//

Функции

//

Определение пользовательской функции

function fName( $arg1, ... , $arg_2, /* ..., */ $arg_n) : type  type {}

Типизация двоеточием function () : type {}

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

Стрелочные функции

Также называемые короткими замыканиями (short closures), станут хорошим способом писать чистый код в PHP. Такая форма записи будет полезной при передаче замыканий в такие функции как array_map() или array_filter().

  • появились в PHP 7.4
  • Начинаются с ключевого слова fn
  • Могут иметь только одно выражение, также являющееся возвращаемым значением
  • Не поддерживается return
  • Type-hintihg поддерживается в аргументах и возвращаемых значениях

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

Исключения

/

Вывод результата

Как правило, результатом выполнения скрипта PHP является некоторый текст, который web-сервер размещает на странице в том месте, где находился скрипт. Результирующий  текст формируется последовательным использованием оператора echo или print:

  • echo string $expressions [, string $expression] : void является оператором вывода одного или нескольких строковых выражений: echo "Today", " is ", $day;:
    • скобки принадлежат выражению и не являются параметрами функции: echo ("Today" . " is ") . $day;
    • переменные в строковых литералах с двойными кавычками интерполируются echo "Today is $day";
      • для большей наглядности можно использовать фигурные скобки echo "Today is {$day}";
      • для вывода символа $ необходимо использовать формат спецсимвола echo "Today is in the variable \$day";
    • строковое выражение в одинарных кавычках выводится как есть echo "Today is in variable $day';
    • оператор echo ничего не возвращает
  • print является оператором вывода аналогичным echo, который всегда возвращает 1: $printed = print("Today is ") + print($day);

Штатные функции выводного потока

  • header(string $header, bool $replace = true, int $response_code = 0): void  выводит HTTP-заголовок, используется первой в выводе до каких-либо HTML-тегов и даже до пустых строк
  • print_r(); выводит в поток содержание массива, бывает удобным во время отладки

  • printf(string $format, mixed ...$values): int выводит строку, по заданному формату для последовательность значений

Встроенные функции

//

Системные функции

//

  • phpinfo(int $flags = INFO_ALL): bool отправляет в выводной поток информацию о всех параметрах PHP или параметрах выбранного флага, которые содержат информацию о настройках компиляции PHP, о модулях, версии, сервере и среде выполнения, окружении, версии ОС, путях, основных и локальных значениях настроек конфигурации, HTTP-заголовках и лицензии PHP
  • ini_set(string $option, string|int|float|bool|null $value): string|false устанавливает значение заданного параметра конфигурации, которое будет действовать до завершения скрипта, а после завершения вернется к исходному
    • ini_set('log_errors', true) включает логирование ошибкок
    • ini_set('error_log', '/home/reks/domains/reks.biz/logs/php-error-log' ) назначает файл для логирование ошибок
    • ini_set('display_errors', 1) - устанавливает вывод ошибок на экран вместе с остальным выводом, применяется только для разработки и отладки
    • и другие... //www.php.net
  • php_sapi_name(): string|false возвращает тип интерфейса (Server API, SAPI), который использует PHP
    • 'cli' указывает на вызов в командной строке консоли
    • неполный список других значений: apache, apache2handler, cgi, cgi-fcgi, cli-server, embed, fpm-fcgi, litespeed, phpdbg
  • error_log( string $message, int $message_type = 0, ?string $destination = null, ?string $additional_headers = null ): bool Отправляет сообщение об ошибке в лог веб-сервера или в пользовательский файл
  • var_export(mixed $value, bool $return = false): ?string  выводит информацию о переменной в строку
Ошибка 500 (Internal Server Error)

При выполнении PHP ошибка сервера 500 может произойти и не оставить никаких следов в логах, несмотря на команды логирования, если произойдет на этапе синтаксической проверки до начала выполнения php-команд. Поиск источника такой ошибки может стать проблемой слепого поиска "черной кошки в темной комнате".

В такой ситуации следует создать другой отладочный скрипт и вызвать скрипт с ошибкой из него:

Функции для работы со значениями

//

  • var_dump($x) - выводит информацию о переменной в поток вывода
  • isset() — Определяет, была ли установлена переменная параметра (или всех параметров) значением, отличным от null
  • unset(mixed $var, mixed ...$vars): void - удаляет перечисленные переменные;
  • is_bool(mixed $value): bool Проверяет, является ли данная переменная булевой
  • is_string(mixed $value): bool проверяет, является ли данная переменная строкой
  • is_numeric(mixed $value): bool Определяет, является ли данная переменная числом или строкой, содержащей число
  • is_int()
  • is_float()
  • is_array(mixed $value): bool Определяет, является ли данная переменная массивом
  • is_null(mixed $value): bool Проверяет, является ли значение данной переменной равным null
  • is_nan()
  • is_finite()
  • is_infinite()
  • gettype(mixed $value): string возвращает имя типа PHP-переменной value
    • "NULL", "boolean", "integer", "double" (в т.ч. для float), "string", "array", "object", "resource", "resource (closed)", "unknown type"
  • settype(mixed &$var, string $type): bool устанавливает тип переменной
    • $type допустимое имя типа : "boolean" или "bool", "integer" или "int", "float" или "double", "string", "array", "object", "null"
  • filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed Фильтрует переменную с помощью определённого фильтра

Функции для работы с числовыми значениями

/

  • intval(mixed $value, int $base = 10): int возвращает значение $value приведенное к целому
    • $base необязательный, по умолчанию 10, основание системы счисления значения строкового $value
  • hexdec(string $hex_string): int|float возвращает десятичный эквивалент шестнадцатеричного числа, содержащегося в аргументе hex_string. hexdec() преобразует шестнадцатеричную строку в десятичное число; игнорирует любые обнаруженные не шестнадцатеричные символы. Начиная с PHP 7.4.0, предоставление любых некорректных символов устарело.
  • rand(): int
  • rand(int $min, int $max): int При вызове без параметров min и max, возвращает псевдослучайное целое в диапазоне от 0 до getrandmax(). Например, если вам нужно случайное число между 5 и 15 (включительно), вызовите rand(5, 15).Предостережение
    Данная функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам требуется криптографически безопасное значение, подумайте об использовании функций random_int(), random_bytes() или openssl_random_pseudo_bytes() вместо данной.Замечание: На некоторых платформах (таких как Windows) getrandmax() всего лишь 32767. Чтобы расширить диапазон, используйте параметры min и max, или обратитесь к функции mt_rand().

Функции для работы со строками

Следует использовать функции mb_, которые способны корректно работать с кириллическим набором символов https://www.php.net/manual/ru/book.strings.php

  • strval(mixed $value): string возвращает строковое значение переменной
  • dechex(int $num): string возвращает строку, содержащую шестнадцатеричное представление указанного беззнакового аргумента num.
    • hexdec(string $hex_string): int|float (см. выше)
Многобайтовые фунции

Строки в формате UTF-8 используют 8-битовую кодовую единицу переменной ширины от 1 до 4 байт для кодирования одного символа. Символы ASCII от 0 до 127 (U+0000 to U+0127) хранятся в одном байте. Символы кирилицы и кодовые знаки от 128 до 2047 (U+0128 to U+2047) хранятся с использованием 2 байт. Грузинские, арабские, восточные символы используют 3 байта от 2048... Это обстоятельство усложняет обработку строк содержащих текст, т.к. многие функции PHP работают с символом в 1 байте, и на символах большей длины могут выполняться некорректно.

  • mb_ord(string $string, ?string $encoding = null): int|false возвращает значение кодовой точки Unicode для данного символа
  • mb_chr(int $codepoint, ?string $encoding = null): string|false возвращает строку, содержащую символ, указанный значением кодовой точки Unicode, закодированный в указанной кодировке.
  • mb_strlen(string $string, ?string $encoding = null): int получает корректное число символов строки в многобайтовой кодировке
  • mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string корректно выполняет substr() для многобайтовых кодировок, учитывая количество символов
  • mb_strcut(string $string,  int $start, ?int $length = null, ?string $encoding = null): string вырезает подстроку из строки также, как mb_substr(), но оперирует байтами вместо символов. Если начало вырезаемой части попадает между байтами одного символа, функция вырежет подстроку, начиная с первого байта этого символа. Это существенное отличие от substr(), которая просто вырежет подстроку, начиная с середины символа, и нарушит тем самым последовательность байт в строке.
  • mb_split(string $pattern, string $string, int $limit = -1): array|false разделяет многобайтную строку string, используя регулярное выражение pattern, и возвращает массив (array)
Куча !!!
    • mb_internal_encoding(?string $encoding = null): string|bool устанавливает/получает внутреннюю кодировку скрипта
      • $encoding допустимое имя кодировки, например: 'UTF-8'
    • ord(string $character): int Интерпретирует бинарное значение первого байта строки character как беззнаковое целое.
    • chr(int $codepoint): string возвращает строку из одного символа, код которого задан аргументом codepoint, который интерпретируется как беззнаковое целое (unsigned integer).
    • strlen(string $string): int возвращает длину строки string в байтах
      • substr(string $string, int $offset, ?int $length = null): string Возвращает подстроку строки string, начинающейся с offset символа по счету и длиной length символов
    • Поиск подстрок
      • str_contains( string $haystack, string $needle): bool выполняет проверку вхождения в строку haystack подстроки needle
      • str_starts_with( string $haystack, string $needle): bool выполняет проверку с учётом регистра, указывающую, начинается ли haystack с подстроки needle с учетом регистра
      • str_ends_with( string $haystack, string $needle): bool выполняет проверку с учётом регистра, указывающую, заканчивается ли haystack с подстроки needle с учетом регистра
      • strpos( string $haystack, string $needle, int $offset = 0): int|false Ищет позицию первого вхождения подстроки needle в строку haystack с учетом регистра
      • strrpos( string $haystack, string $needle, int $offset = 0): int|false Ищет позицию последнего вхождения подстроки needle в строку haystack с учетом регистра
      • mb_stripos( string $haystack, string $needle, int $offset = 0, ?string $encoding = null): int|false Ищет позицию первого вхождения подстроки needle в строке haystack, не учитывает регистр
      • strripos( string $haystack, string $needle, int $offset = 0): int|false Ищет позицию последнего вхождения подстроки needle в строку haystack, не учитывает регистр
      • strstr( string $haystack, string $needle, bool $before_needle = false): string|false Возвращает подстроку строки haystack, начиная с первого вхождения needle (и включая его) и до конца строки haystack.
      • stristr( string $haystack, string $needle, bool $before_needle = false): string|false Возвращает строку haystack начиная с первого вхождения needle включительно без учета регистра
      • strpbrk( string $string, string $characters ): string|false ищет в строке string символы из набора characters (чувствителен к регистру), возвращает строку, начиная с найденного символа, или false
      • str_replace(
      • str_ireplace() - Регистронезависимый вариант функции str_replace
      • preg_replace() - Выполняет поиск и замену по регулярному выражению
      • strtr(string $string, string $from, string $to): string
      • strtr(string $string, array $replace_pairs): string
      • Важно: для сравнения результата строковых функций с false используется оператор ===, т.к. возвращаемые значения позиции приводимы к boolean
    • nl2br(string $string, bool $use_xhtml = true): string Возвращает строку string, в которой перед каждым переводом строки (\r\n, \n\r, \n и \r) вставлен <br /> или <br>.
    • Фрагментированные строки
      • explode(string $separator, string $string, int $limit = PHP_INT_MAX): array Возвращает массив строк, полученных разбиением строки string с использованием separator в качестве разделителя.
      • implode(array $array, string $separator): string Объединяет элементы массива с помощью строки separator.
        • join() — Псевдоним implode
      • wordwrap(string $string, int $width = 75, string $break = "\n", bool $cut_long_words = false ): string вставляет в строку разрывы строк по максимальному числу символов в каждой строке.
      • chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string разбивает строку на фрагменты, вставляя строку separator через каждые length символов, например для представления base64_encode()
    • mb_strtoupper(string $string, ?string $encoding = null): string возвращает строку string, буквенные символы в которой приведены к верхнему регистру
    • crypt(string $string, string $salt): string возвращает хешированную строку, полученную с помощью стандартного алгоритма UNIX, основанного на DES или другого алгоритма, хеши паролей могут быть использованы в password_verify().
      • salt без salt функция crypt() создаёт слабый хеш. Если не использовать salt, выдаётся ошибка E_NOTICE
    • addslashes(string $string): string Экранирует строку с помощью слешей одинарная кавычка (') двойная кавычка (") обратный слеш (\) NUL (байт null)
    • stripslashes(string $string): string удаляет экранирующие символы
  • uniqid(string $prefix = "", bool $more_entropy = false): string генерирует уникальный идентификатор с префиксом, основанный на текущем времени в микросекундах
    • prefix !!! может быть полезно, к примеру, если идентификаторы генерируются одновременно на нескольких хостах и генерация идентификаторов производится в одну и ту же микросекунду. С пустым параметром prefix, возвращаемая строка будет длиной в 13 символов. Если параметр more_entropy равен true, то строка будет длиной в 23 символа.
    • more_entropy !!! Если равен true, то функция uniqid() добавит дополнительную энтропию (используя комбинированный линейный конгруэнтный генератор) в конце возвращаемого значения, что увеличивает вероятность уникальности результата.
Кодировка
  • mb_internal_encoding(?string $encoding = null): string|bool установка/получение внутренней кодировки скрипта, в которую будут преобразовываться входные данные HTTP-запроса, из которой будет конвертироваться HTTP-вывод, а также это кодировка по умолчанию для всех функций, работающих со строками, определёнными в модуле mbstring. Внимание: внутренняя кодировка полностью отличается от кодировки для многобайтовых регулярных выражений.
    • mb_http_input() - Определение кодировки символов входных данных HTTP-запроса
    • mb_http_output() - Установка/получение кодировки символов вывода HTTP
    • mb_detect_order() - Установка/получение списка кодировок для механизмов определения кодировки
    • mb_regex_encoding() - Устанавливает/получает текущую кодировку для многобайтового регулярного выражения

Функции для работы с JSON

Описание JSON //www.json.org

  • json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false выполняет рекурсивное преобразование значения в JSON-строку
  • json_decode( string $json, ?bool $associative = null, int $depth = 512, int $flags = 0 ): mixed преобразует закодированную JSON-строку в PHP-значение
  • json_last_error(): int возвращает код ошибки последнего кодирования/декодирования JSON
  • json_last_error_msg(): string возвращает описание ошибки последнего кодирования/декодирования JSON

Функции для работы с URL

  • parse_url(string $url, int $component = -1): int|string|array|null|false разбирает URL и возвращает его компоненты
      • component
        • PHP_URL_SCHEME,
        • PHP_URL_HOST,
        • PHP_URL_PORT возвращаемое значение будет типа int
        • PHP_URL_USER,
        • PHP_URL_PASS,
        • PHP_URL_PATH,
        • PHP_URL_QUERY
        • PHP_URL_FRAGMENT, чтобы получить только конкретный компонент URL в виде строки (string).
  • штатной функции обратной parse_url не существует
  • http_build_query( array|object $data, string $numeric_prefix = "", ?string $arg_separator = null, int $encoding_type = PHP_QUERY_RFC1738 ): string генерирует URL-кодированную строку запроса из предоставленного ассоциативного (или индексированного) массива

Функции для работы с массивами

Существует более 80 php-функций выполняющих обработку массива //www.php.net.

  • count(Countable|array $value, int $mode = COUNT_NORMAL): int подсчитывает число элементов в массиве
    • mode необязательный, по умолчанию , при COUNT_RECURSIVE подсчитывает рекурсивно с вложенными массивами, при обнаружении рекурсивного цикла выводит ошибку уровня E_WARNING
    • sizeof() - полный псевдоним функции count()
  • array_key_exists(string|int $key, array $array): bool возвращает true, если в массиве присутствует заданный ключ key, которым может быть любое значение, подходящее для индекса массива
  • array_is_list(array $array): bool определяет, является ли данный array списком, т.е. его ключи состоят из последовательных чисел от 0 до count($array)-1
  • array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array удаляет length элементов, расположенных на расстоянии offset из массива array, и заменяет их элементами массива replacement, если он передан в качестве параметра
  • range(string|int|float $start, string|int|float $end, int|float $step = 1): array создаёт массив, содержащий диапазон элементов
  • sort(array &$array, int $flags = SORT_REGULAR): bool Сортирует array по значению в порядке возрастания, всегда возвращает true.
    • flags Необязательный второй параметр flags может использоваться для изменения поведения сортировки с использованием следующих значений:
      • SORT_REGULAR - обычное сравнение элементов; подробности описаны в разделе операторы сравнения
      • SORT_NUMERIC - числовое сравнение элементов
      • SORT_STRING - строковое сравнение элементов
      • SORT_LOCALE_STRING - сравнение элементов как строки на основе текущего языкового стандарта. Используется языковой стандарт, который можно изменить с помощью setlocale()
      • SORT_NATURAL - сравнение элементов как строки, используя "естественный порядок", например natsort()
      • SORT_FLAG_CASE - можно объединять (побитовое ИЛИ) с SORT_STRING или SORT_NATURAL для сортировки строк без учёта регистра
    • Если оба сравниваемых значения эквивалентны, они сохраняют свой первоначальный порядок. До PHP 8.0.0 их относительный порядок в отсортированном массиве не был определён.
    • Замечание: Эта функция присваивает новые ключи элементам array. Она удалит все существующие ключи, а не просто переупорядочит их.
    • Сбрасывает внутренний указатель массива на первый элемент.
  • shuffle(array &$array): bool перемешивает элементы массива в случайном порядке. Используется псевдослучайный генератор случайных чисел, не подходит для задач криптографии.

 

PHP

  • phpversion(?string $extension = null): string|false

 

  • include path; конструкция переходит к выполнению кода  в файле заданном в path,  при ошибке возникает  предупреждение E_WARNING и продолжается выполнение кода после include
    • (include path) : bool
      • ( include $path ) == true - правильно
      • include( $path ) == true - неправильно, т.к. выполнится как include(($path) == true)
    • include_once path; обеспечивает выполнение кода в файле path только один раз при первом выполнении конструкции, во всех последующих будет возвращено true
  • require path; конструкция выполнятеся аналогично include, но при ошибке выполнение скрипта завершается
    • require_once path; обеспечивает выполнение кода в файле path только один раз

Потоки ввода-вывода PHP

Доступ к потокам ввода-вывода реализуется файловыми функциями через URL со схемой "php"

  • php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса
    • недоступен с типом содержимого enctype="multipart/form-data"
  • php://output является потоком только для записи, который позволяет записывать данные в выходной буфер также, как функция print или оператор echo
  • php://fd предоставляет прямой доступ к указанному файловому дескриптору. Например, php://fd/3 относится к файловому дескриптору 3.
  • php://memory и php://temp
  • php://stdin, php://stdout и php://stderr + php://filter

Информационные функции

//

  • ini_get(string $option): string|false В случае успешного выполнения возвращает значение настройки конфигурации
Обработка ошибок
  • error_log (string $message, int $message_type = 0, ?string $destination = null, ?string $additional_headers = null): bool отправляет сообщение об ошибке заданному обработчику ошибок
  • error_clear_last(): void очистит последнюю ошибку

Конструкции и функции потока исполнения

!!! include require надо перенести!!!

  • sleep(int $seconds): int Откладывает исполнение программы на число секунд, указанное в параметре seconds
  • time_nanosleep(int $seconds, int $nanoseconds): array|bool Откладывает исполнение программы на заданные в параметрах seconds и nanoseconds число секунд и наносекунд соответственно
    • true в случае успешного выполнения или false в случае возникновения ошибки
    • Если отложенное исполнение было прервано сигналом, то возвращается ассоциативный массив со следующими компонентами seconds - число оставшихся секунд и nanoseconds - число оставшихся наносекунд
  • exit(string $status = ?): void прекращает выполнение скрипта и запускает функции отключения и деструкторы
    • exit - одноименная языковая конструкция
    • die — синоним функции exit, используется чаще
  • eval(string $code): mixed Выполняет строку, переданную в параметре code, как код PHP.

Функции файловой системы

//

  • finfo_file (finfo $finfo, string $filename, int $flags = FILEINFO_NONE, ?resource $context = null): string|false -
    • public finfo::file(string $filename, int $flags = FILEINFO_NONE, ?resource $context = null): string|false -
  • file_get_contents(string $filename, bool $use_include_path = false, ?resource $context = null, int $offset = 0, ?int $length = null): string|false - возвращает в строке содержимое файла или фрагмент, начиная со смещения offset и длиной length байт
  • file_put_contents() пишет данные в файл, идентична последовательным успешным вызовам функций fopen(); fwrite(); fclose();

Функции обработки URL

/

  • http_build_query(array|object $data, string $numeric_prefix = "", ?string $arg_separator = null, int $encoding_type = PHP_QUERY_RFC1738): string - возвращает URL-кодированную строку запроса из массива

Библиотеке cURL

Библиотека функций libcurl поддерживает протоколы http, https, ftp, gopher, telnet, dict, file и ldap, сертификаты HTTPS. Выполняет HTTP запросы методами POST и PUT. Поддерживает ротоколы HTTP и FTP для загрузки файлов с поддержкой прокси, cookies и аутентификации пользователя.

  • curl_init(?string $url = null): CurlHandle|false Инициализирует новый сеанс cURL и возвращает дескриптор, который используется с функциями curl_setopt(), curl_exec() и curl_close()
  • curl_setopt(CurlHandle $handle, int $option, mixed $value): bool Устанавливает параметр для указанного сеанса cURL
    • $option - параметр CURLOPT
      • CURLOPT_RETURNTRANSFER true для возврата результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер
      • CURLOPT_CONNECTTIMEOUT - предел ожидания в секундах при попытке соединения (0 для бесконечного ожидания)
      • CURLOPT_TIMEOUT - предел ожидания в секундах после начала выполнения
      • и другие... //www.php.net
    • $value - значение параметра
  • curl_exec(CurlHandle $handle): string|bool выполняет запрос cURL
    • $handle - дескриптор cURL, полученный из curl_init()
  • curl_getinfo(CurlHandle $handle, ?int $option = null): mixed возвращает информацию о последней операции
    • $option - информационный параметр
      • CURLINFO_RESPONSE_CODE (CURLINFO_HTTP_CODE) - последний код возврата
      • и другие... //www.php.net
  • curl_close(CurlHandle $handle): void - устаревшая, использовалась для закрытия ресурса до PHP 8.0.0

&

  • base64_encode(string $string): string — Кодирует данные в формат MIME base64
  • base64_decode(string $string, bool $strict = false): string|false — Декодирует данные из формата MIME base64

Функции GD и функции для работы с изображениями

Встроенная в PHP библиотека GD позволяет создавать и обрабатывать растровые изображения и файлы изображений в форматах GIF, PNG, JPEG, WBMP, и XPM. Полученные изображения PHP может сохранять в файлы или выводить непосредственно в потоки браузера.

    • gd_info(): array -
    • imagecreate(int $width, int $height): GdImage|false -
    • imagecreatefromgd(string $filename): GdImage|false -
    • imagecreatefromgif(string $filename): GdImage|false -
    • imagesx(GdImage $image): int - Возвращает ширину изображения
    • imagesy(GdImage $image): int - Возвращает высоту изображения
    • imagescale (GdImage $image, int $width, int $height = -1, int $mode = IMG_BILINEAR_FIXED): GdImage|false -
    • imagecrop(GdImage $image, array $rectangle): GdImage|false -
    • imagegif(GdImage $image, resource|string|null $file = null): bool -
    • imagecolorallocate(GdImage $image, int $red, int $green, int $blue): int|false — Создание цвета для изображения, Возвращает идентификатор цвета
    • imagecolorresolve(GdImage $image, int $red, int $green, int $blue): int — Получает идентификатор цвета по RGB или его ближайший аналог
    • imagettftext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|false — вывод на изображении текста шрифтом TrueType
    • imagefttext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|false — вывод на изображении текста шрифтом FreeType 2
    • imageftbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|false - рассчитывает и возвращает рамку границ FreeType текста.

Операции с MySQL DB

Операции реализуются иерархией классов. Класс mysqli представляет связь между PHP и базой данных MySQL, класс mysqli_stmt формирует выражение запроса к серверу, класс mysqli_result представляет полученные данные //www.php.net

Класс mysqli
    • public mysqli::__construct( string $hostname, string $username, string $password, string $database = "", int $port, string $socket ) коструктор объекта mysqli может установить соединение с сервером MySQL
    • public mysqli::ssl_set( string $key, string $certificate, string $ca_certificate, string $ca_path, string $cipher_algos ): bool настраивает ключи безопасных SSL соединений, вызывается до вызова mysqli_real_connect(), требует включения поддержки OpenSSL
    • public mysqli::connect( string $hostname, string $username, string $password, string $database, int $port, string $socket ): void устанавливает соединение с работающим сервером MySQL
    • null|string $mysqli->connect_error; возвращает сообщение об ошибке последней попытки подключения
    • public mysqli::select_db(string $database): bool при подключенном сервере устанавливает контестную базу данных для последующих запросов
    • public mysqli::set_charset(string $charset): bool задаёт набор символов, который будет использоваться при обмене данными с сервером баз данных
      • 'utf8' 'utf8mb3' 'utf8mb4' - типичная современная UTF-8
      • 'koi8u' 'koi8r' - устаревшая украинская и русская unix-кодировки
      • 'cp1251' - устаревшая кириллическая windows-кодировка
      • 'cp866' - архаическая русская dos-кодировка
      • 'ascii' -
      • 'Latin1'
    • public mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool выполняет запрос query к базе данных
    • public mysqli::multi_query(string $query): bool запускает на выполнение один или несколько запросов, перечисленных через точку с запятой
    • int|string $mysqli->affected_rows; возвращает число строк, затронутых последним запросом SELECT, INSERT, UPDATE, REPLACE или DELETE
    • public mysqli::close(): bool закрывает открытое соединение с базой данных
Класс mysqli_stmt
    • public mysqli::stmt_init(): mysqli_stmt|false возвращает указатель на новый объект sql-выражения mysqli_stmt для использования в контексте установленного соединения
    • public mysqli::prepare(string $query): mysqli_stmt|false возвращает указатель на новый объект выражения mysqli_stmt c подготавленным запросом $query, который может использоваться для дальнейших операций с выражением, прежде чем оно будет отправлено серверу на выполнение
    • public mysqli_stmt::bind_param(string $types, mixed &$var, mixed &...$vars): bool привязывает переменные к меткам параметров в SQL-выражении mysqli_stmt
      • $types - строка, содержащая один или более символов, каждый из которых задаёт тип значения привязываемой переменной:
        • i соответствующая переменная имеет тип integer
        • d соответствующая переменная имеет тип double
        • s соответствующая переменная имеет тип string
        • b соответствующая переменная является большим двоичным объектом (blob) и будет пересылаться пакетами
    • public mysqli_stmt::execute(?array $params = null): bool подставляет значения параметров из идексированного массива $params и выполняет выражение
      • ?!!! НЕПОНЯТНО НУЖНО ЛИ  ПЕРЕД get_result() ?!!!
    • public mysqli_stmt::get_result(): mysqli_result|false выполняет подготовленное выражение запроса и получает набор данных
    • public mysqli_stmt::store_result(): bool функцию следует вызывать для запросов, которые успешно создают набор результатов (например, SELECT, SHOW, DESCRIBE, EXPLAIN), только если необходимо буферизовать в PHP полный набор результатов. Каждый последующий вызов mysqli_stmt_fetch() будет возвращать буферизованные данные
    • int|string $mysqli_stmt->affected_rows; возвращает количество строк, изменённых запросом INSERT, UPDATE или DELETE
    • int|string $mysqli_stmt->num_rows; public mysqli_stmt::num_rows(): int|string возвращает количество строк, помещённых в буфер после вызова метода store_result()
      • int представляет количество буферизованных строк
        • 0 в небуферизованном режиме, если с сервера не были получены все строки
      • string представляет количество строк, если значение больше PHP_INT_MAX
    • public mysqli_stmt::bind_result(mixed &$var, mixed &...$vars): bool привязывает столбцы результирующего набора к переменным
    • public mysqli_stmt::fetch(): ?bool связывает результаты подготовленного выражения с переменными
Класс mysqli_result

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

    • public mysqli_result::fetch_assoc(): array|null|false возвращает следующую строку данных из набора результатов в виде ассоциативного массива или null, массив содержит [1] => 1
    • public mysqli_result::fetch_row(): array|null|false возвращает следующую строку данных из набора результатов в виде индексированного массива или null, массив содержит [0] => 1
    • public mysqli_result::fetch_array(int $mode = MYSQLI_BOTH): array|null|false возвращает следующую строку данных из набора результатов в виде массива, тип массива зависит от $mode
      • $mode MYSQLI_ASSOC, MYSQLI_NUM или MYSQLI_BOTH необязательный, по умолчанию  MYSQLI_BOTH указывает на тип массива представления данных
        • MYSQLI_ASSOC возвратит ассоциативный массив с именами полей идентично mysqli_fetch_assoc()
        • MYSQLI_NUM возвратит индексированный массив с индексами полей идентично функции mysqli_fetch_row()
        • MYSQLI_BOTH по умолчанию, возвратит массив с дублирующимся набором индексов и имен, массив содержит и [0] => 1, и [1] => 1
    • public mysqli_result::free(): void public mysqli_result::close(): void public mysqli_result::free_result(): void освобождает память, занятую результатами запроса
    • Имена полей, возвращаемые этой функцией являются зависимыми от регистра.
    • устанавливает NULL-поля в значение null PHP
Пояснения и дополнения

MySQLi раскладываем все по полочкам //habr.com

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

  • Преимущества:
    • Результат можно начинать читать раньше, сокращается время ожидания;
    • Результат не занимает место в оперативной памяти.
  • Недостатки:
    • Невозможно узнать, сколько строк получено;
    • Невозможно передвигаться к определенному результату, то есть можно читать данные только с начала и по порядку;
    • Нельзя выполнять других запросов, пока не закрыт этот результат.
Примеры

$stmt->execute();

$val1 = 'Bordeaux';
$val2 = 'FRA';
$val3 = 'Aquitaine';

/* Выполняем утверждение */
$stmt->execute();

/* Получаем все строки из myCity */
$query = "SELECT Name, CountryCode, District FROM myCity";
$result = $mysqli->query($query);
while ($row = $result->fetch_row()) {
printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]);
}

Примеры

//

Генерация уникального глобального идентификатора (GUID)

В OS Windows для PHP доступна библиотека COM и функция com_create_guid(), в противном случае на сервере Linux GUID можно несложно сгенерировать самостоятельно:

Работа с XML

Пример конвертирования параметров глобального массива $_POST в XML с сериализацией в выводной поток:

Аутентификация

Авторизация сопровождается установкой значений в суперглобальном массиве $_SERVER:

  • $_SERVER['PHP_AUTH_USER'] -
  • $_SERVER['PHP_AUTH_PW'] -

Дополнение

Параметры URL

 

Источники

Leave a Reply