问题:

利用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. 用node搭建本地服务环境

    const express = require('express'); const path = require('path'); const request = require('request') ...

  2. java内部类(二)

    静态内部类 定义: static修饰的内部类就是静态内部类. 特点: 1.静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员 的方式访问. 2.如果外部类的静态成员与内部类成 ...

  3. win10下搭建storm环境

    原文:https://blog.csdn.net/lu_wei_wei/article/details/80843365 1.下载storm; http://mirror.bit.edu.cn/apa ...

  4. 06、action操作开发实战

    1.reduce: 2.collect: 3.count: 4.take: 5.saveAsTextFile: 6.countByKey: 7.foreach: package sparkcore.j ...

  5. Android 使用easeui 3.0 集成环信即时通讯 我踩过的坑

    0.关于注冊账号就不用说了. 1.创建应用.获取appkey 0.创建应用 1.填写信息 2.获取appkey 2.集成 0.首先新建一个project 1.这里主要介绍使用easeui来集成环信的即 ...

  6. angular 2 - 003 typescript

    http://www.typescriptlang.org/docs/index.html var book: string = "hellp angular 2"; var nu ...

  7. OpenCV自带dnn的Example研究(3)— object_detection

    这个博客系列,简单来说,今天我们就是要研究 https://docs.opencv.org/master/examples.html下的 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. ...

  8. 关于python单例的常用几种实现方法

    这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到, 所以这里把之前用过的不同方式实现的单例方式整理一下 装饰器的方式 这种方式也是工作中经常用的一种 ...

  9. jquery裁剪图片插件cropit示例

    重装农药第16天!! jquery裁剪图片插件cropit示例 背景:做的手机网页项目,用html file控件上传图片,有些手机拍照后图片会很大,20M以上的,用之前的H5 formdata上传的话 ...

  10. vue环境下安装npm,启动npm 修改js,css样式

    vue环境下修改js,css样式 1.在所在的项目项目的resource 文件夹下面,shift + 鼠标右键--在此处打开命令行窗口: 2.在打开的窗口执行: 安装npm:npm install 启 ...