【问题标题】:PHP / Composer cannot redeclarePHP / Composer 无法重新声明
【发布时间】:2014-06-15 23:09:09
【问题描述】:

我在我的开发环境中愉快地工作,突然我开始收到以下错误:

PHP 致命错误:无法在第 59 行的 [APP_ROOT]/vendor/composer/autoload_real.php 中重新声明 composerRequire7a368ac394ae1d2e857becf2a235ebaa()(之前在 [APP_ROOT]/vendor/composer/autoload_real.php:56 中声明)

我没有在作曲家依赖项中进行任何更改(尽管我认为我确实在那个时间范围内的某个地方做了composer update,但没有更改使用的依赖项/包,所以没有什么大的改变。

值得注意的是,当我在笔记本电脑上签出 repo 时,我没有收到此错误,但如果我 git clone 一个干净的 repo 然后 composer install 在我的主要开发机器上,我会收到此错误。所以我假设它必须有一些特定于机器的起源,但我对那可能是什么已经没有什么想法了。

任何帮助将不胜感激。

注意:我在 OSX 上运行 PHP 5.3.28;我的应用使用命名空间并且符合 PSR0


另外值得注意的是,我正在运行 PHPUnit 4.0.17,并且在尝试运行单元测试的最初阶段会触发错误(无论使用哪个单元测试)。这是堆栈跟踪:

0.0009     636648   1. {main}() [APP_BASE]/vendor/phpunit/phpunit/phpunit:0
0.0465    1423664   2. PHPUnit_TextUI_Command::main() [APP_BASE]/vendor/phpunit/phpunit/phpunit:54
0.0465    1424280   3. PHPUnit_TextUI_Command->run() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:132
0.0465    1424280   4. PHPUnit_TextUI_Command->handleArguments() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:141
0.0674    2123344   5. PHPUnit_TextUI_Command->handleBootstrap() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:638
0.0681    2139872   6. PHPUnit_Util_Fileloader::checkAndLoad() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:808
0.0681    2140008   7. PHPUnit_Util_Fileloader::load() [APP_BASE]/vendor/phpunit/phpunit/src/Util/Fileloader.php:77
0.0774    2144176   8. include_once('[APP_BASE]/tests/test-loader.php') [APP_BASE]/vendor/phpunit/phpunit/src/Util/Fileloader.php:93
0.0775    2146736   9. include('[APP_BASE]/vendor/autoload.php') [APP_BASE]/tests/test-loader.php:2

【问题讨论】:

  • 那么autoload_real 第 56 行和第 59 行是什么?
  • 这只是作曲家的默认自动加载文件......我认为你的会和我的一样,但如果不是......第 56 行是函数定义 function composerRequireb319f8584bff24b05e527f91a6f7f8bf($file),第 59 行是此函数的右括号,其中函数的唯一行是要求传入的文件。
  • 那么请把它放在pastebin.com上。并确保您查看的是正确的文件 - 我几乎不怀疑右括号可能会导致这样的问题。
  • 检查哪些代码加载了autoload_real.php文件。它必须只运行一次,而您的代码会运行多次

标签: php composer-php


【解决方案1】:

删除composer.lockvendor/ 并再次运行composer update

【讨论】:

    【解决方案2】:

    当我复制现有项目目录并尝试在新目录上运行 phpunit 时,我遇到了这个问题。最后发现当我执行 phpunit 时,它已经用完了旧目录。我跑了这个:

    哪个phpunit

    并看到它是从我的作曲家供应商目录中运行的:

    /home/vagrant/Code/MYOLDPROJECT/api/vendor/bin/phpunit

    我从新目录运行phpunit,问题就消失了:

    /home/vagrant/Code/mynewproject/api/vendor/bin/phpunit

    【讨论】:

    • 很高兴你把它整理出来。对我来说,问题是不同的,但时间已经过去了,恐怕我记不清细节了。
    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多