is_serialized() WP 2.0.5

Перевіряє передане значення, чи воно є серіалізованим рядком.

Якщо передане значення не рядок, то функція завжди повертатиме false . Тому що серіалізовані дані – це завжди рядок.

Чи не перевіряє правильність серіалізації, тобто. якщо рядок зіпсований зіпсована, то функція все одно визначить її як серіалізований рядок.

Основа для:
maybe_serialize() ,
maybe_unserialize()
1 раз – 0.000011 сек
(дуже швидко) | 50000 разів – 0.04 сек
(швидкість світла) |
PHP 7.0.8, WP 4.6.1

Хуків немає.

Повертає

true|false.
true – переданий рядок є серіалізованими даними.
false – передано щось не серіалізоване.

Використання

is_serialized( $data, $strict );
$data
(рядок) (обов’язковий)
Значення, яке потрібно перевірити, чи є серіалізованими даними.
$strict
(логічний)
Точна перевірка для кінця рядка. При true рядок завжди повинен закінчуватися на символ
; або
} .


Типово: true

Приклади

0

#1 Демонстрація перевірки чи серіалізований рядок

Припустимо, у нас є серіалізований рядок з такого масиву:array( 'foo'=>'bar' );

is_serialized( 'a:1:{s:3:"foo";s:3:"bar";}' ); //> true

// не перевіряє правильність серіалізації
is_serialized( 'a:1:{s:3:"foo";s:3:"bar";' ); //> true

// не серіалізовані дані
is_serialized( 'привіт світ'); //> false

is_serialized( array('foo') ); //> false

список змін

З версії 2.0.5Введено.

Код is_serialized() WP 6.0.2

function is_serialized( $data, $strict = true ) {
	// 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 ( strlen ( $ data ) < 4 ) {
		return false;
	}
	if ( ':' !== $data[1] ) {
		return false;
	}
	if ( $strict ) {
		$ lastc = substr ($ data, -1);
		if ( ';' !== $lastc && '}' !== $lastc ) {
			return false;
		}
	} else {
		$ semicolon = strpos ($ data, ';');
		$brace = strpos($data, '}');
		// Either; or } must exist.
		if ( false === $semicolon && false === $brace ) {
			return false;
		}
		// But neither must be in the first X characters.
		if ( false !== $semicolon && $semicolon < 3 ) {
			return false;
		}
		if ( false !== $brace && $brace < 4 ) {
			return false;
		}
	}
	$token = $ data [0];
	switch ($token) {
		case 's':
			if ( $strict ) {
				if ( '"' !== substr( $data, -2, 1 ) ) {
					return false;
				}
			} elseif ( false === strpos( $data, '"' ) ) {
				return false;
			}
			// Or else fall through.
		case 'a':
		case 'O':
			return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
		case 'b':
		case 'i':
		case 'd':
			$end = $strict? '$' : '';
			return (bool) preg_match( "/^{$token}:[0-9.E+-]+;$end/", $data );
	}
	return false;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *