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

时间:2011-11-03 07:24:27

标签: php image file file-io

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

我尝试过以下操作,但不起作用:

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

即使图像存在或不存在,它也总是说“文件存在”。我不确定为什么它不起作用......

20 个答案:

答案 0 :(得分:117)

至少需要引号中的文件名(作为字符串):

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

另外,请确保$filename已正确验证。然后,只有在PHP配置中激活allow_url_fopen时它才会起作用

答案 1 :(得分:102)

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

这对我不起作用。我这样做的方式是使用getimagesize。

$src = 'http://www.mydomain.com/images/'.$filename;

if (@getimagesize($src)) {

请注意,'@'表示如果图像不存在(在这种情况下函数通常会抛出错误:getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed),它将返回false。

答案 2 :(得分:13)

好吧, file_exists 并未说明文件是否存在,而是说路径是否存在。 ⚡⚡⚡⚡⚡⚡⚡

因此,要检查它是否是文件,您应该使用 is_file file_exists 来了解是否确实存在文件在路径后面,否则 file_exists 将为任何现有路径返回 true

  

以下是我使用的功能:

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

答案 3 :(得分:12)

试试这样:

$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";
}

答案 4 :(得分:9)

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

"Provider=OraOLEDB.Oracle"

答案 5 :(得分:8)

首先要了解的事情:你没有文件 文件是文件系统的主题,但是您使用HTTP协议发出请求,该协议不支持文件而是URL。

因此,您必须使用浏览器请求未存在的文件并查看响应代码。如果它不是404,你就无法使用任何包装器来查看文件是否存在而你必须使用其他协议请求你的cdn,例如FTP

答案 6 :(得分:7)

如果文件位于您的本地域,则无需输入完整的URL。只有文件的路径。如果文件位于不同的目录中,则需要在路径前加上“。”

$file = './images/image.jpg';
if (file_exists($file)) {}

经常是“。”保持关闭将导致文件显示为不存在,实际上它确实存在。

答案 7 :(得分:6)

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

        return 0;           
    }

答案 8 :(得分:3)

is_filefile_exists之间存在重大差异。

对于(常规)文件,

is_file返回true:

  

如果文件名存在且是常规文件,则返回 TRUE ,否则返回 FALSE

对于文件和目录,

file_exists都返回true:

  

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

注意: 还可以查看this stackoverflow question,了解有关此主题的更多信息。

答案 9 :(得分:2)

你可以使用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';   
}

答案 10 :(得分:2)

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

$abs_path = '/var/www/example.com/public_html/images/';
$file_url = 'http://www.example.com/images/' . $filename;

if (file_exists($abs_path . $filename)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

如果您正在为CMS或PHP框架编写,那么据我所知,所有这些都已为文档根路径定义了常量。

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

Wordpress示例:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

if (file_exists($image_path)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

我在这里加倍努力:)。因为这段代码不需要太多维护而且非常可靠,所以我会用if表示简写:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $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';

答案 11 :(得分:1)

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

答案 12 :(得分:1)

试试这个:

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

答案 13 :(得分:0)

使用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)); 

检测图像。

答案 14 :(得分:0)

file_exists不仅会读取文件,还会读取路径。所以当$filename为空时,命令就像它写的那样运行:

file_exists("http://www.example.com/images/")

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

我通常这样写:

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

答案 15 :(得分:0)

file_exists($filepath)将返回目录和完整文件路径的真实结果,因此在未传递文件名时并不总是一个解决方案。

is_file($filepath)仅对完整文件路径返回true

答案 16 :(得分:0)

如果您使用curl,可以尝试以下脚本:

function checkRemoteFile($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
 // don't download content
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;
}

}

参考网址:https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/

答案 17 :(得分:0)

您需要带有file_exists的服务器路径

例如

if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }

答案 18 :(得分:0)

如果图像的路径是相对于应用程序根目录而言的,则最好使用以下内容:

function imgExists($path) {
    $serverPath = $_SERVER['DOCUMENT_ROOT'] . $path;

    return is_file($serverPath)
        && file_exists($serverPath);
}

此功能的使用示例:

$path = '/tmp/teacher_photos/1546595125-IMG_14112018_160116_0.png';

$exists = imgExists($path);

if ($exists) {
    var_dump('Image exists. Do something...');
}

我认为创建类似库的东西来检查适用于不同情况的图像是否存在是个好主意。除了很多出色的答案,您还可以使用它来解决此任务。

答案 19 :(得分:0)

if(@getimagesize($image_path)){
 ...}

为我工作。