Home  >  Article  >  Backend Development  >  Several ways to determine whether a remote file exists in PHP_PHP Tutorial

Several ways to determine whether a remote file exists in PHP_PHP Tutorial

WBOY
WBOYOriginal
2016-07-14 10:12:131350browse

When I was making a picture preview, I encountered a problem, which was to determine whether the remote file existed (not on the same server).

The code is as follows:
0102030405060708091011121314151617181920212223242526272829303132333435 //Method one function
file_exists($url){$ch
= curl_init();curl_setopt($ch,
curlopt_url,$url);curl_setopt($ch,
curlopt_nobody, 1); //
Do not download curl_setopt($ch,
curlopt_failonerror, 1);curl_setopt($ch,
curlopt_returntransfer, 1); if(curl_exec($ch)!==false)return
true;elsereturn
false;} //Method 2 function
file_exists2($url){if(file_get_contents($url,0,null,0,1))return
1;elsereturn
0;}//Method three function
file_exists($url)
{$curl
= curl_init($url);//
Do not retrieve data curl_setopt($curl,
CURLOPT_NOBODY, true);//
Send request $result
= curl_exec($curl);$found
= false;//
If the request is not sent and fails if
($result
!== false) {//
Check again whether the http response code is 200}
Method 1 returns FALSE regardless of whether the image is present;
Method 2 is feasible under Windows. Under LINUX, TRUE will be returned regardless of whether the picture is present;
Method 3 should be the most suitable
In addition: There are efficiency issues with the get_headers() method, and it is recommended not to use it as this solution
fsockopen version:
01020304050607080910111213141516171819 $url
= "http://www.baidu.com/img/baidu_sylogo1.gif"; $info
= parse_url($url); $fp
= fsockopen($info['host'],
80,$errno,
$errstr,
30); fputs($fp,"GET
{$info['path']} HTTP/1.1rn"); fputs($fp,
"Host:
{$info['host']}rn"); fputs($fp,
"Connection:
closernrn"); $headers
= array(); while(!feof($fp))
{ $line
= fgets($fp); if($line
!= "rn")
{ $headers[]
= $line; }else
{ break; } } echo
"
"; print_r($headers); 
Use the http status code to determine whether the file exists. For example, responses 302, 301, 404, etc. all mean that the file does not exist. If it is 200, 304, etc., it can be regarded as the file exists.
fopen() method:
010203040506070809101112
= 'http://www.test.com/images/test.jpg'; if(
@fopen(
$url,
'r'
) ) { echo
'File Exits'; } else else { echo
'File Do Not Exits'; } ?>
CURL method:
01020304050607080910111213141516
= 'http://www.test.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
'File does not exist'; }

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/477216.htmlTechArticleWhile making a picture preview, I encountered a problem, which is to determine whether the remote file exists (not same server). The code is as follows: 01020304050607080910111213141...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn