5

我有一个 file_exists() 总是返回 false 的情况。我最近的尝试是测试它是否会为 $_SERVER["SCRIPT_FILENAME"] 返回 true,然后如果找不到它所找到的文件,则返回路径的值。

与解决问题不一定相关的路径是:/Users/joe/Workspace/720/app/webroot/index.php

我显然已经验证了该文件在那里,甚至不确定它是如何不存在的,因为 php 正在为它提供服务。

我应该提到这是在运行 PHP 5.3.0 的 OS X Snow Leopard 上安装的。

任何想法都会很棒。

代码示例:

if (!file_exists($_SERVER["SCRIPT_FILENAME"]))
    $errors[] = 'Cant find:'. $_SERVER["SCRIPT_FILENAME"];
4

7 回答 7

8

我刚刚遇到了这个问题,并且在过去的几个小时里一直坚持下去。答案是您需要指定 ABSOULTE 路径才能使 file_exists() 工作。您不能使用相对路径,例如“dir1/images/image.jpg”或“../../images/image1.jpg”。您需要指定“/rootdir/subdir/dir1/images/myimage.jpg”。

无论如何,这对我有用。

于 2010-04-02T07:56:52.267 回答
3

应该是文件权限问题。确保您正在测试的文件可由_www用户访问(这是用于在 Mac OS X 上运行 apache {httpd} 的用户)。

也许您可以尝试使用 777 作为权限位测试 /tmp 上的文件。

希望能帮助到你。

于 2009-11-25T20:03:02.163 回答
1

还要检查父目录及其所有父目录,以确保每个人都具有执行权限。

如果您在 Apache 下运行它(而不是在命令行上),请记住它在 Snow Leopard 上的_www用户和组下运行。_www这就是需要访问权限的组。

于 2009-11-25T20:57:42.603 回答
1

从 php 手册上file_exists()

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

这只是一个猜测,代码示例可能会让事情更清楚。

另一个原因file_exists()可能无法访问该文件(与安全模式无关):

注意:检查是使用真实的 UID/GID 而不是有效的。

该脚本在我的 linux 机器上运行良好(这几乎是您添加的示例):

<?php
  if (file_exists($_SERVER["SCRIPT_FILENAME"])){
    echo "Found File: ";
  } else {
    echo "No File: ";
  }

  echo $_SERVER["SCRIPT_FILENAME"];
?>
于 2009-11-25T20:04:57.000 回答
0

这可能会有所帮助:
http ://bugs.php.net/bug.php?id=48535

具体来说:

我已将 php.ini 中的 fastcgi.impersonate 设置设置为 1(如文档中的推荐)。如果我将它设置为 0 它可以工作。

于 2009-11-25T20:48:47.647 回答
0

使用file_exists($_SERVER['DOCUMENT_ROOT']."/path/to/file")这种方式 php 将为您提供绝对路径。

于 2012-07-21T18:54:52.063 回答
-1

安全模式?

来自 PHP file_exists 文档

警告


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

于 2009-11-25T20:05:15.530 回答