【问题标题】:Composer returning mysterious error作曲家返回神秘错误
【发布时间】:2015-12-02 23:24:37
【问题描述】:

不幸的是,我不知道我到底做了什么导致这个错误在我运行时开始出现

composer update

从命令行。我相信它是在将 laracasts/integrated 添加到我的 composer.json 之后发生的,但很难相信这是问题所在。我确实尝试删除 laracasts/integrated 并且问题仍然存在。这是我得到的确切错误:

$ composer update
> php artisan clear-compiled

  [ErrorException]
  Undefined index: REQUEST_URI

Script php artisan clear-compiled handling the pre-update-cmd event returned with an error

  [RuntimeException]
  Error Output:

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--] [<packages>]...

谷歌搜索后,似乎可能删除了 composer.lock 文件并运行

 composer install 

可能会解决问题,但这对我不起作用。我发现了无数类似的问题,但没有一个与我得到的确切错误相符,所以我希望对这些类型的错误非常熟悉的人可以帮助我调试它。

据我所知,

 php artisan clear-compiled

导致此错误,但我真的不熟悉如何调试此类问题。

谢谢。

【问题讨论】:

  • 备份您的项目,然后删除供应商目录,再次抛出composer update。如果它不起作用,也许将您的代码移动到全新安装的 laravel 可能会有所帮助。
  • 我的项目在 Git/GitHub 中受版本控制,所以应该不会太难。
  • 尝试手动删除 bootstrap/cache/compiled.php
  • @Ben 感谢您的建议,但实际上我在项目中的任何地方都没有看到名为compiled.php 的文件。该文件夹包含一个 .gitignore 文件和一个 services.json 文件?
  • @Tezla 我尝试将我的项目克隆到一个新文件夹中。当我运行 composer update 时,它​​会给出相同的错误并且不会生成供应商文件夹。运行 composer install 会在完成后生成一个带有与上述相同错误消息的供应商文件夹。

标签: php laravel composer-php laravel-5.1


【解决方案1】:

Artisan 启动与应用程序的 HTTP 版本等效的命令行。基于这个错误,您可能有一个服务提供者(或其他一些可引导类)试图访问 $_SERVER 数组,当通过命令行运行时显然不会有 REQUEST_URI。

检查您的提供商。如果这不能解决问题,请搜索/grep 查找 REQUEST_URI 以找出哪个类正在尝试使用它。

【讨论】:

  • 感谢您的想法 - 我在供应商文件夹中搜索 REQUEST_URI 并没有发现任何让我觉得不合适的东西。您能否详细说明我如何才能继续搜索此未定义索引的来源?
  • 您是否只搜索您的供应商文件夹?你是否编写过任何中间件或服务提供者,或编辑过任何打包的 Laravel 基类? /app 文件夹是一个很好的起点。
  • 我确实有一些中间件和服务提供商。似乎这个问题是在我添加一些单元测试时开始的 - 事实上,它可能是我尝试从命令行拉入 laracasts/integrated(使用 cygwin)
  • 啊,我相信你是正确的@Trip - 我在我的服务提供商中使用 $_SERVER['REQUEST_URI'] 。你对我可以使用什么有什么建议吗?代码有效 - 所以作曲家不喜欢它真的很令人沮丧。
  • 不是作曲家不喜欢它。 Laravel 的 composer.json 文件告诉 composer 执行该工匠命令。你可以从“post-update-cmd”部分删除它,但是你会错过 Laravel 如何工作的一个重要部分。您可能可以为 URI 使用“安全”getter 来完成同样的事情。您的答案将类似于此处接受的答案:stackoverflow.com/questions/31500988/…
【解决方案2】:

我也有类似的错误。 (见下文)

Writing lock file
Generating autoload files
> php artisan clear-compiled
[ErrorException]
Undefined index: HTTP_HOST

Script php artisan clear-compiled handling the post-update-cmd event returned with error code 1

我确实 grep 了整个源代码,终于找到了错误的原因。

我需要使用比 PHP 的方法更安全的方法。

  • 来源

    /app/Http/routes.php

  • 差异

    (之前)$_SERVER['HTTP_HOST']

    (之后)请求::服务器('HTTP_HOST')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2017-04-20
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2016-02-28
    相关资源
    最近更新 更多