第9回 HTTP_Request クラス - HTTPリクエスト支援ライブラリ (2) - PEAR講座

PHP 中級 講座

くまっち先生のPEAR講座

Lecutures on PHP

第9回 HTTP_Request クラス - HTTPリクエスト支援ライブラリ (2) (その2)

 このエントリーをはてなブックマークに追加

リクエストデータ送信

Net_Socketによる接続の確立が行われた後は、その接続状態の確認を行うと共に実際にリクエストとしてリクエストヘッダデータを送信します。リスト2がその該当箇所の抜粋です。

    リスト2リクエスト処理コード

    PEAR
::isError($err) or $err $this->_sock->write($this->_buildRequest());

    if (!
PEAR::isError($err)) {
        ....

ヘッダデータの送信にはNet_Socketのwriteメソッドを使用します。送信するデータの生成は、_buildRequestというクラスのプライベートメソッドが担当しています。
リクエストを行う際に送信するリクエストヘッダデータは、簡単なリクエストであるならば

    GET http://www.phppro.jp/ HTTP/1.1
    Host: www.phppro.jp

といったような「キー: 値」を基本構成とするシンプルな内容です。_buildRequestメソッドではHTTPリクエストを行うために、必要となる固有のキーに対する値を生成する役割を持っています。
様々なケースに応じて特定のヘッダ行を付与するといった処理を行っており非常に膨大なコード量となっているためここでは具体的なコード紹介は割愛しますが、いわゆる「HTTPヘッダデータの仕様」が詰ったメソッドと言えるでしょう。

くまっち先生

ちなみにリスト2のコードにて論理演算子の「or」を利用して2つの処理を結合させていますが、実はこのコードで条件による分岐処理を行っています。論理演算子の前(左部)の真偽値によって、論理演算子の後(右部)の処理内容を行うか否かを判断するという振る舞いを行うため、特定の条件時のみ実行する処理を1行で書くことのできる記述方法になります。
ここでは論理和のorを使用していますが、論理積のandも同じように利用可能です。リスト3は、それぞれの論理演算子を使用した場合における真偽値ごとの動作結果です。


    リスト3論理演算子を利用した分岐処理

    true  
or  print 'A';   // 出力されない
    
false or  print 'B';   // B と出力される
    
true  and print 'C';   // C と出力される
    
false and print 'D';   // 出力されない

コード量(文字数や行数)の短縮になる記述方法ですが、コードの可読性については人それぞれ感じるかもしれません。

  



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)