У меня была та же проблема, и метод пользователя user76204 работал на меня, но вместо того, чтобы просто удалить /usr/lib/gio/modules libglib2.0-0
из файла /var/lib/dpkg/triggers/File
я должен был удалить все 3:
/usr/lib/x86_64-linux-gnu/gio/modules libglib2.0-0
/usr/lib/gio/modules libglib2.0-0
/usr/share/glib-2.0/schemas libglib2.0-0
я не знаю, удалось ли эта попытка вызвать проблемы в будущем, но мне передать обновление на данный момент
Я бы сказал, попробуйте десериализовать
это; -)
Цитата из руководства:
В случае, если переданная строка не unserializeable, возвращается FALSE и Выдается E_NOTICE.
Итак, вы должны проверить, является ли возвращаемое значение ложным
или нет (с ===
или ! ==
], чтобы убедиться, что у вас нет проблем с 0
или null
или чем-либо, что равно false
, я бы сказал) .
Просто обратите внимание: вам может понадобиться / понадобится использовать @ operator .
Например:
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Вы получите:
not ok
РЕДАКТИРОВАТЬ: О, и как сказал @Peter (спасибо ему!), вы можете столкнуться с проблемами, если попытаетесь десериализовать представление логического false: - (
Итак, проверка того, что ваша сериализованная строка не равна " b: 0;
"тоже может быть полезно; я полагаю, что-то вроде этого должно помочь:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
Тестирование этого особого случая перед попыткой десериализации было бы оптимизацией - но, вероятно, не очень полезно, если у вас не часто бывает ложное сериализованное значение.
Несмотря на превосходный ответ Паскаля МАРТИНА, мне было любопытно, можете ли вы подойти к этому по-другому, поэтому я сделал это просто как мысленное упражнение
<?php
ini_set( 'display_errors', 1 );
ini_set( 'track_errors', 1 );
error_reporting( E_ALL );
$valueToUnserialize = serialize( false );
//$valueToUnserialize = "a"; # uncomment this for another test
$unserialized = @unserialize( $valueToUnserialize );
if ( FALSE === $unserialized && isset( $php_errormsg ) && strpos( $php_errormsg, 'unserialize' ) !== FALSE )
{
echo 'Value could not be unserialized<br>';
echo $valueToUnserialize;
} else {
echo 'Value was unserialized!<br>';
var_dump( $unserialized );
}
И это действительно работает. Единственное предостережение: если у вас зарегистрированный обработчик ошибок, он, скорее всего, сломается из-за того, как работает $ php_errormsg .
$data = @unserialize($str);
if($data !== false || $str === 'b:0;')
echo 'ok';
else
echo "not ok";
Правильно обрабатывает случай сериализовать (ложь)
. :)