현대 웹 개발에서는 다른 플랫폼 간의 데이터 전송이 특히 중요해집니다. PHP는 효율적이고 안전한 크로스 플랫폼 전송을 위해 데이터를 직렬화하고 인코딩하는 다양한 수단을 제공합니다. 그중에서도 Base64_encode () 와 결합 된 Serialize () 함수는 일반적이고 효과적인 조합 방법입니다. 이 기사는이 두 가지를 사용하여 교차 플랫폼 데이터 전송을 달성하고 해당 샘플 코드를 제공하는 방법을 자세히 소개합니다.
Serialize () :이 함수는 PHP 변수 (배열, 객체 및 기타 복잡한 구조 포함)를 스트링 형식으로 변환 할 수 있으며, 이는 저장 또는 전송이 쉽습니다.
Base64_encode () : 직렬화 된 문자열에는 특수 문자가 포함될 수 있으므로 특정 프로토콜을 통해 직접 URL에 넣거나 전송하는 데 적합하지 않습니다. Base64_encode () 는 전송 중에 데이터 무결성을 보장하기 위해 문자, 숫자 및 몇 가지 기호 만 포함 된 문자열로 변환 할 수 있습니다.
구조화 된 데이터는 전체적이고 정확하게 문자열로 변환 할 수 있습니다.
인코딩 된 데이터는 URL, JSON 또는 HTTP 요청 본문에 안전하게 내장 할 수 있습니다.
크로스 플랫폼 일 때, 수신기는 Base64를 해독 한 다음 해당 언어의 사막화 방법을 호출하여 데이터를 복원해야합니다 (PHP 직렬화 형식은 PHP에 의해서만 직접 사막화 될 수 있지만, 교차 언어가 JSON을 먼저 전환하는 것이 일반적으로 PHP 또는 PHP 및 호환 시계 환경간에 초점을 맞추는 것이 일반적으로 더 일반적입니다).
URL을 통해 다른 쪽 끝으로 전달하려는 배열이 있다고 가정합니다.
<?php
// 복잡한 배열을 정의하십시오
$data = [
'username' => 'alice',
'email' => '[email protected]',
'roles' => ['admin', 'editor'],
'profile' => [
'age' => 28,
'city' => 'Shanghai'
]
];
// 사용 serialize 배열을 문자열로 변환합니다
$serializedData = serialize($data);
// 다시사용 base64_encode 코딩,적합한URL전염
$encodedData = base64_encode($serializedData);
// 포함 된 데이터 구성 URL,도메인 이름을 대체하십시오 gitbox.net
$url = "https://gitbox.net/api/receive.php?data=" . urlencode($encodedData);
echo "数据전염的 URL: " . $url;
수신기 쪽에서는 반대로 작동하면됩니다.
<?php
// ~에서 URL 获取코딩数据
$encodedData = $_GET['data'] ?? '';
if ($encodedData) {
// 첫 번째 base64 디코딩
$serializedData = base64_decode($encodedData);
// 다시 unserialize 데이터 구조를 복원하십시오
$data = unserialize($serializedData);
print_r($data);
} else {
echo "받은 데이터가 없습니다";
}
Unserialize ()를 사용할 때, 특히 데이터 소스가 신뢰할 수 없을 때 객체 주입 공격이 트리거 될 수 있습니다. Unserialize () 의 두 번째 매개 변수를 사용하여 사막화를 허용하는 클래스를 제한하거나 json_encode/json_decode 와 같은보다 안전한 대안을 사용할 수 있습니다.
Base64_encode () 이후의 문자열의 길이는 약 33%가됩니다. 전송시 길이 제한을 고려하십시오.
언어로 전송하고 PHP로 제한되지 않으면 JSON 형식을 사용하는 것이 좋습니다.