file_exists 始终为 false
$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';
Why does this script always returns false
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为这实际上不是一个文件,而是一个 URL。
在 PHP5 之前,
file_exists
函数旨在检测文件或目录是否存在。在 PHP5 中,引入了支持某些 URL 包装器的功能,如 上的注释所示本页:
包装器在此处有详细说明,但不幸的是,
http
不支持stat
,这是允许file_exists
工作。如果您在服务器上运行,则可以使用
$_SERVER['DOCUMENT_ROOT']
对其进行转换,或者找到其他方法在文件系统上定位它。Because that's not actually a file, rather it's a URL.
Up until PHP5, the
file_exists
function was intended to detect whether a file or directory exists.At PHP5, support was introduced to allow support for some URL wrappers, as per the note on this page:
The wrappers are detailed here but, unfortunately, the
http
one does not supportstat
, a pre-requisite to allowingfile_exists
to work.If you're running on the server, you could possibly convert it using
$_SERVER['DOCUMENT_ROOT']
or find another way to locate it on the file system.如果您想检查远程文件(实际上是“资源”)是否存在,请使用:
并检查 HTTP 状态代码。
If you want to check the presence of remote files (actually "resources") then use:
And check the HTTP status code.
那么很可能您的服务器不允许 PHP 内部的外部连接。
您可以通过打开本地文件来检查这一点,看看是否有效。如果是这样,则您的代码是正确的。
确保
allow_url_fopen
设置为“ON”。Then most probably your server does not allow outside connections from within PHP.
You can check this by opening a local file and see if that works. If it does, your code is correct.
Make sure
allow_url_fopen
is set to ON.$var
变量应该描述系统上的路径,而不是 URL。例如The
$var
variable should describe a path on the system, not a URL. For example