0
$var = "http://site.com/image.png";

if (file_exists($var))
    echo 'yes';
else
    echo 'no';

为什么这个脚本总是返回false

4

4 回答 4

10

因为这实际上不是一个文件,而是一个 URL。

在 PHP5 之前,该file_exists函数旨在检测文件或目录是否存在。

在 PHP5 中,引入了支持以允许支持某些 URL 包装器,根据此页面上的注释:

提示:从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。

包装器在此处进行了详细说明,但不幸的是,该包装器http不支持statfile_exists,这是允许工作的先决条件。

如果您在服务器上运行,您可以使用转换它$_SERVER['DOCUMENT_ROOT']或找到另一种方法在文件系统上找到它。

于 2011-02-03T08:14:47.557 回答
1

如果要检查远程文件(实际上是“资源”)是否存在,请使用:

$i = get_headers($url);
$ok = strpos($i[0], "200");

并检查 HTTP 状态码。

于 2011-02-03T08:22:21.813 回答
0

$var变量应描述系统上的路径,而不是 URL。例如

$var = "/var/www/html/image.png";
于 2011-02-03T08:14:59.503 回答
0

那么很可能您的服务器不允许来自 PHP 内部的外部连接。

您可以通过打开本地文件来检查它是否有效。如果是这样,则您的代码是正确的。

确保allow_url_fopen设置为 ON。

于 2011-02-03T08:16:37.233 回答