Конспект довідника функцій PHP

PHP - Hypertext Preprocessor (первоначально PHP/FI - Personal Home Page / Form Interpreter), а позже

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

//

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

//

  • 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_dump($x) - выводит информацию о переменной в поток вывода
  • var_export(mixed $value, bool $return = false): ?string выводит интерпретируемое строковое представление переменной $value в поток вывода или как строку, если $return=true
  • isset(mixed $var, mixed ...$vars): bool — проверяет для всех переменных в параметрах инициализацию значением, отличным от null, возвращает true, если все переменные инициализированы каким-то значениями
  • 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 возвращает имя типа переменной 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"
  • модуль ctype включает функции проверки принадлежности символа или строки определённому классу символов
    • ctype_digit(mixed $text): bool цифровые символы в строке
    • ctype_xdigit(mixed $text): bool шестнадцатеричных цифр
    • ctype_alpha(mixed $text): bool буквенных символов
    • ctype_lower(mixed $text): bool символов в нижнем регистре
    • ctype_upper(mixed $text): bool символов в верхнем регистре
    • ctype_alnum(mixed $text): bool буквенно-цифровые символы
    • и другие
  • filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed Фильтрует переменную с помощью определённого фильтра

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

/

  • intval(mixed $value, int $base = 10): int возвращает значение $value приведенное к типу int
    • $base - необязательный, по умолчанию 10, основание системы счисления в строковом значении $value
  • hexdec(string $hex_string): int|float возвращает десятичный эквивалент шестнадцатеричного числа, содержащегося в аргументе hex_string. hexdec() преобразует шестнадцатеричную строку в десятичное число; игнорирует любые обнаруженные не шестнадцатеричные символы. Начиная с PHP 7.4.0, предоставление любых некорректных символов устарело.
Числовые значения в строковом представлении
  • bcmod(string $num1, string $num2, ?int $scale = null): string
    Получает остаток от деления num1 на num2. Если num2 не равен нулю, результат будет иметь такой же знак, что и num1.

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

Строка PHP является байтовой последовательностью произвольного содержания. Текстовые строки используют формат 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 байте и на символах длиной больше 1 они работают неправильно.

Следует использовать функции 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 получает числовое значение равное шестнадцатеричному представлению в строке
  • hex2bin(string $hexstr): string|false декодирует строку данных из строки шестнадцатеричного представления hexstr в физическую строку
  • bin2hex(string $string): string !!!
    Возвращает ASCII-строку, содержащую шестнадцатеричное представление аргумента string. Преобразование производится побайтно, начиная с верхнего полубайта
  • strcmp(string $string1, string $string2): int
  • strtolower(string $string): string
  • mb_strtolower(string $string, ?string $encoding = null): string
  • substr_count( string $haystack, string $needle, int $offset = 0, ?int $length = null ): int возвращает число вхождений подстроки needle в строку haystack
    • чувствительна к регистру
Многобайтовые фунции

Строки в формате 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() для многобайтовых кодировок, учитывая количество символов
    • $start неотрицательный индекс от 0
    • length максимальное количество символов в подстроке, может превышать длину строки, если не указан или равен NULL - извлекаются все символы до конца строки
  • mb_strcut(string $string,  int $start, ?int $length = null, ?string $encoding = null): string вырезает подстроку из строки также, как mb_substr(), но оперирует байтами вместо символов. Если начало вырезаемой части попадает между байтами одного символа, функция вырежет подстроку, начиная с первого байта этого символа. Это существенное отличие от substr(), которая просто вырежет подстроку, начиная с середины символа, и нарушит тем самым последовательность байт в строке.
  • mb_substr_count(string $haystack, string $needle, ?string $encoding = null): int !!! Подсчитывает, число подстрок needle в строке haystack
  • mb_str_split(string $string, int $length = 1, ?string $encoding = null): array преобразует string в массив строк по length, используется текущая кодировка, но может быть установлена любая параметром encoding
  • mb_split(string $pattern, string $string, int $limit = -1): array|false возвращает массив строк, полученных разделением строки string по шаблону регулярного выражения pattern
  • trim(string $string, string $characters = " \n\r\t\v\x00"): string возвращает string, удалив из начала и конца строки указанные символы
    • characters набор удаляемых символов, по умолчанию все неотображаемые ascii-символы (пробел, табуляция \t, перевод строки \n, возврата каретки \r, nul-байт \0, вертикальная табуляция \v)
      • используя кавычку можно раскавычить строку с escape-последовательностью:

// регистровые

  • mb_strtolower(string $string, ?string $encoding = null): string возвращает строку string, буквенные символы в которой приведены к нижнему регистру
  • mb_strtoupper(string $string, ?string $encoding = null): string возвращает строку string, буквенные символы в которой приведены к верхнему регистру
  • mb_convert_case(string $string, int $mode, ?string $encoding = null): string производит смену регистра символов в строке string в соответствии с режимом mode заданным одной из констант:
    • MB_CASE_LOWER: зміна регістру
    • MB_CASE_UPPER: ЗМІНА РЕГІСТРУ
    • MB_CASE_TITLE: Зміна Регістру Символів
    • MB_CASE_FOLD:  HTTPS://www.ReKS.biz -> https://www.reks.biz
    • для предотвращения сложного преобразования регистрового соответствия символа используются константы ..._SIMPLE
      • mb_convert_case('fuß', MB_CASE_UPPER): FUSS
      • mb_convert_case('fuß', MB_CASE_UPPER_SIMPLE): FUß
!!! Кодировка
  • 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() - Устанавливает/получает текущую кодировку для многобайтового регулярного выражения
  • mb_convert_encoding(array|string $string, string $to_encoding, array|string|null $from_encoding = null): array|string|false
    преобразует  string в кодировку to_encoding из кодировки from_encoding или текущей внутренней кодировки, если она опущена.

  • iconv(string $from_encoding, string $to_encoding, string $string): string|false
    преобразует строку string из одной кодировки в другую

    • если символ нельзя перекодировать, то он будет удален, если в конце to_encoding добавлено //IGNORE или заменен транслитерацией, если  //TRANSLIT (транслитерация не всегда работает)
  • ошибка определения кодировки Героѕм ѕлава! может возникать при чтении файла без BOM, и решается не кодированием:

     
Кодирование

//

  • md5(string $string, bool $binary = false): string вычисляет MD5-хеш строки string
  • hash(string $algo, string $data, bool $binary = false, array $options = [] ): string возвращает хеш-код строки data в формате hex-строки в нижнем регистре или как бинарные данные
    • algo имя алгоритма хеширования
      • md4,md5 128 бит, самые быстрые
      • crc32, crc32b 32 бита, быстрый
      • sha1 160 бит, быстрый
      • sha256 256 бит, достаточно быстрый
      • sha384 384 бит, не быстрый
      • sha512 512 бит, не быстрый
      • hash_algos(): array возвращает массив имен доступных алгоритмов
    • data сообщение для хеширования
    • binary в значении true устанавливает бинарный формат хеш-кода, иначе hex-строка
    • options массив опций выбранного алгоритма (фактически поддерживается только параметр seed)

Строка полученная

Анализ строк

//

  • similar_text(string $string1, string $string2, float &$percent = null): int вычисляет степень похожести двух строк по алгоритму, описанному в Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1). Эта реализация алгоритма не использует стека, использованного в оригинале, вместо этого применяются рекурсивные вызовы, что в некоторых случаях может ускорить процесс. Следует отметить, что сложность алгоритма составляет O(N**3), где N - длина более длинной из двух строк.

Список параметров ¶

Строчный вывод

printf(string $format, mixed ...$values): int
Выводит строку, отформатированную в соответствии с аргументом format.

sprintf(string $format, mixed ...$values): string
Возвращает строку, созданную с использованием строки формата format.

fprintf(resource $stream, string $format, mixed ...$values): int
Записывает строку, созданную с использованием строки формата format, в поток, дескриптор которого передаётся в параметре stream.

vprintf(string $format, array $values): int
Выводит значения массива, отформатированные в соответствии с аргументом format, описанном в документации функции sprintf().

vsprintf(string $format, array $values): string
Работает как sprintf(), но принимает не переменное число аргументов, а массив.

vfprintf(resource $stream, string $format, array $values): int
Записывает строку, отформатированную в соответствии с параметром format в поток stream.

///

//

  • serialize(mixed $value): string генерирует обратимое строковое представление произвольного значения  value для передачи или сохранения
  • unserialize(string $data, array $options = []): mixed восстанавливает исходное значение из строкового представления
Функции кодирования base64
  • base64_encode(string $string): string — Кодирует данные в формат MIME base64
  • base64_decode(string $string, bool $strict = false): string|false — Декодирует данные из формата MIME base64

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

Существует более 80 php-функций предназначенных для работы с массивами //php.net/manual/ru/ref.array.php

Навигация

/

  • 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_key_first(array $array): int|string|null возвращает первый ключ массива array, не затрагивая внутренний указатель массива
  • array_key_last(array $array): int|string|null возвращает последний ключ массива array, не затрагивая внутренний указатель массива
  • in_array(mixed $needle, array $haystack, bool $strict = false): bool проверяет присутствие значения needle и в массиве haystack, парамерт strict определяет соответствие типов
  • array_is_list(array $array): bool определяет, является ли данный array списком, т.е. его ключи состоят из последовательных чисел от 0 до count($array)-1

Итерация

У каждого массива имеется внутренний указатель текущего элемент, с помощью которого реализуется базовая итерация

  • reset(array|object &$array): mixed перемещает внутренний указатель массива array к его первому элементу и возвращает значение первого элемента массива
  • key(array|object $array): int|string|null индекс текущего элемента массива, имеет числовое значение для индексированного массива и строковое для ассоциативного
  • current(array|object $array): mixed значение текущего элемента массива
  • each(array|object &$array): array возвращает текущую пару ключ/значение из массива и продвигает вперёд его указатель
  • next(array|object &$array): mixed сходно с current(), но сначала выполняет сдвиг указателя к концу массива, а заем возвращает значение; возвращает false, если достигнут конец массива, что может привести к неоднозначности, если в массиве находятся логические значения
  • prev(array|object &$array): mixed сходно с next(), но внутренний указатель массива сдвигается к началу
  • end(array|object &$array): mixed устанавливает внутренний указатель array на последний элемент и возвращает его значение

Блочные операции

//

Трансформация

  • array_values() !!! обеспечивает возвращение индексированного массива, заново индексируя возвращаемый массив числовыми индексами
  • range(string|int|float $start, string|int|float $end, int|float $step = 1): array создаёт массив, содержащий диапазон элементов
  • array_count_values(array $array): array в одномерном массиве array, содержащем только строковые и целые значения, подсчитывает число вхождений каждого значения; возвращает массив, в котором ключами являются значения, а значениями - количество повторений значений.
  • array_merge(array ...$arrays): array последовательно сливает элементы нескольких массивов в новый массив, при совпадении ключа значение замещает предыдущее, новые ключи со значением добавляются в конце.
  • array_merge_recursive(array ...$arrays): 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 перемешивает элементы массива в случайном порядке. Используется псевдослучайный генератор случайных чисел, не подходит для задач криптографии.

Использование последовательности значений

// Буфер, Очередь, Стек

  • array_push(): int !!!
  • array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array удаляет length элементов, расположенных на расстоянии offset из массива array, и заменяет их элементами массива replacement, если он передан в качестве параметра
  • array_unshift(array &$array, mixed ...$values): int добавляет переданные в качестве аргументов элементы в начало массива array. Обратите внимание, что список элементов добавляется целиком, то есть порядок элементов сохраняется. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними
  • array_shift(array &$array): mixed извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними
  • array_push(array &$array, mixed ...$values): int использует array как стек и добавляет переданные значения в конец массива array. Длина array увеличивается на количество переданных значений.
  • array_pop(array &$array): mixed извлекает и возвращает значение последнего элемента массива array, уменьшая размер array на один элемент.
Функции использующие замыкания
  • array_map(?callable $callback, array $array, array ...$arrays): array
    Функция array_map() возвращает массив (array), содержащий результаты применения callback-функции к соответствующему элементу array (и arrays, если указано больше массивов), используемого в качестве аргумента callback-функции. Количество параметров, передаваемых callback-функции, должно совпадать с количеством массивов, переданным функции array_map(). Лишние входные массивы игнорируются
  • array_walk_recursive(array|object &$array, callable $callback, mixed $arg = null): bool
    Применяет пользовательскую функцию callback к каждому элементу массива array. Функция обрабатывает каждый элемент многомерного массива
  • call_user_func_array(callable $callback, array $args): mixed вызывает callback-функцию callback, с параметрами из массива args.

 

  • pack(string $format, mixed ...$values): string !!!
    Упаковывает заданные аргументы в бинарную строку в соответствии с форматом в параметре format.
  • unpack(string $format, string $string, int $offset = 0): array|false !!!
    Распаковывает данные из бинарной строки в массив в соответствии с заданным в format формате

 

Функції для роботи з датою та часом

В PHP не предусмотрены специальные типы для работы с датой и временем, но используется соглашение о представлении меток времени в значении int или string.

  • time(): int возвращает текущую метку системного времени Unix, которая равна количеству секунд, прошедших с начала эпохи Unix (1 января 1970 00:00:00 GMT) до текущего времени
  • hrtime(bool $as_number = false): array|int|float|false возвращает время высокого разрешения системы, отсчитываемое с произвольной точки времени, полученная временная метка неизменна и не может быть отрегулирована (рекомендуется для измерения производительности)
    • as_number  по умолчанию возвращает array [секунды, наносекунды]
      • в значении true устанавливает тип результата int выражающее наносекунды
        • точность значения ±10ns или еще хуже
  • microtime(bool $as_float = false): string|float возвращает текущую метку времени Unix с микросекундами. Эта функция доступна только на операционных системах, в которых есть системный вызов gettimeofday().
  • idate(string $format, ?int $timestamp = null): int|false возвращает из метки времени timestamp часть заданную параметром format:
    • базовые: d День месяца, m Месяц, y Год столетия, Y Год, o Год ISO-8601, h Час/12, H Час/24, i Минута, s Секунда
    • периодные: N День недели Пн(1)..Вс(7), w День недели Вс(0)..Сб(6), W Неделя года, z День года
    • вспомогательные: t Дней в месяце, I летнее время, L високосный год, Z Смещение секунд часового пояса
    • специальные: U Секунд от начала эпохи UNIX, B текущий бит суток в системе Swatch Internet Time (1/1000 суток = 86.4 секунд)
  • getdate(?int $timestamp = null): array возвращает ассоциативный массив, содержащий информацию о дате и времени, представленной меткой времени timestamp
  • date(string $format, ?int $timestamp = null): string представляет метку времени timestamp строкой по шаблону в строке format, допускающему форматные символы:
    • d День 01..31, D День неделиMon..Sun, j День 1..31
    • m Месяц 01..12, M Месяц Jan..Dec, n Месяц 1..12
    • Y Год, y Год века 00..99
    • H Час 00..23, h Час 01..12, G Час 0..23
    • i Минута 00..59
    • s Секунда 00..59
    • и другие //php.net/manual/ru/datetime.format.php
  • strtotime(string $datetime, ?int $baseTimestamp = null): int|false возвращает метку времени
    • по строке представления даты и времени '2022-10-12 19:44:59.000000'
    • по строке относительного формата '+30 sec -20 min +10 hour -5 day +2 month -1 year' //php.net/manual/ru/datetime.formats.relative.php
  • date_parse(string $datetime): array парсит строковое представление даты в ассоциативный массив
  • mktime( int $hour, ?int $minute = null, ?int $second = null, ?int $month = null, ?int $day = null, ?int $year = null ): int|false Возвращает метку времени Unix для заданной даты
    • допустимы нулевые и отрицательные значения месяца и дня, которые означают отступ от единичного значения (например: 0 месяц - це грудень попереднього року, -1 день - це передостанній день попереднього місяця)
    • також негативні значення доступні для годин, хвилин і секунд
    • дивись gmmktime(...) яка повертае локальну мітку часу Unix для часу за Грінвічем
Часовий пояс

//

  • timezone_abbreviations_list(): array возвращает каскадный ассоциативный массив, содержащий флаг перехода на летнее время, смещение и имя часового пояса; содержит все исторические случаи использования аббревиатур, что может привести к правильным, но запутанным записям., включая некоторые противоречия, поэтому список для создания списка выбора часового пояса пользователем не подходит
    • 'timezone_id' => 'Etc/GMT',
    • 'timezone_id' => 'Europe/Kiev',
  • //

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

// Функции PHP - это значения!!!

  • function_exists(string $function): bool проверяет существование встроенной или пользовательской функции по именем function
  • get_defined_functions(bool $exclude_disabled = true): array !!!

в функции:

  • func_num_args(): int !!! получает количество аргументов, переданных функции
  • func_get_args(): array !!!

PHP

  • phpversion(?string $extension = null): string|false возвращает строку версии модуля по имени  extension или интерпретатора PHP вида '7.4.29'

/

  • 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 возвращает значение настройки конфигурации по имени option или 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 - число оставшихся наносекунд
  • time_sleep_until(float $timestamp): bool откладывает исполнение скрипта до заданной временной метки, указанной в параметре timestamp
  • exit(string $status = ?): void прекращает выполнение скрипта и запускает функции отключения и деструкторы
    • exit - одноименная языковая конструкция
    • die — синоним функции exit, используется чаще
  • set_time_limit(int $seconds): bool задаёт время в секундах, в течение которого скрипт должен завершить работу, иначе вызывается фатальная ошибка (по умолчанию лимит равен 30 секундам или значением max_execution_time в php.ini)
  • eval(string $code): mixed Выполняет строку, переданную в параметре code, как код PHP.

Многопоточность

Асинхронной многопоточности в PHP какбэ нет.

Есть функции exec(), shell_exec(), pcntl_fork(), но их вызов выполняется не асинхронно (основной процесс останавливается в ожидании результата).

Тем не менее есть метод, который позволяет выполнить php асинхронно отдельным процессом, если получить возврат нет необходимости:

Выражение >/dev/null 2>&1 & перенаправит  stdio > и stderr 2> в /dev/null и запустит скрипт в фоновом режиме отдельным процессом, который может выполняться после завершения первичного процесса. Говорят, такой же эффект будет иметь выражение &> /dev/null &.

Функции Random

Функции генерации случайных значений

  • 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().
  • random_bytes(int $length): string генерирует строку криптографически случайных байт произвольной длины, которую можно использовать в криптографических целях, например, для генерации соли, ключей или векторов инициализации
  • srand(int $seed = 0, int $mode = MT_RAND_MT19937): void устанавливает "начальную позицию" seed в псевдо-случайной последовательности чисел, что позволяет многократно повторить "случайную" последовательность, при этом seed не является индексом в последовательности (т.е. seed+1 задает совершенно другую последовательность)
    • $mode = MT_RAND_MT19937 означает алгоритм Mersenne Twister (Вихрь Мерсенна) псеводослучайной последовательность с периодом 219937-1

Кодирование

HTML-сущности

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

  • htmlspecialchars( string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null, bool $double_encode = true ): string
    преобразует специальные символы в строке string в соответствующие htmo-сущности им возвращает строку, над которой проведены эти преобразования. Если вам нужно преобразовать все возможные сущности, используйте htmlentities().
  • htmlentities( string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null, bool $double_encode = true ): string

    !!! Эта функция идентична htmlspecialchars() за исключением того, что htmlentities() преобразует все символы в соответствующие HTML-сущности (для тех символов, для которых HTML-сущности существуют). Функция get_html_translation_table() может быть использована для возврата используемой таблицы перевода в зависимости от предоставленных констант в параметре flags.
    Если же вы хотите раскодировать строку (наоборот), используйте html_entity_decode().
  • html_entity_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null): string

    html_entity_decode() является противоположностью функции htmlentities(). Она преобразует HTML-сущности в строке string в соответствующие им символы.Если быть точнее, то эта функция преобразует все сущности (в том числе все числовые сущности), которые а) обязательно верны для выбранного типа документа - то есть, для XML эта функция не преобразует именованные сущности, которые могут быть определены в каком-нибудь DTD - и б) их символы находятся в кодировке, соответствующей выбранной и разрешены в выбранном типе документа. Все другие сущности остаются без изменений
  • mb_encode_numericentity(
    string $string,
    array $map,
    ?string $encoding = null,
    bool $hex = false
    ): string
    Преобразует заданные коды символов в строке (string) string из кодов в числовые HTML-ссылки
  • mb_decode_numericentity(string $string, array $map, ?string $encoding = null): string
    Преобразует строку чисел string (string) в заданном блоке в символ.

URL-кодирование

Строки для использования в запросе, как часть URL, не могут содержать некоторые символы ASCII и любые не-ASCII. В этом и аналогичных случаях применяется кодирование, в котором все не цифро-буквенные символы, кроме  - _ . должны быть заменены знаком %, за которым следует два шестнадцатеричных числа, а пробелы закодированы как знак +. Строка кодируется тем же способом, что и POST-данные веб-формы, то есть по типу контента application/x-www-form-urlencoded.

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

  • urlencode(string $string): string закодирует строку для использования в запросе, как часть URL, в качестве удобного способа передачи переменных на следующую страницу
  • urldecode(string $string): string декодирует последовательность %## в исходное значение

Стандарт url-кодирования RFC 3986 чуть мягче, все не цифро-буквенные символы, кроме - _ . ~ , должны быть заменены знаком %, за которым следует два шестнадцатеричных числа.

  • rawurlencode(string $string): string кодирует строку согласно RFC 3986
  • rawurldecode(string $string): string декодируетстроку, в которой последовательность знаков процента (%) и следующие за ним два шестнадцатеричных числа заменены буквальными символами

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

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

  • json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false выполняет рекурсивное преобразование значения в JSON-строку
    • JSON_UNESCAPED_UNICODE !!! Не кодировать многобайтовые символы Unicode (по умолчанию они кодируются как \uXXXX)
    • JSON_HEX_QUOT все двойные кавычки " кодируются в \u0022
    • JSON_NUMERIC_CHECK  Кодирование строк, содержащих числа, как числа
    • JSON_PRETTY_PRINT использовать пробельные символы в возвращаемых данных для их форматирования
    • JSON_FORCE_OBJECT !!! Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект, а массив пуст
    • ассоциативные массивы всегда преобразуются в объекты
  • json_decode( string $json, ?bool $associative = null, int $depth = 512, int $flags = 0 ): mixed преобразует закодированную JSON-строку в PHP-значение
    • JSON_OBJECT_AS_ARRAY преобразует объекты как массивы (опция также устанавливается, если параметр  associative=true
  • 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 не существует
  • parse_str(string $string, array &$result): void парсит строку string (должна иметь формат QUERY) и найденные параметры со значениями добавляет в ассоциативный массив result
    • если массив не был задан, присваивает значения переменным в текущем контексте, что крайне НЕ РЕКОМЕНДУЕТСЯ руководством PHP Manual
  • http_build_query( array|object $data, string $numeric_prefix = "", ?string $arg_separator = null, int $encoding_type = PHP_QUERY_RFC1738 ): string генерирует URL-кодированную QUERY-строку из предоставленного ассоциативного (или индексированного) массива

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

//

  • file_exists(string $filename): bool возвращает true, если указанный файл или каталог существует
  • finfo_file (finfo $finfo, string $filename, int $flags = FILEINFO_NONE, ?resource $context = null): string|false возвращает текст описания содержимого файла filename или 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 - возвращает в строке содержимое файла filename или фрагмент, начиная со смещения offset и длиной length байт
  • file_put_contents( string $filename, mixed $data, int $flags = 0, ?resource $context = null ): int|false записывает в файл filename значение data
  • fopen()
  • fclose()
  • fread()
  • fwrite()

//

  • realpath(string $path): string|false раскрывает все символические ссылки, переходы типа /./, /../ и лишние символы / в пути path, возвращая канонизированный абсолютный путь к файлу

Web

Сессии

//

  • session_start(array $options = []): bool создаёт сессию, либо возобновляет существующую, основываясь на идентификаторе сессии, переданном через GET- или POST-запрос, либо переданный через cookie
  • session_destroy(): bool уничтожает все данные, связанные с текущей сессией (не удаляет какие-либо глобальные переменные, связанные с сессией и не удаляет сессионные cookie,  эквивалентно очистке массива $_SESSION)
  • session_write_close(): bool завершает текущую сессию, сохраняет данные сессии и снимает блокировку данных сессии; выполняется автоматически после завершения скрипта,  но поскольку блокировка данных сессии удерживает конкурирующие запросы рекомендуется вызывать ее как можно раньше
  • session_id(); // id сессии
  • session_name();

Куча !!!

    • 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( array|string $search, array|string $replace, string|array $subject, int &$count = null ): string|array возвращает копию исходной строки или массива subject, в которой подстроки search будут заменены на replace, count служит ограничителем или счетчиком числа замен
      • str_ireplace() - регистронезависимый вариант функции str_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>.
    • str_pad( string $string, int $length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT ): string возвращает строку string, дополненную слева, справа или с обеих сторон до заданной длины значением pad_string (за замовчуванням містить пробіл)
    • Фрагментированные строки
      • explode(string $separator, string $string, int $limit = PHP_INT_MAX): array Возвращает массив строк, полученных разбиением строки string с использованием separator в качестве разделителя.
      • implode(array $array, string $separator): string Объединяет элементы массива с помощью строки separator
        • implode(array $array): string альтернативная сигнатура без поддержки именованных аргументов
        • implode(array $array, string $separator): string сигнатура устаревшая с PHP 7.4.0
        • 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()
      • str_getcsv( string $string, string $separator = ",", string $enclosure = "\"", string $escape = "\\" ): array !!! выполняет разбор CSV-строки в массив
    • mb_strtoupper(string $string, ?string $encoding = null): string возвращает строку string, буквенные символы в которой приведены к верхнему регистру
    • strip_tags(string $string, array|string|null $allowed_tags = null): string пытается возвратить строку, из которой удалены все NULL-байты, HTML- и PHP-теги из строки 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() добавит дополнительную энтропию (используя комбинированный линейный конгруэнтный генератор) в конце возвращаемого значения, что увеличивает вероятность уникальности результата.

Регулярные выражения PCRE

/

  • preg_grep(string $pattern, array $array, int $flags = 0): array|false - проверяет массив строковых значений array на соответствие регуляроному выражения pattern, возвращает массив соответствующих значений
  • preg_replace(string|array $pattern, string|array $replacement, string|array $subject, int $limit=-1, int &$count=null): string|array|null) выполняет поиск pattern и замену на replacement в строке или массиве строк subject
  • preg_match( string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0 ): int|false - проверяет строку subject на соответствие регулярному выражению pattern, возвращает первое найденное соответствие
  • preg_match_all(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0 ): int|false - проверяет subject на соответствие регулярному выражению pattern, возвращает все найденные соответствия
  • preg_split( string $pattern, string $subject, int $limit = -1, int $flags = 0 ): array|false разбивает строку по регулярному выражению

Пример декомпозиции строки 'a1b123c6789' на фрагменты 'a1', 'b123, 'c6789':

Библиотека 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 определяет возврат строки результата (по умолчанию результат направляется в поток вывода)
      • CURLOPT_CONNECTTIMEOUT - предел ожидания в секундах при попытке соединения (0 для бесконечного ожидания)
      • CURLOPT_TIMEOUT - предел ожидания в секундах после начала выполнения
      • CURLOPT_FOLLOWLOCATION значение true предписывает следовать перенаправлению заголовком "Location: ", полученному в ответе сервера
      • CURLOPT_MAXREDIRS устанавливает предельное число  перенаправлений
      • CURLOPT_USERNAME имя пользователя для аутентификации
      • CURLOPT_PASSWORD пароль для аутентификации
      • CURLOPT_USERPWD логин и пароль в объединенном формате "[username]:[password]"
      • CURLOPT_USERAGENT определяет значение параметра HTTP_USER_AGENT  запроса (по умолчанию передается строка вида "PHP (www.reks.biz), hosted by servera.link")
      • CURLOPT_ENCODING устанавливает кодирование
        • 'gzip'
      • и другие... //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

Работа с запросами возможна в асинхронном режиме одновременно с множеством простых cURL-дескрипторов.

  • curl_multi_init(): CurlMultiHandle инициация для асинхронной обработки
  • curl_multi_add_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int добавляет дескриптор handle к набору дескрипторов multi_handle
  • curl_multi_exec(CurlMultiHandle $multi_handle, int &$still_running): int выполняет все добавленные  в стек дескрипторы
  • curl_multi_select(CurlMultiHandle $multi_handle, float $timeout = 1.0): int блокирует выполнение скрипта, пока какое-либо из соединений curl_multi не станет активным
  • curl_multi_remove_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int удаляет дескриптор handle из стека  дескрипторов multi_handle
    • после удаления handle можно использовать в функции curl_exec()

Примеры использования cURL в PHP //snipp.ru

Функции 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
    • int $mysqli->connect_errno свойство содержит код ошибки последней попытки подключения или 0 при успешном подключении
    • 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 позволяет выполнить мульти-запрос из нескольких запросов, разделенных точкой с запятой
    • public mysqli::store_result(int $mode = 0): mysqli_result|false возвращает текущий результирующий набор запроса или мульти-запроса
    • public mysqli::more_results(): bool указывает на доступность следующего результирующего набора мульти-запроса
    • public mysqli::next_result(): bool подготавливает следующий результирующий набор  мульти-запроса
    • int|string $mysqli->affected_rows содержит число строк, затронутых последним запросом INSERT, UPDATE, REPLACE, DELETE и SELECT
      • для SELECT affected_rows не соответствует числу записей, для этого следует использовать свойство mysqli_stmt::$num_rows
    • int|string $mysqli->insert_id содержит значение поля с атрибутом AUTO_INCREMENT из первой успешной записи запросов INSERT или UPDATE
    • public mysqli::close(): bool закрывает открытое соединение с базой данных
    • public mysqli::real_escape_string(string $string): string экранирует специальные символы в строке для использования в SQL-выражении, используя текущий набор символов соединения

Обработка мультизапроса:

Если не "разобрать" результаты мультизапроса после его выполнения, в следующем запросе возникает ошибка "Commands out of sync; you can't run this command now", которую :

Класс 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, и ['field'] => 1
    • public mysqli_result::free(): void public mysqli_result::close(): void public mysqli_result::free_result(): void освобождает память, занятую результатами запроса
    • Имена полей, возвращаемые этой функцией являются зависимыми от регистра.
    • устанавливает NULL-поля в значение null PHP
Пояснения и дополнения

Как правильно использовать mysqli //habr.com (22.06.2022)
"...переводчик считает, что PDO является более продвинутым API для работы с БД, чем mysqli"
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]);
}

Объекты данных PDO

Модуль Объекты данных PHP (PDO) определяет простой и согласованный интерфейс для доступа к базам данных

///

Операции с файлами

//

  • file_get_contents( string $filename, bool $use_include_path = false, ?resource $context = null, int $offset = 0, ?int $length = null ): string|false читает содержимое файла в строку
    • /
  • xattr_get(string $filename, string $name, int $flags = 0): string возвращает значение расширенного атрибута файла
  • /

Модуль xdiff

Модуль xdiff позволяет создавать и применять файлы исправлений, содержащие различия между различными версиями файлов. Модуль может отсутствовать...

  • xdiff_string_diff( string $old_data, string $new_data, int $context = 3, bool $minimal = false ): string создаёт человекочитаемыйпатч для строк old_data и new_data
    • context указывает, сколько строк контекста должно быть добавлено в патч вокруг каждого различия
    • minimal в значение true позволит получить максимально короткий патч (может занять много времени)
  • xdiff_string_merge3(
    string $old_data,
    string $new_data1,
    string $new_data2,
    string &$error = ?
    ): mixed
    Объединяет три строки в одну и возвращает результат. В параметре old_data задаётся оригинальная строка, а в в new_data1 и new_data2 - её модифицированные версии. Опциональный параметр error используется для сохранения ошибок в процессе объединения.

Функции OpenSSL

Библиотека OpenSSL реализует симметричное и асимметричное шифрование и дешифрование PBKDF2, PKCS7, PKCS12, X509 и реализует потоки TLS.

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

Для шифрования и дешифрование используется ключ key с бинарным  значением. Вектор инициализации iv добавляет случайности шифрованию и требуется для режима CBC.

 

  • openssl_get_cipher_methods(bool $aliases = false): array возвращает массив строковых имен доступных алгоритмов шифрования
  • openssl_cipher_iv_length(string $cipher_algo): int|false возвращает длину инициализирующего вектора шифра, соответствующего алгоритму
  • openssl_cipher_key_length(string $cipher_algo): int|false возвращает длину ключа шифрования, соответствующего алгоритму
  • openssl_encrypt( string $data, string $cipher_algo, string $key, int $options = 0, string $iv = "", string &$tag = null, string $aad = "", int $tag_length = 16 ): string|false шифрует данные data шифром и ключом и возвращает необработанную строку, или кодированную base64
  • openssl_decrypt( string $data, string $cipher_algo, string $key, int $options = 0, string $iv = "", ?string $tag = null, string $aad = "" ): string|false расшифровывает необработанную или кодированную base64 строку data с помощью заданного метода и ключа !!!

Пример шифрования алгоритмом AES-256-CBC, для которого необходимы  бинарные значения инициализирующего вектора iv и ключа шифрования key, длина которой определяется алгоритмом:

Примеры

//

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

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

Работа с XML

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

А

Leave a Reply