2

Please teach in order to solve the problem.

cd /vagrant
sudo php bin/magento setup:upgrade
sudo php bin/magento setup:di:compile
sudo php bin/magento setup:static-content:deploy
sudo php bin/magento setup:static-content:deploy ja_JP
sudo php bin/magento cache:flush;
sudo php bin/magento cache:clean
sudo php bin/magento indexer:reindex
sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
sudo chown -R :www-data .
sudo chmod u+x bin/magento

1 exception(s): Exception #0 (InvalidArgumentException): Unable to serialize value.

Exception #0 (InvalidArgumentException): Unable to serialize value.
#0 /vagrant/vendor/magento/framework/App/PageCache/Kernel.php(153):

Magento\Framework\Serialize\Serializer\Json->serialize(Array) #1 /vagrant/vendor/magento/module-page-cache/Model/Controller/Result/BuiltinPlugin.php(96): Magento\Framework\App\PageCache\Kernel->process(Object(Magento\Framework\App\Response\Http\Interceptor)) #2 /vagrant/vendor/magento/framework/Interception/Interceptor.php(146): Magento\PageCache\Model\Controller\Result\BuiltinPlugin->afterRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Magento\Framework\View\Result\Page\Interceptor), Object(Magento\Framework\App\Response\Http\Interceptor)) #3 /vagrant/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Response\Http\Interceptor)) #4 /vagrant/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(26): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array) #5 /vagrant/vendor/magento/framework/App/Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor)) #6 /vagrant/vendor/magento/framework/App/Bootstrap.php(257): Magento\Framework\App\Http->launch() #7 /vagrant/pub/index.php(37): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor)) #8 {main}

asked Mar 5, 2019 at 8:27
5
  • post code that is getting the error Commented Mar 5, 2019 at 8:27
  • have you cleared the caches? Commented Mar 5, 2019 at 8:28
  • Yes, I deleted the cache. Commented Mar 5, 2019 at 8:31
  • Please follow @Ronak Rathod's answer. It will solve your problem. Commented Mar 5, 2019 at 8:35
  • I followed Ronak Rathod's answer, but the problem is not solved. We still need help. Commented Mar 5, 2019 at 8:53

3 Answers 3

2

The problem is in /vendor/magento/framework/Serialize/Serializer/Json.php there is a function unserialize($string)

There is a workaround - you can check if string is serialized and then use serialize($string). Change unserialize to:

public function unserialize($string)
{
 /* Workaround: serialize first if is serialized */
 if($this->is_serialized($string))
 {
 $string = $this->serialize($string);
 }
 $result = json_decode($string, true);
 if (json_last_error() !== JSON_ERROR_NONE) {
 throw new \InvalidArgumentException('Unable to unserialize value.');
 }
 return $result;
}

and add function to check if string is serialized:

function is_serialized($value, &$result = null)
{
 // Bit of a give away this one
 if (!is_string($value))
 {
 return false;
 }
 // Serialized false, return true. unserialize() returns false on an
 // invalid string or it could return false if the string is serialized
 // false, eliminate that possibility.
 if ($value === 'b:0;')
 {
 $result = false;
 return true;
 }
 $length = strlen($value);
 $end = '';
 switch ($value[0])
 {
 case 's':
 if ($value[$length - 2] !== '"')
 {
 return false;
 }
 case 'b':
 case 'i':
 case 'd':
 // This looks odd but it is quicker than isset()ing
 $end .= ';';
 case 'a':
 case 'O':
 $end .= '}';
 if ($value[1] !== ':')
 {
 return false;
 }
 switch ($value[2])
 {
 case 0:
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 case 6:
 case 7:
 case 8:
 case 9:
 break;
 default:
 return false;
 }
 case 'N':
 $end .= ';';
 if ($value[$length - 1] !== $end[0])
 {
 return false;
 }
 break;
 default:
 return false;
 }
 if (($result = @unserialize($value)) === false)
 {
 $result = null;
 return false;
 }
 return true;
}
answered Mar 5, 2019 at 8:31
1
  • error is throwed in serialize() function, not unserialize(), so your code has no effect Commented Mar 30, 2020 at 6:28
2

Please remove var cache as sudo rm -rf var/cache var/page_cache. It works for me.

answered Jun 29, 2019 at 22:59
1

Please add more description when submiting a Question , when this error showed up and for what reason ?

Possible solutions:

  • Clear redis cache :

    redis-cli flushall

  • Permissions issue , need to set the umask :

Follow this link

Check this link for more info link

answered Mar 5, 2019 at 8:36
11
  • Could you tell me the command by example? Commented Mar 5, 2019 at 9:01
  • What command do you want to know? Commented Mar 5, 2019 at 9:03
  • Move to the root directory and run "echo 077 > magento_umask"? Commented Mar 5, 2019 at 9:05
  • Better run this command : " echo 022 > magento_umask " Commented Mar 5, 2019 at 9:19
  • I confirmed that "echo 022> magento_umask" file was created and the setting was written. I logged in to the administrator screen and confirmed the front end, but the problem was not solved. Commented Mar 5, 2019 at 9:22

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.