現代のWeb開発では、異なるプラットフォーム間のデータ送信が特に重要になります。 PHPは、効率的で安全なクロスプラットフォーム伝送のためにデータをシリアル化およびエンコードするさまざまな手段を提供します。その中で、 serialize()関数とbase64_encode()を組み合わせたものは、一般的で効果的な組み合わせ方法です。この記事では、これら2つを使用してクロスプラットフォームデータ送信を実現し、対応するサンプルコードを提供する方法を詳細に紹介します。
Serialize() :この関数は、PHP変数(配列、オブジェクト、その他の複雑な構造を含む)を文字列形式に変換できます。これは簡単に保存または転送できます。
base64_encode() :シリアル化された文字列には特殊文字が含まれている可能性があるため、それらを直接URLに入れたり、特定のプロトコルを介して送信したりするのに適していません。 base64_encode()は、送信中にデータの整合性を確保するために、文字、数字、およびいくつかの記号のみを含む文字列に変換できます。
構造化されたデータは、完全かつ正確に文字列に変換できます。
エンコードされたデータは、URL、JSON、またはHTTPリクエストボディにしっかりと埋め込むことができます。
クロスプラットフォームの場合、受信機はBase64をデコードし、対応する言語の降下方法を呼び出してデータを復元する必要がある場合(ただし、PHPシリアル化形式はPHPによって直接偏りにくくなりますが、通常はJSON最初に変換することがより一般的です。
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()の2番目のパラメーターを使用して、敏arialialializationを許可するクラスを制限したり、 json_encode/json_decodeなどのより安全な代替手段を使用したりできます。
base64_encode()後の文字列の長さは約33%になります。転送時の長さの制限を考慮してください。
言語間で転送し、PHPに限定されない場合は、JSON形式を使用することをお勧めします。