2017-09-02 11 views

答えて

1

エラーをSUPRESSしようとする必要はありませんので、私はこれが好き:

/** 
* Check value to find if it is serialized data. 
* 
* Function borrowed from Wordpress. 
* 
* @param mixed $data Value to check to see if was serialized. 
* @return bool False if not serialized and true if it was. 
*/ 
function is_serialized($data) { 
    // if it isn't a string, it isn't serialized 
    if (! is_string($data)) 
     return false; 
    $data = trim($data); 
    if ('N;' == $data) 
     return true; 
    $length = strlen($data); 
    if ($length < 4) 
     return false; 
    if (':' !== $data[1]) 
     return false; 
    $lastc = $data[$length-1]; 
    if (';' !== $lastc && '}' !== $lastc) 
     return false; 
    $token = $data[0]; 
    switch ($token) { 
     case 's' : 
      if ('"' !== $data[$length-2]) 
       return false; 
     case 'a' : 
     case 'O' : 
      return (bool) preg_match("/^{$token}:[0-9]+:/s", $data); 
     case 'b' : 
     case 'i' : 
     case 'd' : 
      return (bool) preg_match("/^{$token}:[0-9.E-]+;\$/", $data); 
    } 
    return false; 
} 

$string = "a:1:{s:19:\"is_featured_service\";b:0;}"; 

$x = is_serialized($string) 
    ? unserialize($string) 
    : 'Some default value'; 
1

あなたがやるように、それが思われる、エラーに対処したくない場合、私は唯一の@を続けるだろう。次に、それを小さくするためにそれを3進数に変更してください:

$unserialized_string = @unserialize($string) ?: 'another value'; 
関連する問題