PHP에서 Serialize는 PHP 변수를 저장 또는 전송할 수있는 문자열로 변환하는 매우 중요한 기능입니다. 이는 복잡한 PHP 데이터 구조 (예 : 배열, 객체)를 데이터베이스, 파일 시스템 또는 네트워크에서 전송하는 데 저장하는 데 유용합니다. 다음으로 직렬화 기능의 작동 방식과 PHP 변수를 처리하는 방법을 파헤칩니다.
직렬화 함수의 기능은 PHP 변수 (예 : 배열, 객체 등)를 저장 가능한 문자열 형식으로 변환하는 것입니다. 이 기능을 사용하면 복잡한 가변 데이터 구조를 문자열로 변환하여 파일에 저장하거나 네트워크를 통해 다른 응용 프로그램으로 전송할 수 있습니다. 리버스 작동은 비 제외 기능을 사용하는 것인데,이 기능은 문자열을 원래 PHP 변수로 다시 재고 할 수 있습니다.
직렬화 함수의 구문은 다음과 같습니다.
string serialize ( mixed $value )
매개 변수 :이 기능은 배열, 객체, 문자열, 숫자 등을 포함하여 모든 유형의 PHP 데이터 일 수있는 매개 변수 $ 값을 허용합니다.
반환 값 : 주어진 PHP 변수의 직렬화 된 형태를 나타내는 문자열을 반환합니다.
<?php
// 간단한 배열을 정의하십시오
$array = array("apple", "banana", "cherry");
// 어레이를 일련 화합니다
$serialized_array = serialize($array);
// 출력 직렬화 된 문자열
echo $serialized_array;
?>
출력은 다음과 같습니다.
a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"cherry";}
이 예에서 Serialize는 $ 배열 배열을 배열의 구조 및 내용을 나타내는 긴 문자열로 변환합니다.
<?php
class Fruit {
public $name;
public $color;
function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
}
// 객체를 만듭니다
$fruit = new Fruit("apple", "red");
// 객체를 직렬화하십시오
$serialized_object = serialize($fruit);
// 출력 직렬화 된 문자열
echo $serialized_object;
?>
출력은 다음과 같습니다.
O:5:"Fruit":2:{s:4:"name";s:5:"apple";s:5:"color";s:3:"red";}
이 예에서는 과일 물체를 끈으로 직렬화하고 나중에 비생대를 통해 복원 할 수 있습니다.
Serialize 의 주요 응용 프로그램 시나리오 중 하나는 변수를 데이터베이스 또는 파일에 저장하거나 네트워크로 전송하는 것입니다. 데이터를 저장할 때, 우리는 종종 저장 프로 시저를 단순화하기 위해 복잡한 데이터 구조 (예 : 배열 또는 객체)를 문자열로 직렬화합니다.
사용자의 쇼핑 카트 정보를 보유하는 데이터베이스 필드가 있다고 가정합니다. 카트 정보는 품목, 수량 및 가격을 포함하는 다차원 배열입니다. Serialize 함수를 사용하여 문자열로 변환하고 문자열을 데이터베이스에 저장할 수 있습니다.
<?php
// 쇼핑 카트가 다차원 배열이라고 가정 해 봅시다
$cart = array(
array("product" => "apple", "quantity" => 2, "price" => 3.5),
array("product" => "banana", "quantity" => 1, "price" => 1.2),
array("product" => "cherry", "quantity" => 3, "price" => 2.8)
);
// 쇼핑 카트 데이터 직렬화
$serialized_cart = serialize($cart);
// 데이터베이스에 연결되어 데이터를 삽입 할 준비가되었다고 가정 해 봅시다.
$sql = "INSERT INTO cart_table (user_id, cart_data) VALUES (1, '$serialized_cart')";
// 데이터베이스 작업을 수행합니다
?>
데이터베이스에서 해당 카트 데이터를 가져와야 할 때 비 제외신을 사용하여 PHP 배열로 다시 변환 할 수 있습니다.
<?php
// 데이터베이스에서 직렬화 된 쇼핑 카트 데이터를 받고 있다고 가정합니다.
$retrieved_cart_data = "a:3:{i:0;a:3:{s:7:\"product\";s:5:\"apple\";s:8:\"quantity\";i:2;s:5:\"price\";d:3.5;}i:1;a:3:{s:7:\"product\";s:6:\"banana\";s:8:\"quantity\";i:1;s:5:\"price\";d:1.2;}i:2;a:3:{s:7:\"product\";s:6:\"cherry\";s:8:\"quantity\";i:3;s:5:\"price\";d:2.8;}}";
// 사용 unserialize 원래 배열을 복원하십시오
$cart = unserialize($retrieved_cart_data);
// 복원 된 배열을 인쇄하십시오
print_r($cart);
?>
출력 결과 :
Array
(
[0] => Array
(
[product] => apple
[quantity] => 2
[price] => 3.5
)
[1] => Array
(
[product] => banana
[quantity] => 1
[price] => 1.2
)
[2] => Array
(
[product] => cherry
[quantity] => 3
[price] => 2.8
)
)
이런 식으로 복잡한 데이터 구조를 스트링 형태로 변환하여 손쉬운 저장 및 전송을 할 수 있습니다.
보안 : 신뢰할 수없는 소스 (예 : 사용자 입력)의 데이터를 제외하면 PHP 객체 주입과 같은 보안 문제가 발생할 수 있습니다. 이러한 문제를 방지하려면 신뢰할 수있는 데이터 만 제거하거나 특히 객체가 관련 될 때 직렬화 및 비조화 대신 JSON_ENCODE 및 JSON_DECODE 사용을 고려하십시오.
성능 문제 : 직렬화는 더 큰 데이터 구조를 처리 할 때 더 많은 메모리 및 처리 시간을 소비 할 수 있으므로 사용하도록주의하십시오.
Serialize 및 Unserialize를 사용하면 PHP 개발자는 복잡한 데이터 구조를 문자열로 쉽게 변환하여 손쉬운 저장 및 전송을 쉽게 변환 할 수 있습니다. 이는 다른 시스템이나 서비스간에 데이터를 공유하거나 데이터베이스 및 파일에 데이터를 저장하는 데 매우 유용합니다. 보안 취약점을 피하기 위해 민감하거나 신뢰할 수없는 데이터를 처리 할 때 조심해야합니다.