首页 > 编程语言 >PHP判断远程文件是否存在的四种方法

PHP判断远程文件是否存在的四种方法

时间:2022-08-22 20:44:06浏览次数:90  
标签:文件 get contents file PHP 远程 四种

PHP file_exists()函数用于检查服务器上是否存在一个文件或目录。但是,如果要检查远程服务器上的文件是否存在,file_exists()函数将不可用。

本文将介绍php中如何判断远程文件是否存在的几种方法。文章将演示并描述检查远程文件是否存在的各种方法。

  1. PHP curl() 方法
  2. PHP fopen() 方法
  3. PHP get_headers() 方法
  4. PHP file_get_contents() 方法

 

使用 PHP curl() 判断远程文件是否存在

CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。

PHP建立CURL请求的基本步骤

  1. 初始化:curl_init()
  2. 设置属性:curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。
  3. 执行并获取结果:curl_exec()
  4. 释放句柄:curl_close()

您可以使用cURL来检查远程服务器上文件是否存在。下面的代码片段展示了如何在PHP中使用cURL检查远程文件是否存在。

<?php
function checkRemoteFile($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(curl_exec($ch)!==FALSE)
    {
        return true;
    }
    else
    {
        return false;
    }
}

$url = 'http://www.manongzj.com/favicon.ico';

$check = checkRemoteFile($url);

if(true == $check){
	echo "ok";
}else{
	echo "not ok";
}
?>

 

使用 PHP fopen() 判断远程文件是否存在

fopen() 函数用于打开一个文件或 URL 地址。如果打开失败,本函数返回 FALSE 。

语法:

resource fopen( string filename, string mode )

参数 filename 为尝试打开/创建的文件名,参数 mode 指定了打开模式,其可能的值如下:

打开模式说明
r 只读,并将文件指针指向文件开始位置
r+ 读写,将文件指针指向文件开始位置
w 只写,将文件指针指向文件开始位置并将文件内容清空,如果文件不存在则尝试创建之
w+ 读写,将文件指针指向文件开始位置并将文件内容清空,如果文件不存在则尝试创建之
a 追加,将文件指针指向文件末尾来操作,如果文件不存在则尝试创建之
a+ 读写追加,将文件指针指向文件末尾来操作,如果文件不存在则尝试创建之
x 只写,并创建文件,如果文件已存在,则 fopen() 调用失败并返回 FALSE
x+ 读写,并创建文件,如果文件已存在,则 fopen() 调用失败并返回 FALSE

下面的代码片段展示了如何使用PHP中的fopen()函数检查远程文件是否存在。

<?php
// Remote file url
$remoteFile = 'http://www.manongzj.com/favicon.ico';

// Open file
$handle = @fopen($remoteFile, 'r');

// Check if file exists
if(!$handle){
    echo 'File not found';
}else{
    echo 'File exists';
}
?>

 

使用PHP get_headers()判断远程文件是否存在

get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在)。

函数定义

array get_headers ( string $url [, int $format = 0 ] )

参数

format 如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名,如果设置默认为0

下面的代码片段展示了如何使用PHP中的get_headers()函数检查远程文件是否存在。

<?php
function remote_file_exists($url){
   return(bool)preg_match('~HTTP/1\.\d\s+200\s+OK~', @current(get_headers($url)));
}  
$ff = "http://www.manongzj.com/favicon.ico";
    if(remote_file_exists($ff)){
        echo "file exist!";
    }
    else{
        echo "file not exist!!!";
    }
?>

 

使用PHP file_get_contents()判断远程文件是否存在

file_get_contents() 函数把整个文件读入一个字符串中。

和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。

file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。

语法

file_get_contents(path,include_path,context,start,max_length)

参数

参数描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。

下面的代码片段展示了如何使用PHP中的file_get_contents()函数检查远程文件是否存在。 

<?php
$url = 'http://www.manongzj.com';
$code = FALSE;

$options['http'] = array(
    'method' => "HEAD",
    'ignore_errors' => 1
);

$body = file_get_contents($url, NULL, stream_context_create($options));

foreach($http_response_header as $header)
    sscanf($header, 'HTTP/%*d.%*d %d', $code);

echo "Status code: $code";
?>

如果你不想遵循重定向,你可以这样做:

<?php
$url = 'http://www.manongzj.com';
$code = FALSE;

$options['http'] = array(
    'method' => "HEAD",
    'ignore_errors' => 1,
    'max_redirects' => 0
);

$body = file_get_contents($url, NULL, stream_context_create($options));

sscanf($http_response_header[0], 'HTTP/%*d.%*d %d', $code);

echo "Status code: $code";
?>

以上就是本文的全部内容,希望对大家的学习有所帮助。更多教程请访问码农之家

标签:文件,get,contents,file,PHP,远程,四种
From: https://www.cnblogs.com/myhomepages/p/16614185.html

相关文章

  • Docke 搭建 apache2 + php8 + MySQL8 环境
    Docker安装执行Docker安装命令curl-fsSLhttps://get.docker.com/|sh启动Docker服务sudoservicedockerstart查看Docker是否正常工作sudo......
  • bash的四种模式
    记录下今天在工作遇到的问题。大致的问题是我以某种方式通过ssh登陆到服务器上执行一些指令,导致指令运行结果不符合预期。导致问题的根本原因是bash的四种模式,bash在不同......
  • Win7远程桌面发生身份验证错误要求的函数不受支持 (2019-06-15 11:48:50)
    今天登陆服务器突然登不上了,给我报了一个错误“发生验证错误要求的函数不受支持”,用同事的win7电脑和win10电脑都可以,就是我的不行,气死我了,然后我百度百度啊,用了好几种“......
  • JS判断是手机访问还是电脑访问,并自动跳转 可在PHP中使用 (2014-12-02 14:41:26)
    方法一、在head内调用以下代码《uaredirect.js》该文件下载地址:http://siteapp.baidu.com/static/webappservice/uaredirect.js百度网盘下载地址:http://pan.baidu.com/......
  • Php语法知识点小结
    参考https://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html#tree19isset()、empty()与is_null的区别1、当变量未定义时,is_null()和“参数本身”是不允许作为参数判......
  • 远程控制 todesk
    最近发现的一个好用的远程连接软件便是近些年推出来的todesk虽然qq的远程和向日葵的远程连接也都可以达到我要实现的效果但是体验起来的话我个人还是觉得todesk更......
  • PHP认证 MP4文件 播放
    1、问题直接放在WEB目录下,文件不安全,没有认证可以直接访问;PHP认证通过后返回WEB目录下的真实文件地址,不安全,访问一次后后续可以直接访问;用PHP读MP4文件然后再输出:加载......
  • navicat远程连接mysql报1130错误解决方法
    引用自:https://blog.csdn.net/zqian1994/article/details/124382726  问题数据库安装好了,但是不允许从远程登陆。用Navicat连接数据库时只能通过localhost,使用IP连接......
  • 14.PHP伪协议利用
    一.伪协议介绍PHP支持以下几种协议:file://-访问本地文件系统http://-访问HTTP(s)网址ftp://-访问各个输入/输出流(I/Ostreams)zlib://-压缩流data://-数......
  • MySQL数据库的四种隔离级别
    一、首先介绍几个概念:1,脏读:又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改并提交,这就导致了......