PHPでHTTPリクエストを処理する方法

php-http-request-handlingのアイキャッチ画像 Windows

サーバーサイドのPHPで、ブラウザ等のクライアントからHTTPリクエストを受けて処理する方法です。

リクエストURLの取得

クライアントからリクエストされたURLは以下のように取得します。

if(isset($_SERVER['REQUEST_URI'])){
    // Apacheの場合
    $original_url = $_SERVER['REQUEST_URI'];
}elseif(isset($_SERVER['HTTP_X_ORIGINAL_URL'])){
    // IISの場合
    $original_url = $_SERVER['HTTP_X_ORIGINAL_URL'];
}else{
    // 取得できなかった
}

リクエストAPIの取得

クライアントからリクエストされたURLの内、どのようなAPIをリクエストされたかを取得します。
例として、ここでは「http://ip:port/api/functions」というURLがリクエストされるとします。
“api”は共通の識別子、”functions”が実行してほしい各種API機能名とします。

preg_match('/api\/([a-zA-Z0-9\/\-]+)/', $original_url, $api);
$request_api_function = $api[1];  // functionsを抽出
if(!isset($request_api_function)){
    // 取得できなかった
}

POST/GET/PUT/DELETEのディスパッチ

クライアントからリクエストされたAPIがPOST/GET/PUT/DELETEの内どれなのかを判断し、ディスパッチします。
リクエストデータは、POST/PUT時はJSON形式、GET/DELETE時はクエリストリングで通知され、内部ではいずれもJSON形式でハンドリングする例を記載します。

$get = $_GET;
$stdin = file_get_contents('php://input');
if(is_string($stdin) && is_array(json_decode($stdin, true)) && (json_last_error() == JSON_ERROR_NONE)){
    $request_json = $stdin;  // POST/PUT時のリクエストデータ(JSON形式)
}

switch($_SERVER['REQUEST_METHOD']){
case 'POST':
    // リクエストデータは$request_jsonから取得
    // POSTの処理
    break;
case 'GET':
    if(isset($get['hoge_string'])){
        $request_json["hoge_string"] = $get['hoge_string'];  // キー'hoge_string'の値(文字列)を取得
    }
    if(isset($get['hoge_number'])){
        $request_json["hoge_number"] = intval($get['hoge_number']);  // キー'hoge_number'の値(数値)を取得
    }
    // これでPOST/PUTと同様の$request_jsonができる
    // GETの処理
    break;
case 'PUT':
    // リクエストデータは$request_jsonから取得
    // PUTの処理
    break;
case 'DELETE':
    if(isset($get['hoge_string'])){
        $request_json["hoge_string"] = $get['hoge_string'];  // キー'hoge_string'の値(文字列)を取得
    }
    if(isset($get['hoge_number'])){
        $request_json["hoge_number"] = intval($get['hoge_number']);  // キー'hoge_number'の値(数値)を取得
    }
    // これでPOST/PUTと同様の$request_jsonができる
    // DELETEの
    break;
default:
}

TIPS

  • IISとWebサイト・CGIの自動構築についてはこちらをご覧下さい。
  • IISからPHPを実行する方法はこちらをご覧下さい。

コメント

タイトルとURLをコピーしました