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

PHP 7.4中get_headers失效?URL有效性验证异常排查

URL验证代码问题分析与修正

cURL代码问题及修复

你的cURL代码存在两个核心问题:

  • 输出逻辑错误:无论HTTP状态码是否为404,代码最后都会执行echo "true",导致即使检测到404,也会同时输出"Url not working"和"true",看起来始终返回true;
  • 错误场景覆盖不全:只判断了404状态,未处理网络连接失败、域名解析错误、5xx服务器错误等情况,也没检查curl_exec是否执行成功。

修正后的代码:

<?php
$url = 'https://github.com';

$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
// 只请求头部,减少带宽消耗
curl_setopt($handle, CURLOPT_NOBODY, TRUE);
// 设置超时时间,避免长时间等待
curl_setopt($handle, CURLOPT_TIMEOUT, 10);

$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
$curlError = curl_errno($handle);

curl_close($handle);

if ($curlError !== 0) {
    echo "URL无法连接:" . curl_strerror($curlError);
} else if ($httpCode >= 200 && $httpCode < 300) {
    echo "URL存在";
} else {
    echo "URL无效或无法访问,状态码:" . $httpCode;
}
?>

说明:

  • 加入CURLOPT_NOBODY只获取响应头部,提升效率;
  • 增加超时设置,避免阻塞;
  • 检查curl错误码,处理连接失败场景;
  • 判断2xx状态码为有效URL,覆盖所有成功场景。

get_headers代码问题及修复

你的get_headers代码问题在于:

  • 错误抑制导致排查困难:用@抑制了get_headers的错误,若php.ini中allow_url_fopen未开启,函数会直接返回false,但你看不到错误信息;
  • strpos判断逻辑不严谨:strpos找到匹配时会返回索引位置(数字),若索引为0会被if判定为false,虽然正常HTTP状态行中200不会在索引0,但严谨性不足,应该用!== false判断是否存在。

修正后的代码:

<?php
$url = "https://www.geeksforgeeks.org";

// 先检查allow_url_fopen是否开启
if (!ini_get('allow_url_fopen')) {
    echo "allow_url_fopen未开启,无法使用get_headers";
    exit;
}

$headers = get_headers($url);

if ($headers !== false && strpos($headers[0], '200') !== false) {
    $status = "URL Exist";
} else {
    $status = "URL Doesn't Exist";
}

echo($status);
?>

说明:

  • 移除错误抑制符@,便于排查问题;
  • 先检查allow_url_fopen配置,该配置是get_headers正常工作的前提;
  • 用!== false严格判断strpos的结果,避免索引0被误判为false。

总结

PHP 7.4中的cURL和get_headers工具均未失效,你的问题是代码逻辑漏洞导致的。优先推荐使用cURL方案,因为它不受allow_url_fopen配置限制,且对网络请求的控制更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:40:30