首页 > 解决方案 > 为什么不能在同一行中解码和反序列化?(像这个例子)

问题描述

为什么这是不可能的?

$b64_encoded = base64_encode(serialize(array('test')));

if( $b64_decoded = base64_decode($b64_encoded) && $unserialized = unserialize($b64_decoded) )
{
    var_dump($unserialized);
}

标签: phpserializationbase64

解决方案


你可以。

发生的事情是 PHP 将$b64_decoded其视为未定义和未设置的变量,因为您将其绑定在 if 语句中而没有正确拆分它。

看到这个:

if( $b64_decoded = base64_decode($b64_encoded) && $unserialized = unserialize($b64_decoded) )

PHP&&认为=. 您的代码有效地是;

$b64_decoded = (base64_decode($b64_encoded) && $unserialized) = unserialize($b64_decoded)

这似乎没有任何逻辑意义。

因此,我们必须告诉 PHP 操作的优先级以及将哪些项目组合在一起。我们可以通过包装我们的语句来做到这一点( )

比如这样:

if( ($b64_decoded = base64_decode($b64_encoded)) && $unserialized = unserialize($b64_decoded) )
    ^                                          ^

PHP 现在可以理解您指定的语句的优先级。


推荐阅读