PHP言語でJSONを使用し、jsonを配列、json配列に復元します
以前、phpでjsonデータを返す簡単な例を書きましたが、ネットにアクセスしたところ、jsonも紹介されている記事を突然見つけました。参考にしてみてください。内容は以下の通りです
バージョン 5.2 以降、PHP は json_encode() 関数と json_decode() 関数をネイティブに提供し、前者はエンコードに使用され、後者はデコードに使用されます。
1. json_encode()
1 2 3 4 |
<?php
$arr = array ( 'a' =>1, 'b' =>2, 'c' =>3, 'd' =>4, 'e' =>5);
echo json_encode( $arr );
?>
|
出力
1 |
{ "a" :1, "b" :2, "c" :3, "d" :4, "e" :5}
|
オブジェクト変換の別の例を見てください:
1 2 3 4 5 6 |
$obj ->body = 'another post' ;
$obj ->id = 21;
$obj ->approved = true;
$obj ->favorite_count = 1;
$obj ->status = NULL;
echo json_encode( $obj );
|
出力
1 2 3 4 5 6 7 8 9 10 11 |
{
"body" : "another post" ,
"id" :21,
"approved" :true,
"favorite_count" :1,
"status" :null
}
|
json は utf-8 でエンコードされた文字のみを受け入れるため、 json_encode() のパラメーターは utf-8 でエンコードされている必要があります。そうしないと、空の文字または null が返されます。中国語で GB2312 エンコードを使用する場合、または外国語で ISO-8859-1 エンコードを使用する場合は、この点に特別な注意を払う必要があります。
2. インデックス配列と連想配列
PHP は 2 種類の配列をサポートしています。1 つは「値」(値) のみを格納するインデックス付き配列、もう 1 つは「名前と値のペア」(名前/値) を格納する連想配列です。
JavaScript は連想配列をサポートしていないため、json_encode() はインデックス付き配列のみを配列形式に変換し、連想配列をオブジェクト形式に変換します。
たとえば、インデックス配列があります
1 2 3 |
$arr = Array( 'one' , 'two' , 'three' );
echo json_encode( $arr );
|
出力
1 |
[ "one" , "two" , "three" ]
|
連想配列に変更する場合:
1 2 3 |
$arr = Array( '1' => 'one' , '2' => 'two' , '3' => 'three' );
echo json_encode( $arr );
|
出力は次のようになります
1 |
{ "1" : "one" , "2" : "two" , "3" : "three" }
|
データ形式が「[]」(配列)から「{}」(オブジェクト)に変更されていることに注意してください。
「インデックス配列」を「オブジェクト」に強制的に入れる必要がある場合は、次のように書くことができます
1 |
json_encode( (object) $arr );
|
または
1 |
json_encode ( $arr , JSON_FORCE_OBJECT );
|
3. クラス変換
以下は PHP クラスです:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Foo {
const ERROR_CODE = '404' ;
public $public_ex = 'this is public' ;
private $private_ex = 'this is private!' ;
protected $protected_ex = 'this should be protected' ;
public function getErrorCode() {
return self::ERROR_CODE;
}
}
|
次に、このクラスのインスタンスで json 変換を実行します。
1 2 3 4 5 |
$foo = new Foo;
$foo_json = json_encode( $foo );
echo $foo_json ;
|
出力結果は
1 |
{ "public_ex" : "これは公開されています" { "public_ex" : "this is public" }
|
パブリック変数 (public) を除いて、他のもの (定数、プライベート変数、メソッドなど) が欠落していることがわかります。
4. json_decode()
この関数は、json テキストを対応する PHP データ構造に変換するために使用されます。以下に例を示します:
1 2 3 4 5 |
$json = '{"foo": 12345}' ;
$obj = json_decode( $json );
print $obj ->{ 'foo' }; // 12345
|
通常、json_decode() は配列ではなく常に PHP オブジェクトを返します。例:
1 2 3 |
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ;
var_dump(json_decode( $json ));
|
結果として、PHP オブジェクトが生成されます:
1 2 3 4 5 6 7 8 9 10 |
object(stdClass)#1 (5) {
[ "a" ] => int(1)
[ "b" ] => int(2)
[ "c" ] => int(3)
[ "d" ] => int(4)
[ "e" ] => int(5)
}
|
PHP 連想配列の生成を強制したい場合は、 json_decode() にパラメータ true を追加する必要があります:
1 2 3 |
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ;
var_dump(json_decode( $json ,true));
|
結果は連想配列になります:
1 2 3 4 5 6 7 8 9 10 |
array (5) {
[ "a" ] => int(1)
[ "b" ] => int(2)
[ "c" ] => int(3)
[ "d" ] => int(4)
[ "e" ] => int(5)
}
|
5. json_decode() の一般的なエラー
次の 3 つの json の記述方法はすべて間違っています。どこにエラーがあるかわかりますか?
1 2 3 4 5 |
$bad_json = "{ 'bar': 'baz' }" ;
$bad_json = '{ bar: "baz" }' ;
$bad_json = '{ "bar": "baz", }' ;
|
これら 3 つの文字列に対して json_decode() を実行すると、null が返され、エラーが報告されます。
最初のエラーは、JSON 区切り文字 (区切り文字) では単一引用符ではなく二重引用符の使用のみが許可されていることです。 2 番目の間違いは、JSON の名前と値のペアの「名前」 (コロンの左側の部分) では、いかなる場合でも二重引用符を使用する必要があることです。 3 番目のエラーは、最後の値の後にカンマを追加できないことです。
さらに、json はオブジェクトと配列を表すためにのみ使用できます。json_decode() が文字列または値に対して使用された場合、null が返されます。
1 |
var_dump(json_decode( "Hello World" )); //null
|

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









