Home >Backend Development >PHP Tutorial >Several ways to determine whether a remote image exists in PHP_PHP Tutorial

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

WBOY
WBOYOriginal
2016-07-13 10:30:44809browse

While making a picture preview, I encountered a problem, which is to determine whether the remote file exists (not on the same server).
The code is as follows:

Copy codeThe code is as follows:

//Method 1
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;
else
return false;
}

//Method 2
function file_exists2($url)
{
if(file_get_contents($url,0,null,0,1 ))
return 1;
else
return 0;
}
//Method 3
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 will return FALSE regardless of whether the picture is present or not;
Method 2 is feasible under Windows, and TRUE will be returned under LINUX regardless of whether the picture is present;
Method 3 should be the most appropriate
In addition: use The get_headers() method has efficiency issues and is not recommended as this solution

fsockopen version:

Copy code The code is as follows:

$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:

Copy code The code is as follows:

$url = 'http://www.test.com/images/test.jpg';

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

CURL method:
Copy code The code is as follows:

$url2 = '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/764617.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: Copy the code The code is as follows: /...
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