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() 在 while 循环内的 php5 中不起作用