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

如果我在 /zones/team.php 上运行此功能,它可以工作(它打印是)。如果我在 /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";              
}    

两者都说不;

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";              
}

两者都说是;但是在 team.php 上我使用 ./ 和在 ajax.php ../ ...为什么这有效???

4

7 回答 7

3

您的最后一个工作很可能是因为:

  1. 您正在zones/team.phpindex.php位于根目录中的一个调用。在这种情况下./,部分正确标识了您的当前目录。
  2. 而对于 ajax,你必须直接调用它 like auth/ajax.php,而不是像index.php?type=jx&do=auth/ajaxNo.1 一样的东西。因此,情况并非如此,您需要先退出auth../然后继续squadra/...

尽可能多地使用绝对路径。相对路径是 PHP 计算它们的痛苦(在性能方面)。

于 2010-11-12T23:27:06.663 回答
2

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

其次,确保你没有错别字。

祝你好运!

于 2010-11-12T21:43:08.913 回答
2

当你得到一个正斜杠时,file_exist 将转到 HDD 的根目录。

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

于 2010-11-12T21:44:01.180 回答
1

如果squadra是运行PHP脚本的目录下的目录,试试

if(file_exists('./squadra/photos/photog.jpg')) {
    echo "### YES ###";
} else {
    echo "### NO ###";
} 
于 2010-11-12T21:46:14.190 回答
1

检查 php safe_mode 状态,并检查文件路径是否区分大小写。

php file_exists

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

于 2010-11-12T21:48:35.703 回答
0

如果你使用带有 file_exists 的相对路径,它会返回 false,除非该路径是相对于 php 目录的。

于 2010-11-12T21:44:19.347 回答
0

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

tl;博士; 尝试删除第一个“/”

于 2010-11-12T21:44:39.167 回答