$var = "http://site.com/image.png";
if (file_exists($var))
echo 'yes';
else
echo 'no';
为什么这个脚本总是返回false
?
$var = "http://site.com/image.png";
if (file_exists($var))
echo 'yes';
else
echo 'no';
为什么这个脚本总是返回false
?
因为这实际上不是一个文件,而是一个 URL。
在 PHP5 之前,该file_exists
函数旨在检测文件或目录是否存在。
在 PHP5 中,引入了支持以允许支持某些 URL 包装器,根据此页面上的注释:
提示:从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。
包装器在此处进行了详细说明,但不幸的是,该包装器http
不支持stat
file_exists
,这是允许工作的先决条件。
如果您在服务器上运行,您可以使用转换它$_SERVER['DOCUMENT_ROOT']
或找到另一种方法在文件系统上找到它。
如果要检查远程文件(实际上是“资源”)是否存在,请使用:
$i = get_headers($url);
$ok = strpos($i[0], "200");
并检查 HTTP 状态码。
该$var
变量应描述系统上的路径,而不是 URL。例如
$var = "/var/www/html/image.png";
那么很可能您的服务器不允许来自 PHP 内部的外部连接。
您可以通过打开本地文件来检查它是否有效。如果是这样,则您的代码是正确的。
确保allow_url_fopen
设置为 ON。