PHP文件始终存在错误

时间:2009-11-25 19:59:55

标签: php macos osx-snow-leopard file-exists

我遇到的情况是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"];

7 个答案:

答案 0 :(得分:8)

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

无论如何,这对我有用。

答案 1 :(得分:3)

这可能是文件权限问题。确保{I-{}}用户(用户在Mac OS X上运行apache {httpd}时)可以访问您正在测试的文件。

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

希望它有所帮助。

答案 2 :(得分:1)

来自file_exists()

上的php手册
由于安全模式限制,此函数对于无法访问的文件返回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"];
?>

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

具体做法是:

  

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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

安全模式?

来自PHP file_exists documentation

  

警告

     


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