php-fpm崩溃背后的原因是什么?

时间:2018-04-11 14:34:50

标签: php symfony

发生了一些非常奇怪的事情,花了我一段时间来弄清楚出了什么问题但是我能够做到这一点。

所以我有一个对象

class Client implements \Serializable{

    ....
    protected $name;
    protected $email;
    /**
    * @var string|null
    *
    */
    protected $color;
    ....

    public function serialize()
    {
        return serialize([
            $this->id,
            $this->email,
            $this->name
        ]);
    }
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->email,
            $this->name
            ) = unserialize($serialized);
    }
}

在某些时候我想将这个对象存储在会话中(使用symfony作为通知)所以在存储它之后显然我无法从$session->$client->getColor()检索颜色所以我只是将它添加到序列化中/ unserialize像这样的方法

    public function serialize()
    {
        return serialize([
            $this->id,
            $this->email,
            $this->name,
            $this->color
        ]);
    }
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->email,
            $this->name,
            $this->color
            ) = unserialize($serialized);
    }
}

刷新页面崩溃了php-fpm,它不会重新启动应用程序,直到我从方法中删除颜色。现在我试图注销重新添加颜色序列化/反序列化功能和sunddenly php-fpm再次崩溃!! 是什么导致了这种行为是因为会话从未重置过吗?如果是,那里到底发生了什么?

修改

在我注销后,php-fpm没有出现错误,添加代码然后再次登录。 php-fpm错误日志为空(idk为什么),导致崩溃的代码片段正好如下

$client = $this->get('session')->get('client');
$client->getColor();

,客户端在登录后直接设置在会话中

$clients = $user->getClients();
$this->get('session')->set('client',$clients->first());

这里是来自'var_dump($ client);'的客户端在添加颜色到序列化之前和

之后看起来像

object(\Model\Client)#226 (16) { ["id":protected]=> int(36) ["name":protected]=> string(9) "testcolor" ["email":protected]=> string(22) ["color":protected]=> NULL .... }

object(\Model\Client)#226 (16) { ["id":protected]=> int(36) ["name":protected]=> string(9) "testcolor" ["email":protected]=> string(22) ["color":protected]=> string(9) #000fff .... }

你可以看到颜色区域的差异。

最后一次:)错误只发生在我登录并更改了序列化函数,否则我将无法从客户端对象获取颜色,因为它没有在会话中被序列化所以它将为NULL

0 个答案:

没有答案