首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 偵測伺服器環境:Apache vs Nginx vs IIS 完整判斷邏輯

     編輯:PHP 相關知識

核心判斷依據:$_SERVER 關鍵變數

伺服器特徵變數典型值
ApacheSERVER_SOFTWAREApache/2.4.41 (Ubuntu)
NginxSERVER_SOFTWAREnginx/1.18.0
IIS (FastCGI)SERVER_SOFTWAREMicrosoft-IIS/10.0
IIS (ISAPI/舊版)HTTP_X_REWRITE_URL存在即為 IIS
IIS 5.0 CGIORIG_PATH_INFO存在即為 IIS 5.0 CGI 模式

通用偵測函式

/**
 * 偵測 Web 伺服器類型
 * @return string 'apache' | 'nginx' | 'iis' | 'builtin' | 'unknown'
 */
function detectServer(): string {
    $software = $_SERVER['SERVER_SOFTWARE'] ?? '';

    if (stripos($software, 'apache') !== false) return 'apache';
    if (stripos($software, 'nginx') !== false) return 'nginx';
    if (stripos($software, 'iis') !== false || stripos($software, 'microsoft-iis') !== false) return 'iis';

    // 缺少 SERVER_SOFTWARE 時的備用判斷
    if (isset($_SERVER['HTTP_X_REWRITE_URL'])) return 'iis';           // IIS URL Rewrite 模組
    if (isset($_SERVER['ORIG_PATH_INFO'])) return 'iis';               // IIS 5.0 CGI
    if (isset($_SERVER['IIS_WasUrlRewritten'])) return 'iis';          // IIS 7+ URL Rewrite
    if (php_sapi_name() === 'cli-server') return 'builtin';            // PHP 內建開發伺服器

    return 'unknown';
}

實際應用場景

  • URL 重寫規則產生:Apache 用 .htaccess,Nginx 用 location 指令,IIS 用 web.config。
  • 路徑分隔符處理:Windows/IIS 可能需注意反斜線,但 PHP 內部統一支援正斜線。
  • 權限與檔案系統:IIS 常以 IUSR、ApplicationPoolIdentity 執行,需對應設定資料夾權限。
  • 標頭大小寫差異:Apache/Nginx 將 HTTP 標頭轉為 HTTP_* 大寫,IIS 行為一致,但自訂標頭前綴可能不同。

進階:偵測 PHP 執行模式(SAPI)

echo php_sapi_name();
// 可能值:apache2handler, fpm-fcgi, cgi-fcgi, cli, cli-server, embed, litespeed
SAPI典型環境
apache2handlerApache mod_php
fpm-fcgiNginx/Apache + PHP-FPM(現代主流)
cgi-fcgi舊版 CGI/FastCGI(IIS 常見)
cli命令列腳本
cli-serverPHP 內建開發伺服器 (php -S)
litespeedOpenLiteSpeed/LiteSpeed

結語

透過 $_SERVER['SERVER_SOFTWARE'] 為主、HTTP_X_REWRITE_URL/ORIG_PATH_INFO 為輔,配合 php_sapi_name() 判斷執行模式,即可可靠識別 Apache、Nginx、IIS 等主流環境。現代專案多採用 Nginx + PHP-FPM,但維護舊系統時仍需處理 IIS 特有行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved