file_exists()无法找到文件

4
if(file_exists("./squadra/photos/photog.jpg")) {
    echo "### YES ###";
} else {
    echo "### NO ###";
}

如果我在/zones/team.php上运行此函数,它可以正常工作(会打印出YES)。如果我在/auth/ajax.php上运行此函数,它会打印出NO。为什么呢?

编辑

所以我做了一些实验。

1- 如果我尝试:

// file on /zones/team.php
if(file_exists($_SERVER['DOCUMENT_ROOT']."/squadra/photos/provag.jpg")) {
    echo "YES";
} else {
    echo "NO";              
}

// file on /auth/ajax.php
if(file_exists($_SERVER['DOCUMENT_ROOT']."/squadra/photos/provag.jpg")) {
    echo "YES";
} else {
    echo "NO";              
}    

两者都显示NO;

2 - 如果我尝试:

// file on /zones/team.php
if(file_exists("./squadra/photos/provag.jpg")) {
    echo "YES";
} else {
    echo "NO";              
}


// file on /auth/ajax.php
if(file_exists("../squadra/photos/provag.jpg")) {
    echo "YES";
} else {
    echo "NO";              
}

两个都写的是YES;但在team.php中我使用了./,而在ajax.php中使用了../...为什么会起作用?


你确定这是正确的绝对路径吗?你有一个名为squadra根目录吗? - Pekka
我很确定,实际上如果我写<img src='./squadra/photos/photog.jpg' class='photoplayer' />,我可以看到这张图片。 - markzzz
看一下下面@Mikhail的答案。他是完全正确的。同时确保你不要尝试使用Web路径。网络路径和服务器路径并不相同。 - Cfreak
@markzz,你原来的代码里面.在哪里? - Pekka
尝试了所有建议,但仍然不起作用。请尝试查看主题中添加的两个示例 :) 感谢您的时间。 - markzzz
显示剩余3条评论
7个回答

3

你最后一个工作可能是因为:

  1. 你从位于根目录的index.php调用了zones/team.php。在这种情况下,./正确地标识了你当前的目录。
  2. 对于ajax,你必须直接调用它,比如auth/ajax.php,而不是像index.php?type=jx&do=auth/ajax,这与第1点相同。因此,你需要通过../先退出auth,然后继续使用squadra/...

尽可能经常使用绝对路径。相对路径对于PHP来说计算起来很麻烦(从性能方面考虑)。


是的,我认为使用ajax调用可能会有问题。所以我使用了这些函数 :) 不管怎样,奇怪的是,如果我在两个地方都使用$_SERVER['DOCUMENT_ROOT'],它就不起作用 :) 感谢您的解释! - markzzz

2

确保您考虑了您键入的文件夹。您可以使用 / 开始文件地址,这是服务器端根目录。如果您想要本地目录,请删除前面的 / 或键入整个路径。

其次,请确保您没有拼写错误。

祝您好运!


2

由于有一个斜杠,file_exist将会进入硬盘的根目录。

在其前面使用$_SERVER['DOCUMENT_ROOT']或者删除斜杠并使用../等等。


1
如果squadra是PHP脚本运行目录下的一个目录,请尝试:
if(file_exists('./squadra/photos/photog.jpg')) {
    echo "### YES ###";
} else {
    echo "### NO ###";
} 

是的,如果我在(例如)/zones/team.php上运行此函数,它可以工作。但是,如果我在/auth/ajax.php上运行此函数,它就无法工作。这怎么可能??? - markzzz
在/auth/ajax.php中,我通过ajax调用该函数,但我认为这并没有什么区别... - markzzz
等一下:我错了。如果我写 $_SERVER['DOCUMENT_ROOT']."/squadra/photos/photog.jpg",它会在 team.php 和 ajax.php 中都显示 NO。 - markzzz
似乎您在Apache中设置了别名目录,因此C:/Program Files/Apache Software Foundation/Apache2.2/htdocs不是您网页的真正根目录。例如,当您编辑/zones/team.php页面时,文件的完整路径是什么?(应该可以使用“另存为”命令查看) - tcrosley
“../squadra/photos/photog.jpg” 只在 /auth/ajax.php 上有效(而不是 team.php)!“./squadra/photos/photog.jpg” 只在 /zones/team.php 上有效(而不是 ajax.php)!所谓有效,是指它们会打印出 YES。这真的非常奇怪…… - markzzz
显示剩余14条评论

1

检查php的safe_mode状态,并检查文件路径的大小写敏感性。

php file_exists

警告: 此函数对于由于安全模式限制而无法访问的文件返回FALSE。但是,如果这些文件位于safe_mode_include_dir中,则仍然可以被包含。


0

如果您在使用file_exists时使用相对路径,除非该路径相对于php目录,否则它将返回false。


0

再检查一遍路径-我认为前导斜杠是一个错误-因为它可能指向根目录(服务器或更可能的是用户空间)-而您的执行脚本可能位于子路径中...

简而言之,请尝试删除第一个“/”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接