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_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 8.0.0 для SAPI fpm-fcgi функция php_sapi_name() стала всегда возвращать значение в нижнем регистре. В более ранних версиях возвращаемый регистр мог отличаться.
Раньше для некоторых SAPI возвращались строки вроде 'cgi-fcgi' или 'fpm-fcgi', а теперь в основном используется нижний регистр для стандартизации.
<?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
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('Запуск приложения');
?><?php
if (php_sapi_name() !== 'cli') {
header('HTTP/1.1 403 Forbidden');
exit('Этот скрипт предназначен только для запуска из командной строки.');
}
// Код CLI-скрипта
?><?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
В 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 отсутствует. Есть функции для получения информации о версии сервера или подключении.