PHP简单检测网址是否能够正常打开的方法

PHP可以通过使用cURL(Client URL Library)以及fsockopen函数来检测网址是否能够正常打开。

使用cURL检测网址的可达性

cURL是一个强大的工具,它支持各种协议,包括 HTTP, HTTPS, FTP 等,并且可以进行很多高级操作,如 SSL 连接、POST 请求等。

我们可以使用curl_exec()函数来检测网址是否能够正常打开。调用此函数时,如果返回false,则表示该网址无法正常打开。示例如下:

$url = "http://www.example.com";
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 200) {
    echo "网址正常";
} else {
    echo "网址不可达";
}
curl_close($handle);

上述代码中,首先使用curl_init()函数初始化一个curl句柄,然后使用curl_setopt()函数设置curl选项,这里我们使用CURLOPT_RETURNTRANSFER选项将获得的响应转化为字符串并返回。

然后调用curl_exec()函数获取网页内容。

最后使用curl_getinfo()函数获取HTTP响应码,根据HTTP响应码判断网址的可达性。

使用fsockopen函数检测网址的可达性

与cURL相比,fsockopen函数使用更为简单。我们可以使用fsockopen函数手动建立一个TCP连接,并向服务器发送HTTP/1.1请求头,获取HTTP响应头信息,从而检测目标网站是否可达。

简单示例如下:

function checkUrl($sUrl) {
  $iPos = strpos($sUrl, ':');
  $sProtocol = substr($sUrl, 0, $iPos); //获取协议类型
  $sHost = substr($sUrl, $iPos + 3); //获取主机名(域名)
  $iPort = ($sProtocol == 'https') ? 443 : 80; //设置端口号

  //与服务器建立连接
  $fp = @fsockopen($sHost, $iPort, $iErrno, $sErrstr, 20);
  if(!$fp) {
    return false;
  }

  //发送HTTP请求头
  $sHeader = "HEAD / HTTP/1.1\r\n";
  $sHeader .= "Host: " . $sHost . "\r\n";
  $sHeader .= "Connection: Close\r\n\r\n";
  fwrite($fp, $sHeader);

  //接收HTTP响应头信息
  $sContent = '';
  while (!feof($fp)) {
    $sContent .= fgets($fp, 128);
  }
  fclose($fp);

  //提取HTTP响应状态码
  $aLines = explode("\n", $sContent);
  if(preg_match('/^HTTP\/1\.[01] (\d+)/', $aLines[0], $aMatches)) {
    $iStatusCode = intval($aMatches[1]);
    if($iStatusCode == 200) {
      return true;
    }
  }
  return false;
}

//检测网址是否可达
$sUrl = "http://www.example.com";
if(checkUrl($sUrl)) {
  echo "网址正常";
} else {
  echo "网址不可达";
}

上述代码中,首先我们根据目标网址的协议类型,确定需要连接的端口号。然后使用fsockopen函数与服务器建立连接。

接着,我们构建HTTP/1.1请求头,并使用fwrite函数将请求头信息发送到服务器。

最后,我们使用fgets函数循环读取HTTP响应头信息,并从中提取HTTP响应状态码。根据HTTP响应状态码,我们判断目标网址是否可达。

综上,我们可以使用cURL和fsockopen函数检测网址的可达性,使用方法灵活简单,同时也可以根据需求进行定制和扩展,是检测网址的理想工具。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP简单检测网址是否能够正常打开的方法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 网站生成静态页面,及网站数据采集的攻、防原理和策略

    网站生成静态页面的攻、防原理与策略 原理 网站生成静态页面是指将动态数据生成静态HTML文件,以提高网站性能和访问速度。攻击者可以通过修改静态页面来实施攻击,从而导致不良后果。静态页面的生成原理是通过模板引擎和数据库等生成,并通过缓存等机制进行优化。 防御策略 对于敏感数据需要进行服务器端渲染,如账号密码等。 禁止通过get方式将动态页面转换为静态页面,只允…

    PHP 2023年5月27日
    00
  • php中截取中文字符串的代码小结

    我们来详细讲解一下如何在 PHP 中截取中文字符串。 原理分析 中文字符编码一般使用 UTF-8 编码,而 UTF-8 中每个中文字符占 3 个字节,英文字符占 1 个字节。所以,要截取中文字符串,必须对每个字节进行判断。 具体实现时,需要先将字符串转换为 UTF-8 编码,然后用 substr 函数进行截取。但因为 substr 函数以字节为单位进行截取,…

    PHP 2023年5月26日
    00
  • 详解PHP设计模式之桥接模式

    PHP设计模式之桥接模式BridgePattern详解 桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。PHP中,桥接模式通常用于将一个类的实现与另一个类的实现分离,以便它们可以独立地变化。 桥接模式的实现 桥接模式通常由两个主要组成部分组成:抽象类和实现类。抽象类定义了抽象部分的接口,实现类定义了实现部分的接口。抽象类中包含…

    PHP 2023年5月12日
    00
  • PHP单元测试框架PHPUnit用法详解

    PHP单元测试框架PHPUnit用法详解 PHPUnit是PHP中最流行的单元测试框架之一,它提供了一种简单而高效的方式来测试代码的正确性。在本文中,我们将介绍PHPUnit的使用方法,包括安装、编写和运行测试用例,并提供两个示例来帮助读者更好地理解。 安装PHPUnit PHPUnit可以通过Composer来安装,使用以下命令: composer req…

    PHP 2023年5月23日
    00
  • Yii框架调试心得–在页面输出执行sql语句

    Yii框架是一个快速高效的PHP开发框架,它的调试功能非常强大,其中一项非常实用的功能就是在页面输出执行的SQL语句,下面是详细的攻略: 步骤一:修改配置文件 在 config/main.php 文件中找到 components 的配置项,将其中的 db 配置项中的 ‘enableParamLogging’ 和 ‘enableProfiling’ 都设置为 …

    PHP 2023年5月26日
    00
  • PHP实现远程下载文件到本地

    下面是PHP实现远程下载文件到本地的完整攻略: 一、准备工作 在开始编写代码之前,我们需要安装PHP和相关扩展。本示例中我们需要用到的是curl扩展,可以使用以下命令进行安装: sudo apt-get install php-curl 二、实现远程下载文件到本地 实现远程下载文件到本地可以分为以下几个步骤: 1. 初始化curl 使用curl库实现远程下载…

    PHP 2023年5月23日
    00
  • PHP数组实际占用内存大小原理解析

    让我来为你详细讲解一下PHP数组实际占用内存大小的原理解析。 1. 什么是PHP数组 PHP数组是一种复合结构类型,可以存储多个数据类型的值,并可以通过索引或关联键来访问这些值。PHP数组在开发中使用非常广泛,是PHP编程的重要组成部分。 2. PHP数组实际占用内存大小的原理 PHP数组底层是通过哈希表实现的,其中每个元素都包含一个键和一个值,键用于唯一标…

    PHP 2023年5月26日
    00
  • Redis分布式锁的正确实现方法总结

    Redis分布式锁的正确实现方法总结 背景 随着高并发应用的逐渐普及,分布式锁也成为了越来越多的关注点。Redis作为一个高效的缓存工具,其提供的分布式锁凭借着其性能和易用性,被越来越多的项目所采用。然而Redis的分布式锁并非完全可靠,采用不正确的方式很容易引发死锁等问题。因此,本文旨在总结Redis分布式锁的正确实现方法,以帮助开发者更好地使用Redis…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部