【问题标题】:Wrong __DIR__ magic constant value错误的 __DIR__ 魔法常数值
【发布时间】:2015-10-17 16:42:40
【问题描述】:

我一直在尝试安装一个使用 Laravel 框架构建的 Web 应用程序。该应用程序作为 GIT 存储库托管。

这里是我的问题的详细描述,以阐明我是如何面对它的。

我第一次将存储库克隆到以下路径:

/var/www/app.example.com/script/

然后创建一个指向它的public 目录的符号链接,如下所示,以遵循我服务器的nginx 路由约定:

ln -s /var/www/app.example.com/script/public /var/www/app.example.com/public_html

但我决定将所有内容从script 目录移到上一层,这就是我的问题开始的地方。
我将 Laravel 安装移动到 /var/www/app.example.com/ 并让 nginx 直接加载其 public 目录作为根路径。

现在的问题是每次我尝试加载应用程序时,它都会尝试从之前的位置读取文件:

警告: 要求(/var/www/app.example.com/script/public/../bootstrap/autoload.php): 无法打开流:中没有这样的文件或目录 /var/www/app.example.com/public/index.php 第 21 行

致命错误:require():需要打开失败 '/var/www/app.example.com/script/public/../bootstrap/autoload.php' (include_path='.:/usr/share/php:/usr/share/pear') 在 /var/www/app.example.com/public/index.php 第 21 行

注意事项:

  • 我已经使用 composer 安装了所有的依赖项

    curl -sS https://getcomposer.org/installer | php
    php composer.phar 安装

  • 我使用nginx 作为我的网络服务器

  • 我已尝试删除所有内容(包括 ~/.composer)并重新开始,但无济于事。
  • 我什至尝试将整个项目移动到一个新的根目录中
  • 看来问题出在__DIR__ 魔法常数上,因为它包含错误的路径
  • 奇怪的是,如果我回显 __DIR__,它会打印正确的路径,但在使用它的下一行中,它的旧路径不正确

我希望我的描述已经足够清楚,以避免任何混淆和可能的反对票。

【问题讨论】:

  • "然后创建了一个指向它的公共符号链接" 小心符号链接,你可能想在这里使用realpath(__DIR__) 而不是魔法常数... 另外:是@ 987654335@ 对吗?我的意思是:引导程序确实与public 处于同一水平吗?实际路径是否如下所示:script/bootstrap/autoload.php?最后:你为什么不简单地使用作曲家的自动加载器?
  • @EliasVanOotegem 编辑 Laravel 的核心文件是否合理?是的,它们处于同一水平。过去的实际路径看起来像script/bootstrap/autoload.php,但现在它们位于完全不同的路径中。最后我正在使用作曲家的自动加载器。
  • 如果它们位于完全不同的路径中,请使用 realpath(__DIR__) 作为初学者(它解析符号链接),也许最重要的是:将当前路径添加到 include path,最好在前面添加它:$paths = explode(PATH_SEPARATOR, get_include_path()); array_unshift($thePath, $paths); set_include_path(implode(PATH_SEPARATOR, $paths)); 或类似的东西......
  • 你解决了吗?当__DIR__ 显示到不同目录的路径(到服务器上的其他域)并且我不知道如何解决它(realpath(__DIR__) 有效,但在供应商文件中也使用了__DIR__ 时,我有类似的问题,所以错误只会移动到其他文件和行)。我在那里看不到任何 simlinks,我真的不知道为什么它不显示正常路径。
  • 对于未来的陌生人 - 在我的情况下,原因是 OPcache 错误/功能从同一服务器上的不同域加载文件,因为它具有相似的目录结构和文件名。只有关闭 OPcache bugs.php.net/bug.php?id=67481 才能为我工作

标签: php laravel nginx composer-php


【解决方案1】:

所以我在这里可能完全错了,但是是否有一个配置文件可能保存了它?或者script 目录中是否还有一些可能导致这种情况的东西?当__DIR__ 输出正确的值时,它也应该在其他代码中。

【讨论】:

  • script 目录现在被完全删除,项目文件被克隆到一个完全不同的独立路径中。
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2014-02-10
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多