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 ...
随机推荐
- JSP(8)—EL案例和JSTL案例
1.EL案例 el.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Servlet(7)—ServletConfig接口和SevletContext接口
ServletConfig接口 1. 可以获取当前Servlet在web.xml中的配置信息(用的不多) 2. 在不使用"硬编码"的情况下,将部署状态信息传递给Servlet.这个 ...
- HTML5 学习07——Video(视频)Audio(音频)
<video> 元素:提供了 播放.暂停和音量控件来控制视频. width 和 height 属性:控制视频的尺寸 <video> 与</video> 标签之间插入 ...
- Exception in thread "main" java.lang.StackOverflowError at java.util.ArrayList$SubList.rangeCheckForAdd(Unknown Source)
Exception in thread "main" java.lang.StackOverflowError at java.util.ArrayList$SubList.ran ...
- 13、spark-submit
- Ubuntu安装WDCP遇到的无法便于错误解决方法
WDCP v3.2安装 WDCP支持CentOS系统下安装,包括了32bit或者64bit,最新版本建议在6.x以上版本使用,源码安装命令为: wget http://dl.wdlinux.cn/la ...
- 每天一个linux命令:free
1.命令简介 free (free) 命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer. 2.用法 free [-b | -k | -m | -g | -h ...
- Python并行实例
任务 def single(): # 单进程单线程实现 s = 0 for i in range(1, N): s += math.sqrt(i) return s 结论 Python多线程无法利用多 ...
- wamp 在本地安装PHP环境, 开启 curl 扩展
分别打开以下 2 个文件: wamp\bin\php\(your php version)\php.ini wamp\bin\Apache\(your apache version)\bin\php. ...
- MySql基本查询、连接查询、子查询、正则表达查询解说
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...