【问题标题】:PHP file_exists not working outside document rootPHP file_exists 在文档根目录之外不起作用
【发布时间】: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 用户拥有,这可能是问题吗?

标签: php apache file-exists document-root


【解决方案1】:

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

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

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

【讨论】:

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

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

很抱歉给您带来了困惑!

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 2015-02-01
    • 2011-03-19
    • 2012-02-21
    • 2017-05-14
    • 2017-03-11
    • 2014-02-19
    • 2013-08-29
    相关资源
    最近更新 更多