如何用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
相关产品推荐
相关产品推荐

