程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP如何判斷遠程圖片文件是否存在

PHP如何判斷遠程圖片文件是否存在

編輯:關於PHP編程

fopen()方法

最簡單的方法就是用fopen(),看看文件能否打開,能打就文件當然就存在。

<?php
$url = 'http://www.bkjia.com/images/test.jpg';

if( @fopen( $url, 'r' ) ) 
{ 
	echo 'File Exits';
} 
else 
{
	echo 'File Do Not Exits';
}
?>

fopen() 函數打開文件或者 URL。如果打開失敗,函數會返回 FALSE。

語法:fopen(filename,mode,include_path,context)

參數描述filename必需。規定要打開的文件或 URL。mode必需。規定要求到該文件/流的訪問類型。可能的值見下表。include_path可選。如果也需要在 include_path 中檢索文件的話,可以將該參數設為 1 或 TRUE。context可選。規定文件句柄的環境。Context 是可以修改流的行為的一套選項。

mode 參數的可能的值:

mode說明"r"只讀方式打開,將文件指針指向文件頭。"r+"讀寫方式打開,將文件指針指向文件頭。"w"寫入方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。"w+"讀寫方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。"a"寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。"a+"讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。"x"創建並以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支持,僅能用於本地文件。"x+"創建並以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支持,僅能用於本地文件。

fopen() 將 filename 指定的名字資源綁定到一個流上。如果 filename 是 "scheme://..." 的格式,則被當成一個 URL,PHP 將搜索協議處理器(也被稱為封裝協議)來處理此模式。如果該協議尚未注冊封裝協議,PHP 將發出一條消息來幫助檢查腳本中潛在的問題並將 filename 當成一個普通的文件名繼續執行下去。

如果 PHP 認為 filename 指定的是一個本地文件,將嘗試在該文件上打開一個流。該文件必須是 PHP 可以訪問的,因此需要確認文件訪問權限允許該訪問。如果激活了安全模式或者 open_basedir 則會應用進一步的限制。

如果 PHP 認為 filename 指定的是一個已注冊的協議,而該協議被注冊為一個網絡 URL,PHP 將檢查並確認 allow_url_fopen 已被激活。如果關閉了,PHP 將發出一個警告,而 fopen 的調用則失敗。

一個fopen的用法

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:[email protected]/test.txt","w");
?>

但是如果圖片資源所在服務器掛掉了,這個函數會一直等待,所以我們需要一個備用方案。

CURL 方法

CURL是個很好用的類庫,下面看下如何用它來判斷。

<?php
$url2 = 'http://www.bkjia.com/test.jpg';

$ch = curl_init(); 
$timeout = 10; 
curl_setopt ($ch, CURLOPT_URL, $url2); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

$contents = curl_exec($ch);
//echo $contents;
if (preg_match("/404/", $contents)){
	echo '文件不存在';
}
?>

curl_exec()執行完之後如果文件不存在,會返回如下信息:

HTTP/1.1 404 Not Found
Date: Tue, 14 Feb 2012 05:08:34 GMT
Server: Apache
Accept-Ranges: bytes
Content-Length: 354
Content-Type: text/html

用正則看看是否有404,有的話文件就不存在。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved