Разные функции PHP
Разбираем разнообразные встроенные функции PHP: версия, среда выполнения, уникальные идентификаторы и управление временем.
Разнообразные функции PHP — это набор встроенных функций, которые не относятся ни к одной конкретной категории, такой как строки или массивы. Они в основном позволяют скрипту заглянуть в собственную среду выполнения: какая версия PHP запущена, на какой операционной системе работает, какой пользователь владеет процессом, как долго разрешено выполнение, и так далее. Они нужны, когда нужно проверить среду выполнения, отладить конфигурацию, сгенерировать уникальный токен или управлять временем выполнения.
На этой странице наиболее полезные из этих функций сгруппированы по задачам, которые они решают, с примерами для каждой группы.
Проверка установки PHP
Когда что-то ведёт себя по-разному на двух серверах, первый вопрос обычно: «Какая версия и конфигурация у меня?» Эти функции дают ответ.
phpinfo()— выводит полный HTML-отчёт о сборке PHP, загруженных расширениях и настройкахphp.ini. Запустите один раз на новом сервере, затем удалите файл (он раскрывает много информации о вашей среде).phpversion()— возвращает только строку версии, например"8.2.10".php_uname()— возвращает сведения об операционной системе, на которой работает PHP.get_defined_constants()— возвращает массив всех определённых констант (встроенных и пользовательских).
<?php
echo phpversion(), "\n"; // 8.2.10
echo php_uname('s'), "\n"; // e.g. "Linux" ('s' = OS name only)
// Did the developer remember to define this config constant?
defined('APP_ENV') or define('APP_ENV', 'production');
$constants = get_defined_constants(true); // grouped by category
echo APP_ENV, "\n"; // production
?>
phpinfo()имеет смысл только тогда, когда вывод идёт в браузер, поэтому в приведённом выше примере она не показана.
Сравнение версий
Никогда не сравнивайте строки версий с помощью < или == — "8.10" меньше "8.9" как обычная строка. Используйте version_compare(), которая понимает семантику версий.
<?php
// Is the running PHP new enough for a feature?
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
echo "Named arguments are available.\n";
}
// Two-argument form returns -1, 0, or 1
echo version_compare('1.9.0', '1.10.0'), "\n"; // -1 (1.9 is older)
?>Генерация уникальных идентификаторов
uniqid() создаёт идентификатор на основе текущего времени с точностью до микросекунды. Это удобно для временных имён файлов и ключей очистки кэша, но функция не является криптографически безопасной — для токенов, паролей и всего, что связано с безопасностью, используйте random_bytes() или bin2hex(random_bytes(16)).
<?php
echo uniqid(), "\n"; // e.g. 651f3a9c4b2d8
echo uniqid('user_', true), "\n"; // prefix + more entropy: user_651f3a9c4b2d81.23456789
?>Управление временем выполнения и ограничениями
Долго выполняющиеся скрипты (импорт, построение отчётов) иногда должны делать паузу или работать дольше стандартного ограничения по времени.
sleep($seconds)— приостанавливает скрипт на целое количество секунд.usleep($microseconds)— пауза в микросекундах (1 секунда = 1 000 000 мкс).set_time_limit($seconds)— сбросить максимальное время выполнения;0означает без ограничений (игнорируется, когда изменитьmax_execution_timeневозможно, например в безопасном режиме).ignore_user_abort(true)— продолжать выполнение, даже если клиент отключился; полезно для завершения фоновой задачи.
<?php
$start = time();
sleep(1); // pause 1 second
usleep(500000); // pause another half second
echo "Paused for about ", time() - $start, "s\n"; // Paused for about 1s
set_time_limit(30); // allow up to 30 seconds for the rest of the script
?>Чтение информации о процессе и среде
Эти функции сообщают сведения об OS-процессе, в котором сейчас работает PHP.
getmypid()— идентификатор процесса выполняющегося скрипта.get_current_user()— владелец файла выполняющегося скрипта.getmyuid()/getmygid()— идентификатор пользователя и группы владельца скрипта (на поддерживающих это системах).
<?php
echo "PID: ", getmypid(), "\n"; // e.g. PID: 4821
echo "User: ", get_current_user(), "\n";
?>Работа с исходным кодом
Несколько функций работают с исходным кодом PHP как с текстом — в основном для страниц документации и просмотрщиков кода.
highlight_file($filename)— выводит исходный код файла с HTML-подсветкой синтаксиса.highlight_string($code)— то же, но для строки с PHP-кодом.php_strip_whitespace($filename)— возвращает исходный код файла с удалёнными комментариями и лишними пробелами.get_browser()— возвращает сведения о браузере посетителя, но только если настроен файл конфигурацииbrowscap.ini; иначе возвращаетfalse.
<?php
$code = "<?php echo 'Hello'; // a comment ?>";
// highlight_string can also return the markup instead of printing it
$html = highlight_string($code, true);
echo $html, "\n"; // a <code>...</code> block with colorized <span> tags
?>Когда использовать эти функции?
| Задача | Функция |
|---|---|
| Ограничить функцию минимальной версией PHP | version_compare() |
| Сгенерировать уникальное временное имя файла | uniqid() |
| Сделать паузу между вызовами API для соблюдения лимита запросов | sleep() / usleep() |
| Дать длительному импорту завершиться без тайм-аута | set_time_limit(), ignore_user_abort() |
| Отладить конфигурацию PHP на сервере | phpinfo(), phpversion(), php_uname() |
Для более глубокого изучения смежных тем см. Функции PHP, Константы PHP, Дата и время в PHP и Строки PHP.