Cette fois, je vais vous apporter PHP pour déterminer si une image distante peut être appelée. Quelles sont les précautions pour que PHP détermine si une image distante peut être appelée. Ce qui suit est un cas pratique, voyons. jetez un oeil.
Remarque : lors de la création d'un aperçu d'image, j'ai rencontré un problème qui consiste à déterminer si le fichier distant existe (pas le même serveur).
Exemples, plusieurs méthodes pour déterminer si des images distantes existent.
<?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 }
Description du code :
Méthode 1, renvoie FALSE, que l'image soit présente ou non.
Méthode 2, réalisable sous Windows, renvoie VRAI, que l'image soit présente ou non ; ou pas sous LINUX ;
La méthode 3 devrait être la plus appropriée
De plus : Il y a des problèmes d'efficacité avec la méthode get_headers(), et il est recommandé de ne pas l'utiliser comme cette solution.
version fsockopen :
<?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);
Utilisez le code d'état http pour déterminer si le fichier existe. Par exemple, les réponses 302, 301, 404, etc. signifient toutes cela. il n'existe pas. S'il s'agit de 200, 304, etc., cela peut être considéré comme une existence de fichier.
1. Méthode fopen() :
<?php $url = 'http://www.test.com/images/test.jpg'; if( @fopen( $url, 'r' ) ) { echo 'File Exits'; } else { echo 'File Do Not Exits'; } ?>
2. Méthode CURL :
<?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 '文件不存在'; } ?>
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. informations passionnantes, veuillez faire attention à php Autres articles connexes sur le site Web chinois !
Lecture recommandée :
Utilisation de la fonction de recherche de tableau php Résumé des méthodes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!