Home  >  Article  >  Backend Development  >  PHP determines whether the remote image can be called

PHP determines whether the remote image can be called

php中世界最好的语言
php中世界最好的语言Original
2018-05-21 11:16:202241browse

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 file

exists (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
}

Code description:

Method one, returns FALSE regardless of whether the picture is present;

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[&#39;host&#39;], 80,$errno, $errstr, 30);
    fputs($fp,"GET {$info[&#39;path&#39;]} HTTP/1.1\r\n");
    fputs($fp, "Host: {$info[&#39;host&#39;]}\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 code

to 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 = &#39;http://www.test.com/images/test.jpg&#39;;
      if( @fopen( $url, &#39;r&#39; ) )
    {
        echo &#39;File Exits&#39;;
    }
    else
    {
        echo &#39;File Do Not Exits&#39;;
    }
    ?>

2, CURL method:
<?php
    $url2 = &#39;http://www.test.com/test.jpg&#39;;
       $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 &#39;文件不存在&#39;;
    }
?>

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 explanation

php array search function usage Summary of methods

The 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!

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