Last week I had the problem, that – due to a wrong database-entry – a serialized value got scrambled. And due to that (and some missconfiguration of the server) the application broke. Instead of a search result the user simply got an error message about not being able to unserialize the value due to an offset-error.
So how could I avoid the error (which actually is a notice) being thrown and besides that get to know whether unserializing worked or not?
The hack I finaly came up with is as follows:
- suppress the notice in any way
- check whether the returned value is a boolean false and the given string is ‘b:0;’ (which represents a boolean false in a serialized string).
- If so, the unserialize() failed, so lets throw an InvalidArgumentException
And here it is:
public function my_unserialize ( $value )
{
$unserialized = @unserialize ( $value );
if ( false === $unserialized && 'b:0;' !== $value ) {
$le = error_get_last ();
throw new InvalidArgumentException ( $le['message'] );
}
return $unserialized;
}
architectural daughtsman, brother, developer, father, husband, master of forestry sciences, scout

An alternative could be, to translate php errors into exceptions.
An Example for it could be found in the php manual http://www.php.net/manual/en/class.errorexception.php
Yes, that could be an alternative, when your environment allows translating all PHP-Errors into generic ErrorExceptions