我一直在尝试安装使用 Laravel 框架构建的 Web 应用程序。该应用程序托管为 GIT 存储库。
以下是我的问题详细描述,以澄清我面临的情况。
第一次克隆存储库时,我将其克隆到以下路径:
/var/www/app.example.com/script/
然后创建了一个符号链接到它的 public 目录,如下所示,以遵循我的服务器 nginx 路由约定:
但我决定将所有内容移出`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__`,它会打印出正确的路径,但在其下一行中使用它时,它会有错误的旧路径。
我希望我的描述足够清晰,避免任何混淆和可能的踩低票。
以下是我的问题详细描述,以澄清我面临的情况。
第一次克隆存储库时,我将其克隆到以下路径:
/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__`,它会打印出正确的路径,但在其下一行中使用它时,它会有错误的旧路径。
我希望我的描述足够清晰,避免任何混淆和可能的踩低票。
realpath(__DIR__)
而不是使用魔术常量... 另外:script/public / .. / bootstrap/
是否正确?我的意思是:引导程序确实与public
处于同一级别吗? 实际路径是否看起来像这样:script/bootstrap/autoload.php
? 最后:为什么不直接使用composer的自动加载器呢? - Elias Van Ootegemscript/bootstrap/autoload.php
,但现在它们位于完全不同的路径中。最后,我正在使用 composer 的自动加载程序。 - 2hamedrealpath(__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