PHP利用get_headers()函数判断远程的url地址是否有效
问题:
利用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地址是否有效的更多相关文章
- 批量替换git目录的远程仓库URL地址脚本
需求: 1. 输入work-dir 工作目录 2. 扫描工作目录中的子目录 3. 对每一个子目录, 判断是否是git repo 4. 确认是git repo, 获取git origin remote- ...
- 如何更改vs2013中git的远程仓库url地址
可以通过修改Git库配置文件实现,请看下图:
- vuejs解析url地址
函数: // url解析函数 // ?id=111&name=567 => {id:111,name:567} export function urlParse(){ let obj = ...
- javascript中常见的函数封装 :判断是否是手机,判断是否是微信,获取url地址?后面的具体参数值,毫秒格式化时间,手机端px、rem尺寸转换等
// 判断是否是手机function plat_is_mobile(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad ...
- PHP判断远程图片或文件是否存在
PHP判断远程图片是否存在,此方法同样适用于判断远程文件是否存在,这是一种既然有效率且又准确的方法,建议采用此方法,以往使用get_headers()方法判断都是有问题的: function chec ...
- [PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)
引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等 如果需求的操作是依赖于远程文件是否 ...
- PHP判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...
- php如何判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因 ...
- PHP判断远程文件是否存在的几种方法
在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器). 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 ...
随机推荐
- JAVA自学笔记26
JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...
- VBA 判断一个TXT编码方式,再创建一个新的文件,复制数据进去
如题,先读取一个文本文件判断编码(Unicode ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test ...
- 关于 IIS7.0下文件写入无权限的解决办法
1. 在IIS Web站点上右键 --> 编辑权限 2. 在弹出的窗体上选择[安全]选项卡,如图: 3. 在安全选项卡中点击[编辑]按钮,弹出如图对话框: 4. 点击[添加]按钮,弹出如图对话框 ...
- Jetpack 架构组件 LiveData ViewModel MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- linux:gpg加密和解密
http://www.bubuko.com/infodetail-650747.html
- MySQL关于根据日期查询数据的sql语句
查询在某段日期之间的数据: select * from 数据表 where 时间字段名 BETWEEN '2016-02-01' AND '2016-02-05' 查询往前3个月的数据: selec ...
- echarts中tooltip提示框位置控制
关键代码: position: function(point, params, dom, rect, size) { //其中point为当前鼠标的位置,size中有两个属性:viewSize和con ...
- shell编程学习笔记(四):Shell中转义字符的输出
通过echo可以输出字符串,下面看一下怎么输出特殊转义字符,首先我先列出来echo的转义字符: \\ 输入\ \a 输出警告音 \b 退格,即向左删除一个字符 \c 取消输出行末的换行符,和-n选项一 ...
- Docker查看运行中容器并进入容器
一.简述 Docker查看运行中容器并进入容器. 二.方法 $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash 将黄色文字替换 ...
- Java代码质量监控工具Sonar安装
1. 代码质量七宗罪 Sonar是一个代码质量管理系统.它的帮助文档开篇明义,提出了代码质量的七宗罪.总结的比較到位.最好还是一看: 1. Bug和隐藏Bug(Bugs and Pot ...