PHP file_exists 不起作用。似乎在颠倒真假
Posted
技术标签:
【中文标题】PHP file_exists 不起作用。似乎在颠倒真假【英文标题】:PHP file_exists does not work. It seems to be reversing true and false 【发布时间】:2016-12-21 03:04:57 【问题描述】:在处理我的照片库时,我决定最好有一个备用文件,如果应该显示的图像没有。我看过这个网站,可能还有其他人。他们都说要使用:
$VariableName = "photography/small/2014-09-21-red-1.png";
if (file_exists ($VariableName)) echo "Yes!!!";
else echo "Nooo!!!";
或
if (file_exists ("photography/small/2014-09-21-red-1.png")) echo "Yes!!!";
else echo "Nooo!!!";
出于某种原因,这对我不起作用。它确实有效,但只有在 file_exists
设置为 !file_exists
时才有效,也就是说:“如果此文件不存在,则显示存在的图像(我想要的图像,而不是替换的图像)”。换一种说法:
这表示如果apple
存在,则显示“橙色”;如果apple
不存在,则显示apple
。
我什至将生成的图片链接放在搜索栏中(使用!file_exists
时),按回车后,它会将我带到图片。我已确保将图像设置为0777
,以防干扰,但它似乎没有效果。所有$DataRows
变量都连接到数据库,我已经三重检查photography/small
中的文件名是否与数据库表中的文件名匹配。
为什么会这样?
$URLPath = "http://localhost/~matthew/";
if (file_exists ($URLPath . "photography/small/" . $DataRows["DatePublished"] . "-" . $DataRows["FileName"] . "." . $DataRows["ImageExtension"]))
echo '<img src="' . $URLPath . "photography/small/" . $DataRows["DatePublished"] . "-" . $DataRows["FileName"] . "." . $DataRows["ImageExtension"] . '" PhotoName"] . '">' . "\n";
else
echo '<img src="' . $URLPath . 'img/no-image.png" >' . "\n";
非常感谢您的帮助。
【问题讨论】:
~mathew 是 htdocs 文件夹中的一个文件夹吗? 有什么具体的原因,你为什么要绕道HTTPing进入你自己的服务器来检查文件是否存在?也就是说,为什么是http://localhost/~matthew
而不是/var/www/my-docroot
?
RTM php.net/manual/en/function.file-exists.php "从 PHP 5.0.0 开始,该函数也可以与一些 URL 包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。”
@Robert 我相信~matthew
是一个htdocs
文件夹。我使用 Mac 作为服务器,它的设置不同于 Windows 和 Linux。
@Boldewyn 我使用 Mac 作为服务器,它没有像 Windows 那样的 www
文件夹。
【参考方案1】:
尝试使用 clearstatcache() 并仔细检查文件名和路径。
【讨论】:
我已经确保所有的链接都是正确的。clearstatcache
不起作用。
请问您使用的是哪个PHP版本?【参考方案2】:
看起来您正在检查文件但将 URL 传递给函数。它可能返回 false,因为 URL 不是您服务器上的有效路径。我建议使用文件的实际路径,或者如果您必须使用 URL,请查看这篇文章:How to check if a file exists from a url
【讨论】:
我愿意,但我对每个条目都使用了数据库循环。正如我在帖子中所说,我已经对文件夹和数据库表中的文件名进行了三次检查。一切都正确。【参考方案3】:如果你改变 $URLPath 会发生什么
$URLPath = "http://localhost/~matthew/";
到
$URLPath = $_SERVER['DOCUMENT_ROOT'] . "/~matthew/";
【讨论】:
返回Library/WebServer/Documents/~matthew/
,结果什么也没有。
奇数。我从不使用 URL 进行查询以跳过 ping。使用 is_file() 而不是 file_exists() 是否给出相同的结果?你确定你的数据库没问题?
我肯定数据库没问题。我还有一个使用数据库的导航菜单和迷你导航菜单,它们显示没有任何问题。 is_file()
也返回 false。
我认为 ~matthew 是别名而不是物理文件夹。如果是这样,请检查服务器的配置以获取正确的 fs 路径。祝你好运。【参考方案4】:
if (file_exists ($VariableName or "path-to-image"))
这是胡言乱语。只要“path-to-image”不为空,操作数的计算结果就会为 (bool) true。
应该是:
if (file_exists ($VariableName))
看来你应该使用
If(is_readable($variable))
但是看看你后来的代码,你并没有使用你最初引用的结构。
file_exists()
在很多不同的情况下都像我描述的那样工作。
【讨论】:
$VariableName or "path-to-image"
放在一起表明您可以使用if (file_exists ($VariableName)
或if (file_exists ("path-to-image")
。我会在上面修复它。
@symcbean 我本来打算对他们对if (file_exists ($VariableName or "path-to-image"))
的使用发表评论,但后来意识到这就是 OP 刚才所说的。代码示例的措辞应该更好。在这个问题发布后,我在阅读了几次之后就明白了他们的意思。问题下张贴了cmets,但没有得到回答。所以,现在是任何人的球赛。我怀疑这是他们完全使用路径的方式。他们$VariableName = "path-to-imagepng";
的例子相当模糊,恕我直言。以上是关于PHP file_exists 不起作用。似乎在颠倒真假的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 重写规则时 PHP 函数 file_exists 不起作用