php - সকল - ট্যাগ কাকে বলে




একটি স্ট্রিং serialized হয় কিনা দেখতে চেক করুন? (8)

Serialize () ফাংশনের ফলাফল / আউটপুট কোন স্ট্রিং কিনা তা নির্ধারণ করার সেরা উপায় কী?


Pascal মার্টিন এর প্রতিক্রিয়া অপ্টিমাইজ করা

/**
 * Check if a string is serialized
 * @param string $string
 */
public static function is_serial($string) {
    return (@unserialize($string) !== false);
}

আমি এই কোড লিখতে না, এটা আসলে ওয়ার্ডপ্রেস থেকে। চিন্তা আমি আগ্রহী কেউ জন্য এটি অন্তর্ভুক্ত চাই, এটা overkill হতে পারে কিন্তু এটি কাজ করে :)

<?php
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;
    if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
        return false;
    switch ( $badions[1] ) {
        case 'a' :
        case 'O' :
        case 's' :
            if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
                return true;
            break;
        case 'b' :
        case 'i' :
        case 'd' :
            if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
                return true;
            break;
    }
    return false;
}

এই আমার জন্য জরিমানা কাজ করে

<?php

function is_serialized($data){
    return (is_string($data) && preg_match("#^((N;)|((a|O|s):[0-9]+:.*[;}])|((b|i|d):[0-9.E-]+;))$#um", $data));
    }

?>

একটি ফাংশন নির্মাণ

function isSerialized($value)
{
   return preg_match('^([adObis]:|N;)^', $value);
}

পাসকাল মার্টিনের চমৎকার উত্তর সত্ত্বেও, আমি যদি অন্য কোন উপায়ে যোগাযোগ করতে পারতাম তবে আমি অদ্ভুত ছিলাম, তাই আমি মানসিক ব্যায়ামের মতোই এটি করেছি।

<?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 );
}

এবং এটা আসলে কাজ করে। শুধুমাত্র phav_errormsg কীভাবে $ php_errormsg কাজ করে তার জন্য একটি নিবন্ধিত ত্রুটি হ্যান্ডলার আছে যদি এটি সম্ভবত বিরতি হবে।


যদি $ স্ট্রিং একটি সিরিয়ালাইজড false মান হয়, অর্থাত $string = 'b:0;' SoN9ne এর ফাংশন false ফেরত, এটা ভুল

তাই ফাংশন হবে

/**
 * Check if a string is serialized
 * @param string $string
 */
public static function is_serial($string) {
    return (@unserialize($string) !== false || $string == 'b:0;');
}

/**
 * some people will look down on this little puppy
 */
function isSerialized($s){
if(
    stristr($s, '{' ) != false &&
    stristr($s, '}' ) != false &&
    stristr($s, ';' ) != false &&
    stristr($s, ':' ) != false
    ){
    return true;
}else{
    return false;
}

}

$data = @unserialize($str);
if($data !== false || $str === 'b:0;')
    echo 'ok';
else
    echo "not ok";

সঠিকভাবে serialize(false) ক্ষেত্রে পরিচালনা করে। :)





serialization