【问题标题】:Php fatal error on installing composer from project从项目安装作曲家时出现 PHP 致命错误
【发布时间】:2017-06-22 22:27:49
【问题描述】:

这是发生的致命错误消息:

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-install-cmd event terminated with an exception


  [RuntimeException]                                                           
  An error occurred when executing the "'cache:clear --no-warmup'" command:    
  PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\ContextErrorEx  
  ception: Warning: Declaration of Snc\RedisBundle\Client\Phpredis\Client::ge  
  t() should be compatible with Redis::get($key) in /home/PRIVATE/Prop/ve  
  ndor/snc/redis-bundle/Client/Phpredis/Client.php:1389                        
  Stack trace:                                                                 
  #0 /home/PRIVATE/Prop/vendor/symfony/symfony/src/Symfony/Component/Debu  
  g/DebugClassLoader.php(169): Symfony\Component\Debug\ErrorHandler->handleEr  
  ror(2, 'Declaration of ...', '/home/nienormal...', 1389, Array)              
  #1 /home/PRIVATE/Prop/vendor/symfony/symfony/src/Symfony/Component/Debu  
  g/DebugClassLoader.php(169): require_once()                                  
  #2 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass  
  ('Snc\\RedisBundle...')                                                      
  #3 /home/PRIVATE/Prop/app/cache/dev/appDevDebugProjectContainer.php(577  
  0): spl_autoload_call('Snc\\RedisBundle...')                                 
  #4 /home/PRIVATE/Prop/vendor/symfony/symfony/src/Symfony/Component/Depe  
  ndencyInjection/Container.php(314): appDevDebugProjectContainer->getSncRedi  
  s_CacheService()                                                             
  #5 /home/PRIVATE/Prop/app/c in /home/PRIVATE/Prop/vendor/snc/redis-  
  bundle/Client/Phpredis/Client.php on line 1389 

这个项目是从git克隆出来的,从composer install安装包后出现这个错误。

我想在 Ubuntu 平台上运行项目,但我对这个 thema 完全陌生。

抱歉我的英语不好,但也许有人会帮助我用这个黑魔法。

【问题讨论】:

  • 请提供更多信息,说明您克隆了哪些项目,运行了哪些命令,以便我们重现问题并帮助您解决。
  • 这是一个有很多 bundle 的 symfony 项目。我使用 git@git.private... 来克隆它。在项目中克隆后是 composer.json 文件以在其中安装所有捆绑包。在 gitlab 项目上有一些关于安装的信息,例如 npm、bower、composer、grunt、redis git 和 PHP: - php-mcrypt - php-intl - php-pdo-pgsql - php-redis 我不确定我是否做了所有事情很好。

标签: php symfony redis composer-php


【解决方案1】:

升级到 php-redis 3.1.4RC 后我遇到了同样的错误。看起来像BC breaking feature was introduced

对于ondrejubuntu 仓库

cd /tmp
wget https://launchpad.net/~ondrej/+archive/ubuntu/php/+build/12376478/+files/php-redis_3.1.2-1+deb.sury.org~trusty+1_amd64.deb
sudo dpkg -i php-redis_3.1.2-1+deb.sury.org~trusty+1_amd64.deb

【讨论】:

  • 我可以确认 3.1.4RC 引入了 BC 中断。关于如何降级的任何建议?在 Ubuntu 上。
【解决方案2】:

您遇到的错误似乎不是与作曲家的链接,而是与您 Symfony 应用程序中的 RedisBundle 的链接。

查看此消息: Uncaught Symfony\Component\Debug\Exception\ContextErrorException: Warning: Declaration of Snc\RedisBundle\Client\Phpredis\Client::get() should be compatible with Redis::get($key) in /home/PRIVATE/Prop/vendor/snc/redis-bundle/Client/Phpredis/Client.php:1389

显然你有一个Client 类:在Snc\RedisBundle\Client\Phpredis\Client.php 中,它从Redis 继承/home/PRIVATE/Prop/vendor/snc/redis-bundle/Client/Phpredis/Client.php。 由于是继承,所以两个方法应该有相同的签名。

所以改变你的方法Client::get() -> Client::get($key) 即使你不使用$key 参数。 它应该可以正常工作。

【讨论】:

  • 好的,我会在我在家的时候测试它。感谢蒂博的回答
【解决方案3】:

您可以从source 安装 phpredis 3.1.2。只需克隆一个 repo,切换到标签 3.1.2 并运行:

phpize
./configure
make && make install

然后在扩展的ini文件中更新redis.so的路径。重新加载 PHP

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2021-03-22
    • 2016-08-07
    • 1970-01-01
    • 2019-11-28
    • 2014-10-06
    • 2013-09-07
    • 2021-08-07
    相关资源
    最近更新 更多