PHP 文件存在总是错误

问题描述 投票:0回答:8

我有一个 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"];
php macos osx-snow-leopard file-exists
8个回答
8
投票

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

无论如何,这对我有用。


3
投票

这可能是文件权限问题。确保您正在测试的文件可由

_www
用户(即用于在 Mac OS X 上运行 apache {httpd} 的用户)访问。

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

希望有帮助。


1
投票

来自 php 手册

file_exists()

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

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

另一个原因

file_exists()
可能无法访问该文件(与安全模式无关):

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

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

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

  echo $_SERVER["SCRIPT_FILENAME"];
?>

1
投票

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

如果您在 Apache 下运行(而不是在命令行上),请记住它在 Snow Leopard 上的

_www
用户和
_www
组下运行。这就是需要访问权限的组。


0
投票

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

具体:

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


0
投票

使用

file_exists($_SERVER['DOCUMENT_ROOT']."/path/to/file")
这样 php 就会为你提供绝对路径。


0
投票

在 Mac 上,

cd
命令不区分大小写,但 PHP
file_exists
函数不区分大小写! 因此,如果您有一个名为(例如)
sites
的文件夹,那么

cd Sites
有效,但是

file_exists('/home/userid/Sites/mysite/config.php')
将返回 FALSE。


-1
投票

安全模式?

来自 PHP file_exists 文档

警告


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

© www.soinside.com 2019 - 2024. All rights reserved.