错误的__DIR__魔术常量值

3
我一直在尝试安装使用 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` 目录作为根路径加载。
现在的问题是,每次我尝试加载应用程序时,它都试图从以前的位置读取文件:
警告: require(/var/www/app.example.com/script/public/../bootstrap/autoload.php): 打开流失败:没有那个文件或目录 /var/www/app.example.com/public/index.php 在第21行
致命错误:要求():无法打开所需的 '/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 on line 21
需要注意的事项:
- 我使用 composer 安装了所有依赖项。
curl -sS https://getcomposer.org/installer | php
php composer.phar install
- 我使用 nginx 作为我的 Web 服务器。 - 我已经尝试删除所有内容(包括 `~/.composer`)并重新开始,但无济于事。 - 我甚至尝试将整个项目移到一个新的根目录下。 - 似乎问题出在 `__DIR__` 魔术常量上,因为它包含错误的路径。 - 奇怪的是,如果我 `echo __DIR__`,它会打印出正确的路径,但在其下一行中使用它时,它会有错误的旧路径。
我希望我的描述足够清晰,避免任何混淆和可能的踩低票。

1
然后创建了指向其公共文件夹的符号链接。请注意符号链接,您可能希望在此处使用realpath(__DIR__)而不是使用魔术常量... 另外: script/public / .. / bootstrap/ 是否正确?我的意思是:引导程序确实与public处于同一级别吗? 实际路径是否看起来像这样:script/bootstrap/autoload.php? 最后:为什么不直接使用composer的自动加载器呢? - Elias Van Ootegem
@EliasVanOotegem 编辑 Laravel 核心文件是合理的吗?是的,它们处于同一级别。实际路径以前看起来像 script/bootstrap/autoload.php,但现在它们位于完全不同的路径中。最后,我正在使用 composer 的自动加载程序。 - 2hamed
1
如果它们在完全不同的路径中,请首先使用realpath(__DIR__)(它会解析符号链接),并且最好的方法是将当前路径添加到include path中,最好是在前面加上:$paths = explode(PATH_SEPARATOR, get_include_path()); array_unshift($thePath, $paths); set_include_path(implode(PATH_SEPARATOR, $paths));或类似的东西... - Elias Van Ootegem
你解决了吗?当__DIR__显示到不同目录(服务器上的其他域)时,我遇到了类似的问题,而且我不知道该如何解决它(realpath(__DIR__)可行,但在供应商文件中也使用了__DIR__,因此错误将转移到其他文件和行)。我没有看到任何符号链接,真的不知道为什么它不显示正常路径。 - nakut
很遗憾,@caburt,不行。我们不得不更换服务器。 - 2hamed
1
对于未来的陌生人 - 在我的情况下,原因是OPcache的错误/特性,它从同一服务器上的不同域加载文件,因为它具有相似的目录结构和文件名。只有通过关闭OPcache才能为我工作 https://bugs.php.net/bug.php?id=67481 - nakut
1个回答

0

所以我可能完全错了,但是有没有一个配置文件保存了它?或者在 script 目录中还有什么东西可能会导致这个问题?因为当 __DIR__ 输出正确的值时,其他代码也应该如此。


“script”目录已完全删除,项目文件被克隆到一个完全不同且独立的路径中。 - 2hamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接