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




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

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

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

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


আমি এই কোড লিখতে না, এটা আসলে ওয়ার্ডপ্রেস থেকে। চিন্তা আমি আগ্রহী কেউ জন্য এটি অন্তর্ভুক্ত চাই, এটা 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