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 Отправляет сообщение об ошибке в лог веб-сервера или в пользовательский файл
Функции для работы со значениями
//
- isset(mixed $var, mixed ...$vars): bool — проверяет для всех переменных в параметрах инициализацию значением, отличным от null, возвращает true, если все переменные инициализированы каким-то значениями
- unset(mixed $var, mixed ...$vars): void - удаляет перечисленные переменные (делает их неопределенными)
- empty(mixed $var): bool проверяет, считается ли переменная пустой, т.е. не существует или значение равно false
- 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"
- var_dump($x) - выводит информацию о переменной в поток вывода
- var_export(mixed $value, bool $return = false): ?string выводит интерпретируемое строковое представление переменной $value в поток вывода или как строку, если $return=true
- 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()
- модуль 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, предоставление любых некорректных символов устарело.
- base_convert(string $number, int $from_base, int $to_base): string возвращает строку, содержащую представление числа num в заданной целевой системе счисления
- number строковое представление числа
- from_base исходная система счисления в представлении num
- to_base целевая система счисления
- нестабильна! конвертирование после 112 бита за редким исключением не выполняется; в некоторых случаях конвертирование не выполняется даже для чисел 64 бит
Числовые значения в строковом представлении
- bcmod(string $num1, string $num2, ?int $scale = null): string
Получает остаток от деления num1 на num2. Если num2 не равен нулю, результат будет иметь такой же знак, что и num1.
Функции для работы с битами
Битовые операции с числовыми значениями реализованы на уровне базового синтаксиса.
Функции для работы со строками
Строка PHP является байтовой последовательностью произвольного содержания.
Строка содержащая текст использует кодировку UTF-8 переменной длины, в которой символу может соответствовать от 1 до 4 байт (кодовых единиц 8-бит). Символы ASCII от 0 до 127 (U+0000 to U+0127) хранятся в одном байте. Кириллические и национальные символы, и кодовые знаки от 128 до 2047 (U+0128 to U+2047) хранятся с использованием 2 байт. Грузинские, арабские, восточные символы используют 3 байта от 2048...
Это обстоятельство усложняет обработку строк содержащих текст, т.к. базовые строковые функции PHP оперируют байтами, что дает корректный результат только для ASCII. Для корректной работы с полным набором UTF-8 следует использовать функции с префиксом mb_ https://www.php.net/manual/ru/book.strings.php
Функции преобразования
- strval(mixed $value): string возвращает строковое представление значения простого типа
- int и float представляются в десятичном счислении
- bool представляются как '0' или '1'
- null представляется пустой строкой '' нулевой длины
- array представляются именем типа 'Array' без содержания
- object вызывает Fatal Error
- strcmp(string $string1, string $string2): int
- strncmp(string $string1, string $string2, int $length): int можно указать максимальное количество символов в обеих строках, которые будут участвовать в сравнении.
- substr_replace( array|string $string, array|string $replace, array|int $offset, array|int|null $length = null ): string|array заменяет фрагмент строки string, с позиции offset и длиной length, строкой replace и возвращает результат
- string/
- replace/
- offset положительный отступ делается от начала string, отрицательный от конца
- length по умолчанию null заменяет фрагмент до конца строки, положительная длина задает длину фрагмента, отрицательная длина задает отступ от конца строки, который служит концом фрагмента, нулевая длина реализует вставку
- substr_count( string $haystack, string $needle, int $offset = 0, ?int $length = null ): int возвращает число вхождений подстроки needle в строку haystack
- чувствительна к регистру
Универсальные функции
Для универсальных функций не имеет значения тип кодировки символов
-
- strlen(string $string): int возвращает длину строки string в байтах
- str_repeat(string $string, int $times): string возвращает новую строку состоящую из строки string, повторенной times раз
- str_replace( array|string $search, array|string $replace, string|array $subject, int &$count = null ): string|array возвращает новую строку или новый массив строк, в которой все подстроки search из subject заменены на replace
- trim(string $string, string $characters = " \n\r\t\v\x00"): string возвращает string, удалив из начала и конца строки указанные символы
- string произвольная UTF8 строка
- characters набор удаляемых символов (только ASCII), по умолчанию все неотображаемые ascii-символы (пробел, табуляция \t, перевод строки \n, возврата каретки \r, nul-байт \0, вертикальная табуляция \v)
- например, используя кавычку можно раскавычить строку с escape-последовательностью:
1$escape_line = trim( json_encode( 'Київ' ), '"' ); // \u041a\u0438\u0457\u0432
- например, используя кавычку можно раскавычить строку с escape-последовательностью:
- /
- stripos(string $haystack, string $needle, int $offset = 0): int|false
Многобайтовые фунции
Строки в формате 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_stripos( string $haystack, string $needle, int $offset = 0, ?string $encoding = null): int|false ищет позицию первого вхождения подстроки needle в строке haystack игнорируя регистр
- 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
- Преобразование регистра
- 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ß
Функции преобразования
- dechex(int $num): string формирует строковое представление значения беззнакового num в шестнадцатеричной системе
- hexdec(string $hex_string): int|float получает числовое значение равное шестнадцатеричному представлению в строке
- hex2bin(string $hexstr): string|false декодирует строку данных из строки шестнадцатеричного представления hexstr в физическую строку
- bin2hex(string $string): string !!!
Возвращает ASCII-строку, содержащую шестнадцатеричное представление аргумента string. Преобразование производится побайтно, начиная с верхнего полубайта - strtolower(string $string): string
регистровые
!!! Кодировка
- 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 - длина более длинной из двух строк.
Список параметров
Строчный вывод
//
- number_format(float $num,int $precision = 0,?string $decimal_separator = ".",?string $thousands_separator = ","): string форматирует числовое значение num с математическим округлением
-
- precision точность знаков после запятой
- Если 0, decimal_separator опускается в возвращаемом значении.
- precision точность знаков после запятой
-
- decimal_separator Устанавливает разделитель дробной части
- thousands_separator Устанавливает разделитель тысяч
//
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_search(mixed $needle, array $haystack, bool $strict = false): int|string|false возвращает ключ первого найденного совпадения значения needle в массиве haystack, иначе false
- strict устанавливает строгое сравнение ===, по умолчанию нестрогое ==
- array_is_list(array $array): bool определяет, является ли данный array списком, т.е. его ключи состоят из последовательных чисел от 0 до count($array)-1
- array_count_values(array $array): array в одномерном массиве array, содержащем только строковые и целые значения, подсчитывает число вхождений каждого значения; возвращает массив, в котором ключами являются значения, а значениями - количество повторений значений.
Внутренний указатель
Кроме того, что array является foreach-итерируемым, у каждого массива имеется внутренний указатель текущего элемента, который используется и управляется группой функций:
- 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_slice( array $array, int $offset, ?int $length = null, bool $preserve_keys = false ): array возвращает фрагмент массива, заданный начальным смещением и длиной
-
- array исходный массив
- offset устанавливает отступ фрагмента в массиве
- отрицательное значение задает отступ с конца
- length длина фрагмента (ожидаемая), может превышать фактически доступную длину
- null (по умолчанию) устанавливает максимальную длину (до конца массива)
- отрицательное значение определяет не длину, а индекс конца последовательность от конца массива
- preserve_keys (по умолчанию false) логическое true определяет условие сохранения последовательности ключей
1234$src = [ 'a' => 123, 'c' => 789 ];$dst = array_slice( $src, 0, 1, true )+ array( 'b' => 456 )+ array_slice( $src, 1, null, true ); -
- array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array модифицирует исходный массив array, заменяя фрагмент, заданный смещением и длиной, другим массивом и возвращает массив замещенных элементов
- offset смещение начала замещаемого блока
- не отрицательное смещение задает отступ от начала массива
- отрицательное смещение задает отступ от конца массива
- length длина замещаемого блока
- ноль реализует вставку
- положительное задает число замещаемых элементов от смещения
- отрицательное задает отступ замещаемых от конца массива
- replacement может быть значением или массивом значений
- offset смещение начала замещаемого блока
Трансформация
Операции с массивами, которые используют массивы как цельные объекты для получения результирующего массива.
- $array + $array + $array + ... последовательно объединяет массивы без потери и изменения порядка ключей ассоциативных массивов
- array_keys(array $array): array ,
array_keys(array $array, mixed $filter_value, bool $strict = false): array возвращает числовые и строковые ключи, содержащиеся в массиве array- array исходный массив с ключами
- filter_value !!! Если указано, будут возвращены только ключи у которых значения элементов массива совпадают с этим параметром
- strict Определяет использование строгой проверки на равенство (===) при поиске.
- array_values() !!! обеспечивает возвращение индексированного массива, заново индексируя возвращаемый массив числовыми индексами
- array_combine(array $keys, array $values): array создаёт новый ассоциативный массив с ключами из значений массива keys и значениями из массива values
- keys массив ключей, все значения будут преобразованы в (string)
- values массив значений
- range(string|int|float $start, string|int|float $end, int|float $step = 1): array создаёт массив значений арифметической последовательность в заданном диапазоне с заданным шагом
- array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array возвращает массив из значений столбца массива array с ключом column_key. Опционально можно указать index_key, чтобы индексировать возвращаемый массив значениями из столбца с ключом index_key входного массива.
- array многомерный массив или массив объектов, из которого будет производиться выборка значений. Если задан массив объектов, то можно выбирать любые его общедоступные свойства. Для выборки закрытых или защищённых свойств, объект должен реализовывать магические методы __get() и __isset()
- column_key ключ столбца, значения которого нужно вернуть. Может содержать как числовой, так и строковый ключ для ассоциативных массивов.
- значение null трансформирует индексированный массив в ассоциативный, устанавливая ключом значения из index_key
- при совпадающих значениях ключа происходит замещение предшествующих значений последними
- значение null трансформирует индексированный массив в ассоциативный, устанавливая ключом значения из index_key
- index_key ключ столбца, значения которого (и числовые, и строковые) будут использоваться в качестве ключей возвращаемого массива
- array_replace(array $array, array ...$replacements): array замещает значения массива array значениями с такими же ключами из других переданных массивов
- Если ключ из первого массива присутствует во втором массиве, его значение заменяется на значение из второго массива.
- Если ключ есть во втором массиве, но отсутствует в первом - он будет создан в первом массиве.
- Если ключ присутствует только в первом массиве, то сохранится как есть
- array_replace_recursive(array $array, array ...$replacements): array рекурсивно заменяет элементы первого массива элементами переданных массивов
- array_merge(array ...$arrays): array последовательно сливает элементы нескольких массивов в новый массив, значения совпадающих текстовых ключей замещаются последним значение, значения с числовыми ключами добавляются в конец
- array_merge_recursive(array ...$arrays): array сливает элементы нескольких массивов в новый массив без потери значений
- при совпадении ключа значение формируется индексированный массив значений
- новые ключи со значением добавляются в конце
- массивы могут быть иерархическими
- array_intersect(array $array, array ...$arrays): array возвращает массив из элементов исходного array, если значения были найдены в массивах arrays, сохраняя порядок отобранных ключей
- array_intersect_key(array $array, array ...$arrays): array возвращает массив из элементов array, ключи которых найдены в массивах arrays
- исходный порядок ключей любого типа сохраняется
- arrays ассоциативные массивы определяют набор ключей, при этом значения игнорируются
- array_intersect_assoc(array $array, array ...$arrays): array возвращает массив из элементов array, в которых пары ключ-значение найдены в массивах arrays
- array_intersect_uakey(array $array, array ...$arrays, callable $key_compare_func): array и
array_intersect_uassoc(array $array, array ...$arrays, callable $key_compare_func): array работаю, как описано выше, используя для сравнения элементов колбек-функцию- callback(mixed $a, mixed $b): int колбек функция должна вернуть целое
- ноль, если $a равно $b
- отрицательное, если $a меньше $b
- положительное, если $a больше $b
- callback(mixed $a, mixed $b): int колбек функция должна вернуть целое
- array_diff_key(array $array, array ...$arrays): array
Сравнивает ключи array с ключами arrays и возвращает разницу. Эта функция схожа с array_diff() за исключением того, что сравниваются ключи, а не значения.
//
Управление последовательностью значений
- shuffle(array &$array): bool перемешивает элементы массива в случайном порядке. Используется псевдослучайный генератор случайных чисел, не подходит для задач криптографии
- 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 может использоваться для изменения поведения сортировки с использованием следующих значений:
- asort(array &$array, int $flags = SORT_REGULAR): true сортирует array по возрастанию значений, сохраняя связь значений с ключами как в ассоциативном, так и в индексированном массиве; всегда возвращает true
- SORT_REGULAR сравнивает значения, как при использовании операторов сравнения
- SORT_NUMERIC сравнивает значения, как числовые
- SORT_STRING сравнивает значения, как строковые
- SORT_LOCALE_STRING сравнивает значения, как строковые для текущей локализации (смотри setlocale())
- SORT_NATURAL сравнивает элементы как строки в "естественном порядке", как natsort()
- SORT_FLAG_CASE для сравнения без учёта регистра совместно с SORT_STRING или SORT_NATURAL
- arsort(array &$array, int $flags = SORT_REGULAR): true сортирует array как asort(), но по убыванию значений
- natsort(array &$array): true реализует натуральную сортировку (числа в составе строк сравниваются как числа: "x2" меньше "x12")
Функция реализует алгоритм сортировки, при котором порядок буквенно-цифровых строк будет - ksort(array &$array, int $flags = SORT_REGULAR): true сортирует array по возрастанию ключа; всегда возвращает true
- krsort(array &$array, int $flags = SORT_REGULAR): true сортирует array по убыванию ключа; всегда возвращает true
- usort(array &$array, callable $callback): true сортирует массив используя пользовательскую функцию для сравнения элементов
123usort($array, function ($a, $b) {return $a['key'] - $b['key'];}); - array_multisort( array &$array1, mixed $array1_sort_order = SORT_ASC, mixed $array1_sort_flags = SORT_REGULAR, mixed ...$rest ): bool !!!
Использование последовательности значений
// Буфер, Очередь, Стек
- array_push(array &$array, mixed ...$values): int использует array как стек и добавляет переданные значения в конец массива array. Длина array увеличивается на количество переданных значений.
- array_pop(array &$array): mixed извлекает и возвращает значение последнего элемента массива array, уменьшая размер array на один элемент
- array_unshift(array &$array, mixed ...$values): int добавляет переданные в качестве аргументов элементы в начало массива array. Обратите внимание, что список элементов добавляется целиком, то есть порядок элементов сохраняется. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними
- array_shift(array &$array): mixed извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними
- в блочные??? array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array удаляет length элементов, расположенных на расстоянии offset из массива array, и заменяет их элементами массива replacement, если он передан в качестве параметра
Функции использующие замыкания
- array_map(?callable $callback, array $array, array ...$arrays): array возвращает массив результатов callback-функции, вызванной к каждому элементу заданного массива
- callback функция заданная именем или лямбда-функция
- число параметров функции должно соответствовать числу массивов
- array ...$arrays массив или несколько параллельно обрабатываемых массивов, значения которых образуют набор параметров callback-функции
- массивы, для которых в callback-функции нет параметра игнорируются
- callback функция заданная именем или лямбда-функция
- 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 та MySQL
Функции работы с функциями
// Функции 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
Функции для работы с 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-строку из предоставленного ассоциативного (или индексированного) массива
- Кодирование
четыре функции кодирования подробней описаны в следующем разделе- urlencode(string $string): string кодирует строку для использования в запросе
- urldecode(string $string): string декодирует строку запроса
- rawurlencode(string $string): string кодирует строку согласно RFC 3986
- rawurldecode(string $string): string декодирует строку
Кодирование
HTML-сущности
В HTML символы <, >, ", ', & используются для разметки, поэтому в тексте их представляют HTML-сущностями. Кроме этих спецсимволов существует много других символов, для которых также соответствуют HTML-сущности.
- get_html_translation_table() !!! таблица соответствий HTML-сущностей
- htmlspecialchars( string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null, bool $double_encode = true ): string возвращает копию строки string, в которой специальные html-символы <, >, ", ' и & заменены соответствующими html-сущностями - htmlentities( string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null, bool $double_encode = true ): string возвращает копию строки string, в которой выполнены все возможные замены символов на соответствующие HTML-сущности (смотри get_html_translation_table()) - html_entity_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null): string выполняет преобразование обратноое функции htmlentities(), а именно преобразует HTML-сущности в строке string в соответствующие им символы (в том числе все числовые сущности), которые
а) обязательно верны для выбранного типа документа - то есть, для XML эта функция не преобразует именованные сущности, которые могут быть определены в каком-нибудь DTD
б) их символы находятся в кодировке, соответствующей выбранной и разрешены в выбранном типе документа. Все другие сущности остаются без изменений - nl2br(string $string, bool $use_xhtml = true): string Возвращает строку string, в которой перед каждым переводом строки (\r\n, \n\r, \n и \r) вставлен <br /> или <br>.
- 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 ); |
Функции файловой системы
//
- Анализ
- 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 -
- filesize(string $filename): int|false возвращает размер файла заданного именем
- fileatime(string $filename): int|false возвращает метку времени последнего доступа (access) к файлу
- filectime(string $filename): int|false возвращает метку времени последнего изменения (change) индексного дескриптора (inode содержит атрибуты владельца, доступа и др.) файла
- filemtime(string $filename): int|false возвращает метку времени последней записи (modification) содержания файла
- Содержание
- 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( string $filename, string $mode, bool $use_include_path = false, ?resource $context = null ): resource|false закрепляет именованный ресурс, указанный в аргументе filename, за потоком.
- 'r' Открывает файл только для чтения; помещает указатель в начало файла
- 'r+' Открывает файл для чтения и записи; помещает указатель в начало файла.
- 'w' Открывает файл только для записи; в противном случае ведёт себя так же, как и 'w+'.
- 'w+' Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
- 'a' Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются в конец.
- 'a+' Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() влияет только на позицию чтения, записи всегда добавляются в конец.
- 'x' Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
- 'x+' Создаёт и открывает для чтения и записи; в остальном имеет то же поведение, что и'x'.
- 'c' Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотрите flock()) перед изменением, так как использование 'w' может обрезать файл ещё до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
- 'c+' Открывает файл для чтения и записи; в остальном имеет то же поведение, что и 'c'.
- 'e' Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающих POSIX.1-2008.
- fsockopen( string $hostname, int $port = -1, int &$error_code = null, string &$error_message = null, ?float $timeout = null ): resource|false устанавливает соединение с сокетом ресурса hostname
- fclose() -
- fseek(resource $stream, int $offset, int $whence = SEEK_SET): int Устанавливает смещение в файле, на который ссылается stream. Новое смещение, измеряемое в байтах от начала файла, получается путём прибавления параметра offset к позиции, указанной в параметре whence
В общей сложности разрешается указывать смещение за пределами конца файла, если данные потом будут записаны в этой позиции, чтение любой незаписанной области между концом файла и указанной позицией возвратит нулевые байты. Однако, определённые потоки могут не поддерживать это поведение, особенно если у них есть основное хранилище фиксированного размера.- stream Указатель (resource) на файл, обычно создаваемый с помощью функции fopen().
- offset Смещение
Для смещения позиции перед концом файла необходимо передать отрицательное значение offset и установить параметр whence в SEEK_END - whence Значениями whence являются:
- SEEK_SET - Установить смещение в offset байт.
- SEEK_CUR - Установить смещение в текущее положение плюс offset.
- SEEK_END - Установить смещение в конец файла плюс offset.
- ftell(resource $stream): int|false возвращает позицию файлового указателя stream
- fgets(resource $stream, ?int $length = null): string|false читает строку из файлового указателя
- fread(resource $stream, int $length): string|false читает до length байт из файлового указателя stream и смещает указатель. Чтение останавливается как только было достигнуто одно из следующих условий:
- было прочитано length байт
- достигнут EOF (конец файла)
- стал доступен пакет или истекло время ожидания сокета (для сетевых потоков)
- если читаемый поток является буферизованным и не представляет собой обычный файл, то за один раз максимум читается количество байт, равное размеру одной порции данных (обычно это 8192), однако, в зависимости от ранее буферизованных данных размер возвращаемых данных может быть больше размера одной порции данных
- fwrite()
- fopen( string $filename, string $mode, bool $use_include_path = false, ?resource $context = null ): resource|false закрепляет именованный ресурс, указанный в аргументе filename, за потоком.
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, возвращая канонизированный абсолютный путь к файлу
- glob(string $pattern, int $flags = 0): array|false возвращает сортированный массив всех путей !!!, совпадающие с шаблоном pattern согласно правилам, используемым в функции glob() библиотеки libc
- pattern шаблон содержит путь допускающий спецсимволы подстановки:
- * соответствует произвольному числу любых символов
- ? соответствует одному любому символу
- [...] соответствует одному символу из группы
- [!...] соответствует одному символу, не входящему в группу
- \ экранирует следующий символ, кроме случаев, когда используется флаг
- тильда не раскрывается и параметры не подставляются
- flags флаги влияют на результатGLOB_MARK добавляет слеш (обратный слеш в Windows) к каждой возвращаемой директории
GLOB_NOSORT возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту.
GLOB_NOCHECK возвращает шаблон поиска, если с его помощью не был найден ни один файл.
GLOB_NOESCAPE обратные слеши не экранируют метасимволы.
GLOB_BRACE раскрывает {a,b,c} для совпадения с 'a', 'b' или 'c'.
GLOB_ONLYDIR возвращает только директории, совпадающие с шаблоном.
GLOB_ERR останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются.
- pattern шаблон содержит путь допускающий спецсимволы подстановки:
Web
Сессия
//www.php.net/manual/en/ref.session.php
//
- session_start(array $options = []): bool создаёт сессию, либо возобновляет существующую, основываясь на идентификаторе сессии, переданном через GET- или POST-запрос, либо переданный через cookie
- session_destroy(): bool уничтожает все данные сохраненные в сессии, но не удаляет cookie (эквивалентно очистке массива $_SESSION)
- session_write_close(): bool завершает текущую сессию, сохраняет данные сессии и снимает блокировку данных сессии; выполняется автоматически после завершения скрипта, но поскольку блокировка данных сессии удерживает конкурирующие запросы рекомендуется вызывать ее как можно раньше
- session_regenerate_id(bool $delete_old_session = false): bool заменяет идентификатор текущей сессии новым сгенерированным
- delete_old_session удаляет старый связанный файл с сессией или нет
- session_id(?string $id = null): string|false устанавливает идентификатор сессии перед вызовом session_start(), а после получает идентификатор текущей сессии (если сессии нет, идентификатор содержит пустую строку)
- id строка из 32 символов [a-zA-Z0-9,-] заменяет идентификатор текущий сессии
- Замечание: При использовании сессионных cookie, указание id для session_id() приводит к тому, что при вызове session_start() всегда будут отправлены новые cookie, независимо от того, совпадает ли идентификатор текущей сессии с вновь установленным.
- Константа SID также может быть использована для получения текущего имени и идентификатора сессии в виде строки, подходящей для добавления в URL-адреса
- id строка из 32 символов [a-zA-Z0-9,-] заменяет идентификатор текущий сессии
- session_name(?string $name = null): string|false возвращает или устанавливает имя текущей сессии (по умолчанию 'PHPSESSID')
//
- setcookie(string $name, string $value = "", array $options = []): bool устанавливает значение cookie для передачи клиенту в HTTP-заголовке, поэтому имеет смысл только до вывода в основной поток (сигнатура добавлена в PHP 7.3)
- name становится ключом значения $_COOKIE['myname']
- допустимо использовать name[index], чтобы устанавливать значения в массиве:
123setcookie("myname[myindex]", "array example");...$test = $_COOKIE['myname']['myindex'];
- допустимо использовать name[index], чтобы устанавливать значения в массиве:
- value значение куки, которое при передаче проходит через url-кодирование/декодирование; пустая строка удаляет куки
- options ассоциативный массив значений параметров с ключами:
- expires значение (int) метка времени Unix устанавливает срок прекращения актуальности куки
- path (string) путь к серверной папке для хранения куки; значение '/' делает доступным во всем домене domain
- domain значение (string) сделает куки доступным домену и всем поддоменам
- secure значение (bool) True обеспечивает передачу куки только при безопасном https-соединении HTTPS
- httponly
- значение (bool) True обеспечивает использование HTTP-протокола, что делает куки недоступными для браузерных скриптов, в т.ч. для JavaScript
- samesite samesite должно быть либо "None", либо "Lax", либо "Strict"
- name становится ключом значения $_COOKIE['myname']
- setrawcookie(string $name, string $value = ?, array $options = []): bool устанавливает значение куки, как функция setcookie(), но url-кодирование при передаче выполняться не будет
GeoIP
Модуль GeoIP позволяет найти местоположение по IP-адресу. С помощью GeoIP можно получить такую информацию как город, государство, страна, долгота и широта, а также можно узнать, интернет-провайдера и тип соединения.
Куча !!!
-
- mb_internal_encoding(?string $encoding = null): string|bool устанавливает/получает внутреннюю кодировку скрипта
- $encoding допустимое имя кодировки, например: 'UTF-8'
- ord(string $character): int Интерпретирует бинарное значение первого байта строки character как беззнаковое целое.
- chr(int $codepoint): string возвращает строку из одного символа, код которого задан аргументом codepoint, который интерпретируется как беззнаковое целое (unsigned integer).
- 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 с учетом регистра
- 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
- 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)
- addcslashes(string $string, string $characters): string экранирует в строке символы из заданного набора
- characters строка экранируемых символов
- stripslashes(string $string): string
stripcslashes(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"]] |
- quotemeta(string $string): string возвращает строку с экранированными символами: . \ + * ? [ ^ ] ( $ )
Библиотека 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::fetch_all(int $mode = MYSQLI_NUM): array помещает все строки результирующего набора в общий индексированный массив, при этом каждая строка представляется массивом аналогично fetch_array()
- 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]);
}
Операции с файлами
//
- 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_random_pseudo_bytes(int $length, bool &$strong_result = null): string генерирует строку псевдослучайных байт с заданной длиной
- length (целое положительное число) длина генерируемой строки
- strong_result возвращаемое значение true, если был использован криптографически сильный алгоритм, иначе false
- 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(); |