Home >Backend Development >PHP Tutorial >PHP determines whether the remote image can be called
This time I will bring you PHP to determine whether a remote image can be called. What are the precautions for PHP to determine whether a remote image can be called? The following is a practical case, let's take a look. Note: When making a picture preview, I encountered a problem, which is to determine whether the
remote fileexists (not the same server). Examples, multiple methods to determine whether remote images exist.
<?php //方法一 function file_exists ($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; } //方法二 function file_exists2($url) { if(file_get_contents($url,0,null,0,1)) return 1; else return 0; } //方法三 function file_exists($url) { $curl = curl_init($url); // 不取回数据 curl_setopt($curl, CURLOPT_NOBODY, true); // 发送请求 $result = curl_exec($curl); $found = false; // 如果请求没有发送失败 if ($result !== false) { // 再检查http响应码是否为200 }
Method two, feasible under windows, returns TRUE regardless of whether the picture is present under LINUX;
Method 3 should be the most appropriate
In addition: There are efficiency issues with the get_headers() method, and it is recommended not to use it as this solution.
fsockopen version:
<?php $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.1\r\n"); fputs($fp, "Host: {$info['host']}\r\n"); fputs($fp, "Connection: close\r\n\r\n"); $headers = array(); while(!feof($fp)) { $line = fgets($fp); if($line != "\r\n") { $headers[] = $line; }else { break; } } echo "<pre class="brush:php;toolbar:false">"; print_r($headers);
Use
http status codeto determine whether the file exists. For example, responses 302, 301, 404, etc. all mean that it does not exist. If it is 200, 304, etc., it can Treat the file as existing. 1, fopen() method:
<?php $url = 'http://www.test.com/images/test.jpg'; if( @fopen( $url, 'r' ) ) { echo 'File Exits'; } else { echo 'File Do Not Exits'; } ?>
<?php $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 '文件不存在'; } ?>
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related matters on the php Chinese website article!
Recommended reading:
php array function shuffle() and array_rand() random function usage steps detailed explanationphp array search function usage Summary of methodsThe above is the detailed content of PHP determines whether the remote image can be called. For more information, please follow other related articles on the PHP Chinese website!