【发布时间】: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