W3docs

Разные функции 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
?>

Когда использовать эти функции?

ЗадачаФункция
Ограничить функцию минимальной версией PHPversion_compare()
Сгенерировать уникальное временное имя файлаuniqid()
Сделать паузу между вызовами API для соблюдения лимита запросовsleep() / usleep()
Дать длительному импорту завершиться без тайм-аутаset_time_limit(), ignore_user_abort()
Отладить конфигурацию PHP на сервереphpinfo(), phpversion(), php_uname()

Для более глубокого изучения смежных тем см. Функции PHP, Константы PHP, Дата и время в PHP и Строки PHP.

Практика

Практика
Что из перечисленного можно найти по указанному URL, связанному с разными функциями PHP?
Что из перечисленного можно найти по указанному URL, связанному с разными функциями PHP?
Was this page helpful?