问题:

利用url访问远程的文件、图片、视频时有时需要请求前判断url地址是否有效。

解决办法:

(PHP 5, PHP 7)

get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头。

利用PHP自带的函数get_headers(),利用http返回值是否存在200状态,来判断url地址是否有效。

get_headers()函数官方介绍:http://php.net/manual/zh/function.get-headers.php

具体实现代码如下:

案例一:

$url = "https://www.baidu.com";
$response = get_headers($url);
echo "<pre>";
var_dump($response);
$response = get_headers($url,1);//如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名。
echo '<pre>';
var_dump($response);

打印结果如下:

array(16) {
[0]=>string(15) "HTTP/1.0 200 OK"
[1]=>string(20) "Accept-Ranges: bytes"
[2]=>string(23) "Cache-Control: no-cache"
[3]=>string(21) "Content-Length: 14722"
[4]=>string(23) "Content-Type: text/html"
[5]=>string(35) "Date: Wed, 20 Feb 2019 13:12:31 GMT"
[6]=>string(21) "Etag: "5c653bc8-3982""
[7]=>string(44) "Last-Modified: Thu, 14 Feb 2019 09:58:32 GMT"
[8]=>string(39) "P3p: CP=" OTI DSP COR IVA OUR IND COM ""
[9]=>string(16) "Pragma: no-cache"
[10]=>string(15) "Server: BWS/1.1"
[11]=>string(141) "Set-Cookie: BAIDUID=72E4B8623F9E998C790B22F8E8D64BEC:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
[12]=>string(137) "Set-Cookie: BIDUPSID=72E4B8623F9E998C790B22F8E8D64BEC; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
[13]=>string(111) "Set-Cookie: PSTM=1550668351; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
[14]=>string(21) "Vary: Accept-Encoding"
[15]=>string(33) "X-Ua-Compatible: IE=Edge,chrome=1"
}
array(14) {
[0]=>string(15) "HTTP/1.0 200 OK"
["Accept-Ranges"]=>string(5) "bytes"
["Cache-Control"]=>string(8) "no-cache"
["Content-Length"]=>string(5) "14722"
["Content-Type"]=>string(9) "text/html"
["Date"]=>string(29) "Wed, 20 Feb 2019 13:12:31 GMT"
["Etag"]=>string(15) ""5c653bc8-3982""
["Last-Modified"]=>string(29) "Thu, 14 Feb 2019 09:58:32 GMT"
["P3p"]=>string(34) "CP=" OTI DSP COR IVA OUR IND COM ""
["Pragma"]=>string(8) "no-cache"
["Server"]=>string(7) "BWS/1.1"
["Set-Cookie"]=>array(3) {
[0]=>string(129) "BAIDUID=72E4B8623F9E998CF68FDDAD465EAF4A:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
[1]=>string(125) "BIDUPSID=72E4B8623F9E998CF68FDDAD465EAF4A; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
[2]=>string(99) "PSTM=1550668351; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com"
}
["Vary"]=>string(15) "Accept-Encoding"
["X-Ua-Compatible"]=>string(16) "IE=Edge,chrome=1"
}

案例二:

$url = "https://www.baidu.com";
$response = get_headers($url);
if(preg_match('/200/',$response[0])){
echo "<pre/>";
var_dump($response[0]);
}else{
var_dump("无效url资源!");
}

打印结果如下:

string(15) "HTTP/1.0 200 OK"

注意点:如果提示错误,需要在php.ini开启:allow_url_fopen=on

遇到get_headers()请求https报错解决思路

场景:使用get_headers()去校验该https类型的url是否能正确响应时

结果报错,如下:

get_headers(): SSL operation failed with code 1.
OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

具体原因:
get_headers()会对url发出请求HTTP请求,获取服务器响应头信息,遇到url为https时,会去校验签名证书

解决思路:
关闭证书校验

具体实现代码如下:

$url = "https://www.baidu.com";

//关闭https证书校验
stream_context_set_default( [
'ssl' => [
'verify_host' => false,
'verify_peer' => false,
'verify_peer_name' => false,
],
]); $response = get_headers($url);
if(preg_match('/200/',$response[0])){
echo "<pre/>";
var_dump($response[0]);
}else{
var_dump("无效url资源!");
}

PHP利用get_headers()函数判断远程的url地址是否有效的更多相关文章

  1. 批量替换git目录的远程仓库URL地址脚本

    需求: 1. 输入work-dir 工作目录 2. 扫描工作目录中的子目录 3. 对每一个子目录, 判断是否是git repo 4. 确认是git repo, 获取git origin remote- ...

  2. 如何更改vs2013中git的远程仓库url地址

    可以通过修改Git库配置文件实现,请看下图:

  3. vuejs解析url地址

    函数: // url解析函数 // ?id=111&name=567 => {id:111,name:567} export function urlParse(){ let obj = ...

  4. javascript中常见的函数封装 :判断是否是手机,判断是否是微信,获取url地址?后面的具体参数值,毫秒格式化时间,手机端px、rem尺寸转换等

    // 判断是否是手机function plat_is_mobile(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad ...

  5. PHP判断远程图片或文件是否存在

    PHP判断远程图片是否存在,此方法同样适用于判断远程文件是否存在,这是一种既然有效率且又准确的方法,建议采用此方法,以往使用get_headers()方法判断都是有问题的: function chec ...

  6. [PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)

    引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等 如果需求的操作是依赖于远程文件是否 ...

  7. PHP判断远程文件是否存在

    <?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...

  8. php如何判断远程文件是否存在

    <?php /*   函数:remote_file_exists   功能:判断远程文件是否存在   参数: $url_file -远程文件URL   返回:存在返回true,不存在或者其他原因 ...

  9. PHP判断远程文件是否存在的几种方法

    在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器). 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 ...

随机推荐

  1. JAVA自学笔记26

    JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...

  2. VBA 判断一个TXT编码方式,再创建一个新的文件,复制数据进去

    如题,先读取一个文本文件判断编码(Unicode  ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test ...

  3. 关于 IIS7.0下文件写入无权限的解决办法

    1. 在IIS Web站点上右键 --> 编辑权限 2. 在弹出的窗体上选择[安全]选项卡,如图: 3. 在安全选项卡中点击[编辑]按钮,弹出如图对话框: 4. 点击[添加]按钮,弹出如图对话框 ...

  4. Jetpack 架构组件 LiveData ViewModel MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. linux:gpg加密和解密

    http://www.bubuko.com/infodetail-650747.html

  6. MySQL关于根据日期查询数据的sql语句

    查询在某段日期之间的数据: select * from 数据表  where 时间字段名 BETWEEN '2016-02-01' AND '2016-02-05' 查询往前3个月的数据: selec ...

  7. echarts中tooltip提示框位置控制

    关键代码: position: function(point, params, dom, rect, size) { //其中point为当前鼠标的位置,size中有两个属性:viewSize和con ...

  8. shell编程学习笔记(四):Shell中转义字符的输出

    通过echo可以输出字符串,下面看一下怎么输出特殊转义字符,首先我先列出来echo的转义字符: \\ 输入\ \a 输出警告音 \b 退格,即向左删除一个字符 \c 取消输出行末的换行符,和-n选项一 ...

  9. Docker查看运行中容器并进入容器

    一.简述 Docker查看运行中容器并进入容器. 二.方法 $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash 将黄色文字替换 ...

  10. Java代码质量监控工具Sonar安装

    1.  代码质量七宗罪 Sonar是一个代码质量管理系统.它的帮助文档开篇明义,提出了代码质量的七宗罪.总结的比較到位.最好还是一看: 1.        Bug和隐藏Bug(Bugs and Pot ...