PHP - Hypertext Preprocessor (первоначально PHP/FI - Personal Home Page / Form Interpreter), а позже
Official site of PHP (english) //www.php.net
- Руководство по PHP .../manual/ru/
Портал энтузиастов PHP //www.php.su
Snipp //snipp.ru/php/
Встроенные функции
//
Системные функции
//
- 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-последовательностью:
1$escape_line = trim( json_encode( 'Київ' ), '"' ); // \u041a\u0438\u0457\u0432
- используя кавычку можно раскавычить строку с escape-последовательностью:
- characters набор удаляемых символов, по умолчанию все неотображаемые ascii-символы (пробел, табуляция \t, перевод строки \n, возврата каретки \r, nul-байт \0, вертикальная табуляция \v)
// регистровые
- 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 или текущей внутренней кодировки, если она опущена.-
1$win_1251 = mb_convert_encoding( $utf_8, 'UTF-8', 'windows-1251' );
-
- iconv(string $from_encoding, string $to_encoding, string $string): string|false
преобразует строку string из одной кодировки в другую- если символ нельзя перекодировать, то он будет удален, если в конце to_encoding добавлено //IGNORE или заменен транслитерацией, если //TRANSLIT (транслитерация не всегда работает)
1$utf_8 = iconv( 'windows-1251', 'UTF-8//IGNORE', $win_1251 );
- если символ нельзя перекодировать, то он будет удален, если в конце to_encoding добавлено //IGNORE или заменен транслитерацией, если //TRANSLIT (транслитерация не всегда работает)
- ошибка определения кодировки Героѕм ѕлава! может возникать при чтении файла без BOM, и решается не кодированием:
1$text = "\xEF\xBB\xBF" . file_get_contents( 'https://example.com' );
Кодирование
//
- 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)
- algo имя алгоритма хеширования
Строка полученная
Анализ строк
//
- 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. Она удалит все существующие ключи, а не просто переупорядочит их.
- Сбрасывает внутренний указатель массива на первый элемент.
- flags Необязательный второй параметр flags может использоваться для изменения поведения сортировки с использованием следующих значений:
- 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 или еще хуже
- в значении true устанавливает тип результата int выражающее наносекунды
- as_number по умолчанию возвращает array [секунды, наносекунды]
- 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
- (include path) : bool
- 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 асинхронно отдельным процессом, если получить возврат нет необходимости:
1 |
shell_exec('php -f myscript.php >/dev/null 2>&1 &' ) |
Выражение >/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
1 2 3 4 5 |
$data_json = json_encode( $data, JSON_HEX_QUOT | JSON_UNESCAPED_UNICODE ); $data_sql = $mysqli->real_escape_string( $data_json ); ... // INSERT...$data_sql ... // SELECT data_sql... $data = json_decode( $data_sql ); |
Функции для работы с 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 не существует
- component
- 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()
1 2 3 |
$filename = '/home/reks/reks.biz/www/folder/file.txt'; file_put_contents( $filename, $content_to_put ); $content_to_get = file_get_contents( $filename ); |
//
- 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 символов
- 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 удаляет экранирующие символы
- mb_internal_encoding(?string $encoding = null): string|bool устанавливает/получает внутреннюю кодировку скрипта
- 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':
1 2 3 4 |
echo preg_match_all( '/([abc])(\d+)/', 'a1b123c6789', $matches, PREG_SET_ORDER) . ' ' . json_encode($matches); 3 [["a1","a","1"],["b123","b","123"],["c6789","c","6789"]] |
Библиотека 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 - значение параметра
- $option - параметр CURLOPT
- 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
- $option - информационный параметр
- 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-выражении, используя текущий набор символов соединения
1 2 3 4 5 6 7 8 9 |
$mydb = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME ); if( $mydb ) { $mydb->set_charset( 'utf8' ); $message = $mydb->real_escape_string( "ATTENTION! \r\n Escape special characters before!" ); $query = "INSERT INTO journal(message) VALUES ('{$message}')"; $result = $mydb->query( $query ); if(( $result === true ) AND ( $mydb->affected_rows === 1 )) return $mydb->insert_id; } |
Обработка мультизапроса:
1 2 3 4 5 6 7 8 9 10 |
... $result = $mydb->multi_query( "SELECT user AS data FROM users;" . "SELECT msg AS data FROM messages;" ); do { $result = $mysqli->store_result(); while ($row = $result->fetch_array( MYSQLI_ASSOC )) { echo $row['data'], "\n"; } } while ($mysqli->more_results() && $mysqli->next_result()); |
Если не "разобрать" результаты мультизапроса после его выполнения, в следующем запросе возникает ошибка "Commands out of sync; you can't run this command now", которую :
1 2 3 4 5 |
... $result = $mydb->multi_query( "INSERT INTO journal(message) VALUES ('{$msg123}')" . "INSERT INTO journal(message) VALUES ('{$msgABC}')" ); while( $mydb->next_result( )); |
Класс 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) и будет пересылаться пакетами
- $types - строка, содержащая один или более символов, каждый из которых задаёт тип значения привязываемой переменной:
- 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
- int представляет количество буферизованных строк
- 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
- $mode MYSQLI_ASSOC, MYSQLI_NUM или MYSQLI_BOTH необязательный, по умолчанию MYSQLI_BOTH указывает на тип массива представления данных
- 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
Буфурезированный результат загружает ответ сервера целиком, а небуферизированный по частям, что связано с рядом особенностей:
- Преимущества:
- Результат можно начинать читать раньше, сокращается время ожидания;
- Результат не занимает место в оперативной памяти.
- Недостатки:
- Невозможно узнать, сколько строк получено;
- Невозможно передвигаться к определенному результату, то есть можно читать данные только с начала и по порядку;
- Нельзя выполнять других запросов, пока не закрыт этот результат.
Примеры
Простейший запрос выборки:
1 2 3 4 5 6 7 |
$mydb = new mysqli( $myhost, $myuser, $mypassword, $mydbname ); if( $mydb->connect_errno === 0) { $result = $mydb->query( "SELECT * FROM mytable WHERE id={$myid};" ); $row = $result->fetch_array(); if( !is_null( $row )) { var_dump( $row ); ... |
Запрос с параметрами !!!
$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) определяет простой и согласованный интерфейс для доступа к базам данных
///
1 2 3 4 |
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password); foreach( $dbh->query('SELECT * FROM users') as $row) { echo "<tr><td>{$row['id']}</td><td>{$row['user']}</td></tr>"; } |
Операции с файлами
//
- 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, длина которой определяется алгоритмом:
1 2 3 4 5 6 |
$iv = random_bytes(openssl_cipher_iv_length('AES-256-CBC')); $key = random_bytes(openssl_cipher_iv_length('AES-256-CBC')); $original = 'Ще не вмерла України і слава, і воля.'; $encrypted = openssl_encrypt( $original, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv ); ... $decrypted = openssl_decrypt( $encrypted, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv ); |
Примеры
//
Генерация уникального глобального идентификатора (GUID)
В OS Windows для PHP доступна библиотека COM и функция com_create_guid(), в противном случае на сервере Linux GUID можно несложно сгенерировать самостоятельно:
1 2 3 4 5 6 7 8 9 |
if (function_exists('com_create_guid') === true) { return com_create_guid(); } if (function_exists('openssl_random_pseudo_bytes') === true) { $data = openssl_random_pseudo_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100 $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10 return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); } |
Работа с XML
Пример конвертирования параметров глобального массива $_POST в XML с сериализацией в выводной поток:
1 2 3 4 5 6 |
$dom = new DOMDocument('1.0', 'utf-8'); foreach($_POST as $key => $value) { $element = $dom->createElement($key, $value); $dom->appendChild($element); } echo $dom->saveXML(); |