PHP file_exists 在文档根目录之外不起作用

Posted

技术标签:

【中文标题】PHP file_exists 在文档根目录之外不起作用【英文标题】:PHP file_exists not working outside document root 【发布时间】:2014-12-18 16:19:04 【问题描述】:

我有以下目录结构,其中 Document Root 指向 /var/www/html/public:

/应用程序 /应用程序/控制器 /public(文档根目录)

我正在尝试使用以下代码检查 /public 目录中的文件中是否存在文件(在本地设置上工作,但不在实时服务器上)

<?php 
if (file_exists('../application/controllers/TestController.php'))

    /* do something */

我需要在 Apache 配置文件中添加一些内容吗?我不知道从这里去哪里。

【问题讨论】:

您的 if 语句没有左括号和右括号。是错字吗? 该脚本在哪个目录中运行? if (file_exists('var/html/www/public/application/controllers/TestController.php')) 工作吗? @Dagon 它在 /public 目录中运行。准确地说是/public/index.php。 可能是权限问题。 ls -l /var/www/html/www/public/application/controllers/ 有没有给你任何提示?我也赞成上述建议尝试绝对文件路径。 @miken32 绝对路径也不起作用。路径是/var/www/html/application/controllers/。我确实注意到我要检查的文件的所有者由非 root 用户拥有,这可能是问题吗? 【参考方案1】:

file_exists() 可以在任何地方工作,它与文档根目录无关,并且没有 apache 配置设置可以改变这一点。

有两个可能的问题可能会导致您的问题:

相对路径与您认为的不相关。请使用绝对路径并编辑您的问题以显示您用于检查绝对路径的代码(顺便说一下您在 cmets 中发布的代码有错误) 运行 PHP 的 UNIX 进程无权访问该文件。请检查 PHP 以什么用户身份运行并检查文件的权限。

【讨论】:

@Dagon cmets 太短,无法描述所有细节。最好发布答案。 @AbhiBeckert 感谢您的建议。幸运的是,GIT 没有正确重命名文件名大小写差异是一个问题。对于其他可能遇到这些问题的人来说,这些都是很好的提示。【参考方案2】:

所以我发现的真正问题是,在我的实时服务器上,当我将文件名重命名为小写 (APIController => ApiController) 时,文件名没有改变。即使更改发生在本地,我的 GIT 提交在提交代码时也没有正确重命名文件。

很抱歉给您带来了困惑!

【讨论】:

以上是关于PHP file_exists 在文档根目录之外不起作用的主要内容,如果未能解决你的问题,请参考以下文章

file_exists() 的 PHP 不区分大小写版本

file_exists() 在 while 循环内的 php5 中不起作用

PHP file_exists 对现有文件返回 false

PHP file_exists 目录

php文件下载,不能找到用file_exists()判断文件存放的绝对路径是,提示文件不存在。。

PHP获取文件根目录之外的文件