4

PHP で unserialize を使用する場合、変数を unserialize できない潜在的な状況を処理する最も安全な方法は何ですか?

たとえば(例として、これまでにそうするつもりはありません):

$myVar = true;

$result = unserialize($myVar);

これは false を返しますが、これで問題ありません。しかし、それはまた厄介な通知を投げかけます。

私は次のことを行ってきました:

$result = @unserialize($myVar);

ハッキーな感じです。falseの可能性がある場合にシリアル化を解除する最良の方法は何ですか

4

1 に答える 1

2

try / catch でエラー ハンドラを使用できます。

set_error_handler('exceptions_error_handler');
function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}
$string = 'bob';
try {
   $result = unserialize($string);
} catch (Exception $e) {
   echo 'Caught exception: ',  $e->getMessage(), "\n";
}
if(isset($result)) {
    //Continue code for valid serialized array here
}
于 2012-12-20T21:49:41.257 に答える