2011-02-03 66 views
0
$var = "http://site.com/image.png"; 

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

为什么此脚本始终返回falsefile_exists始终为false

+1

因为你正在寻找一个URL,而不是你的计算机(或网络服务器)上的物理路径 – Phill 2011-02-03 08:14:26

回答

10

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

直到PHP5,file_exists函数的目的是检测文件或目录是否存在。

在PHP5,支持来允许某些URL wrapper支持,按照说明上this page

提示:作为PHP 5.0.0,这个功能也可以使用一些URL封装器。请参阅支持的协议和包装以确定哪些包装支持stat()系列功能。

的包装有详细here但不幸的是,the http one does not support stat,一个先决条件,允许file_exists工作。

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

0

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

$var = "/var/www/html/image.png"; 
0

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

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

确保allow_url_fopen设置为ON。

+0

没关系,我跳到了结论。 @paxdiablo有正确的答案。 – berkes 2011-02-03 08:17:29

1

如果你想查询的远程文件的存在(实际上是“资源”),然后使用:

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

并检查HTTP状态代码。

相关问题