Php sapi name: примеры (PHP)

Определение среды выполнения PHP через php_sapi_name
Раздел: Информация о PHP
php_sapi_name: string|false

Функция php_sapi_name() определяет тип интерфейса (Server API - SAPI), который использует PHP в текущий момент. Она не принимает параметров и возвращает строку с именем интерфейса.

Назначение функции

Эта функция применяется для определения окружения, в котором выполняется скрипт. Это важно для корректной работы приложения в разных средах, например, при запуске из командной строки (CLI) или через веб-сервер.

Возвращаемые значения

Функция может вернуть различные значения, в зависимости от способа запуска PHP:

  • apache2handler - PHP работает как модуль Apache.
  • cgi-fcgi - используется FastCGI.
  • cli - скрипт запущен из командной строки.
  • fpm-fcgi - PHP-FPM.
  • litespeed - сервер LiteSpeed.
  • embed - PHP встроен в другое приложение.
Базовые примеры использования

Определение среды выполнения скрипта.

<?php
$sapi = php_sapi_name();
echo "Текущий SAPI: " . $sapi;
?>
Текущий SAPI: apache2handler

Проверка, запущен ли скрипт из командной строки.

<?php
if (php_sapi_name() === 'cli') {
    echo "Запуск из командной строки.\n";
} else {
    echo "Запуск через веб-сервер.\n";
}
?>
Запуск через веб-сервер.
Похожие функции в PHP

Константа PHP_SAPI содержит то же значение, что и результат функции php_sapi_name(). Это псевдоним, часто используется для микрооптимизации.

<?php
echo PHP_SAPI;
?>
apache2handler

Функция defined('STDIN') или проверка глобальной переменной $argv иногда применяются для детектирования CLI-режима, но они менее надежны, чем php_sapi_name(), так как могут быть определены в других контекстах.

Типичные ошибки

Сравнение значения функции без приведения к нижнему регистру. Некоторые SAPI могут возвращать строки в разном регистре.

<?php
// Ошибка: значение может быть 'CLI', 'cli' и т.д.
if (php_sapi_name() == 'CLI') { 
    // Код может не выполниться
}
?>
Условие не сработает, если функция вернет 'cli'.

Неправильное предположение о доступности суперглобальных массивов. В CLI-режиме, например, $_SERVER['HTTP_USER_AGENT'] не определен.

<?php
if (php_sapi_name() !== 'cli') {
    $agent = $_SERVER['HTTP_USER_AGENT'];
} else {
    $agent = 'CLI';
}
?>
Изменения в последних версиях PHP

В PHP 8.0.0 для SAPI fpm-fcgi функция php_sapi_name() стала всегда возвращать значение в нижнем регистре. В более ранних версиях возвращаемый регистр мог отличаться.

Раньше для некоторых SAPI возвращались строки вроде 'cgi-fcgi' или 'fpm-fcgi', а теперь в основном используется нижний регистр для стандартизации.

Расширенные примеры
Выбор конфигурации в зависимости от окружения
Пример php
<?php
switch (php_sapi_name()) {
    case 'cli':
        $config = require 'config-cli.php';
        break;
    case 'fpm-fcgi':
    case 'cgi-fcgi':
        $config = require 'config-web.php';
        break;
    default:
        $config = require 'config-default.php';
}
?>
Логирование с меткой среды
Пример php
<?php
function logger(string $message): void {
    $sapi = php_sapi_name();
    $logEntry = '[' . date('Y-m-d H:i:s') . '] [' . $sapi . '] ' . $message . PHP_EOL;
    file_put_contents('app.log', $logEntry, FILE_APPEND);
}
logger('Запуск приложения');
?>
Ограничение выполнения только для CLI
Пример php
<?php
if (php_sapi_name() !== 'cli') {
    header('HTTP/1.1 403 Forbidden');
    exit('Этот скрипт предназначен только для запуска из командной строки.');
}
// Код CLI-скрипта
?>
Определение FPM режима
Пример php
<?php
// Проверка, работает ли PHP через PHP-FPM
$isFpm = (php_sapi_name() === 'fpm-fcgi');
var_dump($isFpm);
?>
bool(true)
Аналоги в других языках

Php sapi name в Python

Прямого аналога нет. Среда выполнения часто определяется через переменные окружения или импорт модулей.

import sys
print(sys.platform)  # Например, 'win32' или 'linux'
linux
JavaScript (Node.js)

В Node.js можно использовать глобальный объект process.

console.log(process.platform); // 'darwin', 'win32', 'linux'
console.log(process.env.NODE_ENV); // 'development', 'production'
linux
development

Php sapi name в MySQL

Концепция SAPI отсутствует. Есть функции для получения информации о версии сервера или подключении.

PHP php_sapi_name function comments

En
Php sapi name Returns the type of interface between web server and PHP