You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP检测本地服务器(Xampp/Laragon/localhost)是否运行?

PHP检测本地服务器(XAMPP/Localhost)是否运行的正确方法

你之前用的两种方法之所以无效,问题出在这:

  • gethostbyname是用来解析域名到IP的工具,不能带/info.php这类路径,而且它只能判断域名能不能解析,没法检测服务器服务是否真的在运行。
  • get_headers没加http://前缀,直接写127.0.0.1/info.php会被PHP当成本地文件路径处理,根本没发HTTP请求去检测服务器。

下面给你几个可行的解决方法:

方案1:修正get_headers的用法

给URL加上完整的HTTP协议前缀,同时设置超时避免等待太久:

$url = 'http://127.0.0.1/info.php';
// 设置超时时间为2秒
ini_set('default_socket_timeout', 2);
$headers = @get_headers($url);

if ($headers && strpos($headers[0], '200 OK') !== false) {
    echo '服务器已运行';
} else {
    echo '请先启动XAMPP服务器';
}

方案2:用cURL检测(更可靠)

cURL能更灵活控制请求细节,比如超时、跳转处理,稳定性更好:

$url = 'http://127.0.0.1/info.php';
$ch = curl_init($url);

// 只请求响应头部,不下载内容,节省资源
curl_setopt($ch, CURLOPT_NOBODY, true);
// 设置2秒超时
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
// 自动跟随跳转
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode == 200) {
    echo '服务器已运行';
} else {
    echo '请先启动XAMPP服务器';
}

方案3:直接检测端口连接

如果不需要验证特定文件,只想确认Web服务(默认80端口)是否启动,可以用Socket连接检测:

$host = '127.0.0.1';
$port = 80;
$timeout = 2;

$socket = @fsockopen($host, $port, $errno, $errstr, $timeout);

if ($socket) {
    echo '服务器已运行';
    fclose($socket);
} else {
    echo '请先启动XAMPP服务器';
}

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:05:52