致命错误:类Symfony \ Component \ HttpFoundation \ Session \ Storage \ Proxy \ SessionHandlerProxy包含1个抽象方法...(Symfony2.8 / PHP7)

时间:2017-07-24 15:19:29

标签: php-7 symfony-2.8 wamp3

几个月前,我们将公司内部网从Symfony 2.3升级到Symfony 2.8,从PHP 5.6升级到7.0.10。 然后,我们遇到了很多"致命错误"由于循环引用可以被删除"通过重启Wampserver。 我读到这可能是因为将一些参数传递给服务。我通过传递和设置仅属性容器来纠正这一点,即使我不相信这是一个好习惯。 我还读到它可能是因为opcache,所以我禁用了它。

之后,我们不再有这个问题了。但是,因为两个星期新的"致命错误"随机出现:

PHP Fatal error:  Class Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (SessionHandlerInterface::open) in C:\wamp\www\symfony\app\cache\prod\classes.php on line 393

PHP Fatal error:  Class Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (SessionHandlerInterface::read) in C:\wamp\www\symfony\app\cache\prod\classes.php on line 393

我们只需重新启动服务器即可运行。我看到很多人都有类似的错误,但我找不到任何真正的解决方案。我不知道它是否是PHP错误,或者它是否是由于Symfony 2.8 - PHP7不兼容,尽管Symfony achieves 100% PHP7 compatibility或者我们的代码中有错误。

我将尝试知道在Intranet上执行特定操作后是否出现此错误。

我希望我的问题有所不同,有人会找到解决方案。如果我忘了某些东西,或者你想看到另一部分代码说我!

我的配置:

  • Windows Server 2008 R2

  • WampServer 3.0.6:

    • Apache 2.4.23
    • PHP 7.0.10
    • MySQL:5.7.14
  • Symfony:2.8.25

  • 作曲家:

    Composer version 1.5-dev (b07b4c3428a57b68e385ae3db0474e6c5400789b) 2017-04-28 09:25:51
    

composer.json

{
    "name": "symfony/framework-standard-edition",
    "license": "MIT",
    "type": "project",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-4": { "": "src/" },
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
    },
    "require": {
        "php": ">=5.3.9",
        "symfony/symfony": "2.8.*",
        "doctrine/orm": "^2.4.8",
        "doctrine/doctrine-bundle": "~1.4",
        "symfony/swiftmailer-bundle": "~2.3,>=2.3.10",
        "symfony/monolog-bundle": "^3.0.2",
        "sensio/distribution-bundle": "~5.0",
        "sensio/framework-extra-bundle": "^3.0.2",
        "incenteev/composer-parameter-handler": "~2.0",
        "friendsofsymfony/user-bundle": "v2.0.0-beta2",
        "friendsofsymfony/jsrouting-bundle": "dev-master",
        "liuggio/ExcelBundle": "2.0.*@dev",
        "knplabs/knp-snappy-bundle": "dev-master",
        "h4cc/wkhtmltopdf-amd64": "0.11.0-RC1",
        "symfony/intl": "^2.8",
        "symfony/property-access": "^3.2",
        "symfony/assetic-bundle": "^2.8"
    },
    "require-dev": {
        "sensio/generator-bundle": "~3.0",
        "escapestudios/symfony2-coding-standard": "~2.0"
    },
    "scripts": {
        "symfony-scripts": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
        ],
        "post-install-cmd": [
            "@symfony-scripts"
        ],
        "post-update-cmd": [
            "@symfony-scripts"
        ],
        "build-params": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
          ]
    },
    "config": {
        "bin-dir": "bin",
        "platform": {
            "php": "7.0.10"
        }
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "symfony-assets-install": "relative",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "branch-alias": {
            "dev-master": "2.8-dev"
        }
    }
}

作曲家秀

composer/ca-bundle                     1.0.7
doctrine/annotations                   v1.4.0
doctrine/cache                         v1.6.1
doctrine/collections                   v1.4.0
doctrine/common                        v2.7.2
doctrine/dbal                          v2.5.12
doctrine/doctrine-bundle               1.6.8
doctrine/doctrine-cache-bundle         1.3.0
doctrine/inflector                     v1.1.0
doctrine/instantiator                  1.0.5
doctrine/lexer                         v1.0.1
doctrine/orm                           v2.5.6
escapestudios/symfony2-coding-standard 2.11.0
friendsofsymfony/jsrouting-bundle      dev-master 31462ad
friendsofsymfony/user-bundle           2.0.0-beta2
h4cc/wkhtmltopdf-amd64                 0.11.0-RC1
incenteev/composer-parameter-handler   v2.1.2
ircmaxell/password-compat              v1.0.4
jdorn/sql-formatter                    v1.2.17
knplabs/knp-snappy                     v0.5.0
knplabs/knp-snappy-bundle              dev-master 40b780f
kriswallsmith/assetic                  v1.4.0
liuggio/ExcelBundle                    dev-master a028c00
monolog/monolog                        1.23.0
paragonie/random_compat                v2.0.10
phpoffice/phpexcel                     1.8.1
psr/log                                1.0.2
sensio/distribution-bundle             v5.0.20
sensio/framework-extra-bundle          v3.0.26
sensio/generator-bundle                v3.1.6
sensiolabs/security-checker            v4.0.4
squizlabs/php_codesniffer              2.9.1
swiftmailer/swiftmailer                v5.4.8
symfony/assetic-bundle                 v2.8.2
symfony/inflector                      v3.3.5
symfony/monolog-bundle                 v3.1.0
symfony/polyfill-apcu                  v1.4.0
symfony/polyfill-intl-icu              v1.4.0
symfony/polyfill-mbstring              v1.4.0
symfony/polyfill-php54                 v1.4.0
symfony/polyfill-php55                 v1.4.0
symfony/polyfill-php56                 v1.4.0
symfony/polyfill-php70                 v1.4.0
symfony/polyfill-util                  v1.4.0
symfony/property-access                v3.3.5
symfony/security-acl                   v3.0.0
symfony/swiftmailer-bundle             v2.6.2
symfony/symfony                        v2.8.25
twig/twig                              v2.4.3
willdurand/jsonp-callback-validator    v1.1.0

编辑

这个问题刚刚被重现,我在打开内联网时看到了它,所以我不知道它在打开之前或之时是否崩溃了。 Symfony的prod.log中没有日志,但是在wamp的php_error.log中,有两个错误:

  

[2017年7月31日15:22:30欧洲/巴黎] PHP警告:    session_regenerate_id():会话对象销毁失败。 ID:用户   (路径:C:\ wamp \ www \ symfony \ app / sessions) in   第156行的C:\ wamp \ www \ symfony \ app \ cache \ prod \ classes.php

     

[2017年7月31日15:22:30欧洲/巴黎] PHP Stack跟踪:

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 1. {main}()   C:\瓦帕\ WWW \ symfony的\网络\ app.php:0

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 2。   的Symfony \组件\ HttpKernel \内核级>手柄()   C:\瓦帕\ WWW \ symfony的\网络\ app.php:16

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 3。   的Symfony \组件\ HttpKernel \ DependencyInjection \ ContainerAwareHttpKernel->手柄()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ Kernel.php:185

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 4。   的Symfony \组件\ HttpKernel \ HttpKernel->手柄()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ DependencyInjection \ ContainerAwareHttpKernel.php:69

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 5。   的Symfony \组件\ HttpKernel \ HttpKernel-> handleRaw()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ HttpKernel.php:64

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 6。   的Symfony \组件\此事件\ EventDispatcher->调度()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ HttpKernel.php:125

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 7。   的Symfony \组件\此事件\ EventDispatcher-> doDispatch()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:1779

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 8。   call_user_func:{C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:1864}()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:1864

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 9。   的Symfony \组件\安全\ HTTP \防火墙 - > onKernelRequest()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:1864

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 10。   的Symfony \组件\安全\ HTTP \防火墙\ LogoutListener->手柄()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:2635

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 11。   的Symfony \组件\安全\ HTTP \注销\ SessionLogoutHandler->注销()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\安全\ HTTP \防火墙\ LogoutListener.php:127

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 12。   的Symfony \组件\ HttpFoundation \会话\会话而>无效()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\安全\ HTTP \注销\ SessionLogoutHandler.php:34

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 13。   的Symfony \组件\ HttpFoundation \会话\会话而>迁移()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:529

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 14。   的Symfony \组件\ HttpFoundation \会话\存储\ NativeSessionStorage->再生()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:533

     

[2017年7月31日15:22:30欧洲/巴黎] PHP 15. session_regenerate_id()   C:\瓦帕\ WWW \ symfony的\应用\缓存\ PROD \ classes.php:156

并且

  

[2017年7月31日15:30:50欧洲/巴黎] PHP致命错误:等级   的的Symfony \元器件\ HttpFoundation \会话\存储\代理\ SessionHandlerProxy   包含3个抽象方法,因此必须声明为abstract或   实现其余方法(SessionHandlerInterface :: open,   SessionHandlerInterface :: close,SessionHandlerInterface :: write) in   第393行的C:\ wamp \ www \ symfony \ app \ cache \ prod \ classes.php

     

[2017年7月31日15:30:50欧洲/巴黎] PHP Stack跟踪:

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 1. {main}()   C:\瓦帕\ WWW \ symfony的\网络\ app.php:0

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 2。   的Symfony \组件\ HttpKernel \内核级>手柄()   C:\瓦帕\ WWW \ symfony的\网络\ app.php:16

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 3。   的Symfony \组件\ HttpKernel \内核级>引导()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ Kernel.php:182

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 4。   的Symfony \组件\ HttpKernel \内核级> doLoadClassCache()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ Kernel.php:126

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 5。   的Symfony \组件\类加载器\ ClassCollectionLoader ::负载()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ HttpKernel \ Kernel.php:411

     

[2017年7月31日15:30:50欧洲/巴黎] PHP 6. require_once()   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\类加载器\ ClassCollectionLoader.php:96

编辑2

Arf,2个循环引用再次出现:

  

[2017-08-01 15:41:00] request.CRITICAL:处理时抛出异常   例外   的(Symfony的\元器件\ DependencyInjection \异常\ ServiceCircularReferenceException:   检测到服务的循环引用"会话",路径:"会话 - >    session.storage.native - > twig.controller.exception - >树枝 - >   的 security.csrf.token_manager" 即可。在   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ DependencyInjection \ Container.php   第281行{"例外":" [对象]   (Symfony的\元器件\ DependencyInjection \异常\ ServiceCircularReferenceException(代码:   0):为service \" session \",path检测到循环引用:   \"会话 - > session.storage.native - > twig.controller.exception - >   树枝 - > security.csrf.token_manager \&#34 ;.在   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ DependencyInjection \ Container.php:281)"}   []

     

[2017-08-01 15:43:04] request.CRITICAL:处理时抛出异常   例外   的(Symfony的\元器件\ DependencyInjection \异常\ ServiceCircularReferenceException:   检测到服务的循环引用   " fos_user.user_provider.username",路径:   " security.firewall.map.context.main - >    security.authentication.rememberme.services.simplehash.main - >    fos_user.user_provider.username - > fos_user.user_manager - >    twig.controller.exception - >树枝 - > security.authorization_checker - >   的 security.authentication.manager" 即可。在   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ DependencyInjection \ Container.php   第281行{"例外":" [对象]   (Symfony的\元器件\ DependencyInjection \异常\ ServiceCircularReferenceException(代码:   0):检测到服务的循环引用   \" fos_user.user_provider.username \",路径:   \" security.firewall.map.context.main - >   security.authentication.rememberme.services.simplehash.main - >   fos_user.user_provider.username - > fos_user.user_manager - >   twig.controller.exception - >树枝 - > security.authorization_checker - >   security.authentication.manager \&#34 ;.在   C:\瓦帕\ WWW \ symfony的\厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ DependencyInjection \ Container.php:281)"}   []

1 个答案:

答案 0 :(得分:0)

我们使用codeignaiter和PHP 7.1.X遇到了同样的问题 我认为该错误与opcache(here!)扩展错误有关。

重新启动apache后,没有发生错误。

我已升级到php 7.2,问题不再发生了。

注意:对不起我的英语水平,我希望我帮助