PHP判斷遠程文件是否存在的四種方法

来源:https://www.cnblogs.com/myhomepages/archive/2022/08/22/16614185.html
-Advertisement-
Play Games

一、前言 在上一篇隨筆中,我向大家介紹瞭如何製作自己的 nuget 包,並沒有向大家介紹如何發佈製作好的包,今天就繼續向大家介紹如何搭建一個簡易的 nuget 私有倉庫,並上傳自己的包以供內部使用。 老規矩,今天介紹的還是在Windows系統下進行的操作,Linux系統下也可以使用 nexus 來搭 ...


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";
?>

以上就是本文的全部內容,希望對大家的學習有所幫助。更多教程請訪問碼農之家

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 筆記記錄 B站狂神說Java的ElasticSearch課程:https://www.bilibili.com/video/BV17a4y1x7zq 一、ElasticSearch概述 官網:https://www.elastic.co/cn/downloads/elasticsearch Elat ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 我們在做採集數據的時候,過快或者訪問頻繁,或者一訪問就給彈出驗證碼,然後就蚌珠了~ 那麼今天!博主就給大家來一個簡單處理驗證碼的方法 環境模塊 Python和pycharm如果還有小伙伴沒安裝的話,可以在文章最下方掃碼獲取安裝包。 這裡需要用到一個 dd ...
  • 前期需要儲備的知識點 併發 看起來同時運行的就可以稱之為併發,其實內部是做了0.1秒A,做了0.1秒B,交替進行運作,看起來像是一起運作的。 並行 真正意義上的同時執行 補充 1.並行肯定算是併發 2.單核的電腦肯定不能實現並行,但是可以實現併發!! 3.我們這裡的單核是假設就是一個核,幹活的就一 ...
  • Swagger以及knife4j基本使用 Swagger 介紹: 官網:https://swagger.io/ Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化RESTful風格的 Web 服務 Restful 面向資源 RESTful是一種架構的規範與約束、原則,符合這種規範的 ...
  • Mybatis 懶載入的使用 什麼是懶載入?懶載入的意思就是在使用的時候才去載入,不使用不去載入,相反的就叫饑餓載入或者立即載入。懶載入在Mybatis中一般是存在與聯合查詢的情況,比如查詢一個對象的同時連帶查詢相關的表對應的數據。在Mybatis中查詢可以通過ResultMap設置查詢對象返回一個 ...
  • 一、前言 我們在開發中會經常遇到一些可能會變的值,比如資料庫的密碼,一些關鍵鏈接的配置等等。 都需要我們寫在配置文件中,這樣可以把這些配置文件放到nacos上進行管理,修改nacos的配置,咱們發佈的包就可以動態的進行更新了,不需要重新修改打包在重新發包! 咱們今天就來說一說讀取配置文件中的值常見的 ...
  • Excelize 是 Go 語言編寫的 Excel 文檔基礎庫,2022年8月22日,社區正式發佈了 2.6.1 版本,該版本包含了多項新增功能、錯誤修複和相容性提升優化。 ...
  • 作者:昌維 來源:https://www.zhihu.com/question/537774494/answer/2534015588 知乎上有一個提問: 分享一個很有意思的回答。 1 我是一名 JetBrains 的忠實粉絲。我學習編程語言的經歷大概有 10 年左右,使用 JetBrains 大概 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...