PHPで複数のGETを送受信する方法【初心者向け】

初心者向けにPHPで複数のGETを送受信する方法について解説しています。GETはWebの基本なので、ぜひこの機会にPHPで送受信出来るようになりましょう。実際にソースコードを書いて説明しているので、ぜひ参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPで複数のGETを送受信する方法について解説します。

PHPを理解する上で基礎的な内容になるので、プログラミングを理解するためにも必要な知識になるはずです。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPで複数のGETを送受信する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

GETとは

ブラウザに表示されるリンクをクリックした時、またブラウザのアドレスバーに直接URLを入力してエンターキーを押すと、ブラウザはURLを元にその先にいるWebサーバに対してHTTPリクエストを送っています。

HTTPリクエストにはサーバに対してどんなアクションを行うかを表すメソッドと呼ばれる概念があります。

このメソッドの種類には代表的なものとして「GET」「POST」があります。

「GET」はその名の通り「Webサーバからデータを取得する」というアクションを指します。Webサーバ側はHTMLやjsonなどで情報をクライアントに返答します。

対して「POST」は「Webサーバに情報を送信する」というアクションを指します。

Webサーバ側ではクライアントから送信された情報を元に「データベースに対して新規作成・更新・削除」などを行ったりします。

 

また「GET」でも「POST」のように「Webサーバに情報を送信する」ことが可能です。

ただ、「POST」と違いURLの末尾にクエリストリングと呼ばれる情報を記載する必要があり、セキュリティ面から重要な情報を載せることは非推奨とされています。

そのため、クエリストリングには取得するデータを特定するための情報などを指定することが一般的です。

例えば、「5ページの情報を取得する」「2018年01月01日の情報を取得する」といった用途で利用されています。

 

複数のgetの書き方

URLの末尾に「?」を付け、その後に送信したい情報を「項目名=値」で追加します。

複数の項目を送信したい場合は、「&」で項目を繋ぎます。

下記の例では「date=20180101&page=2」の部分がクエリストリングとなっています。

URLから読み取れる意味としては「hoge.comサイトのブログで、2018年01月01日分の2ページ目の情報を取得したい」という風に解釈できます。

もちろんWebサーバ側の実装によって実際に返答される内容が決まります。

http://hoge.com/blog?date=20180101&page=2

PHPで「クエリストリング」を生成できる関数http_build_query( )が用意されています。

第4引数まで指定できますが、基本的には第1引数だけを指定することがほとんどでしょう。ここでは円滑にイメージを把握していただくため、第2~4引数の説明は割愛します。

 

第1引数には「項目名=値」の部分を生成するために連想配列を指定します。

上記の例であれば、下記の連想配列を指定します。

[
    "date" => "20180101",
    "page" => "2"
]

Webサーバ側では$_GETというスーパーグローバル変数に、GETで送信されたクエリストリングの情報が連想配列で格納されています。

先に挙げた「date=20180101&page=2」の情報を取り出す場合には下記のように項目名をキーにします。

$_GET["date"];
$_GET["page"];

 

参考

php.net-http-build
php.net-reserved

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

下記のコードは、get_sample.phpというファイルに記載されており、「http://localhost/get_sample.php」でアクセスできる前提です。

もし、「http://localhost/get_sample.php?page=1&order=desc」とブラウザのアドレスバーに入力してエンターキーを押すと、

page=1
order=desc
http://localhost/get_sample.php?page=1&order=desc

と表示されます。

get_sample.php

// GETでクエリストリングが指定されていた場合は、$_GETの要素数が1以上になります
if(count($_GET) > 0) {
    
    // 送信されたクエリストリングの「項目名=値」をすべて出力します
    foreach ($_GET as $key => $value) {
        echo $key."=".$value."<br>";
    }

    // 送信されたクエリストリングを再現してみます
    // $_GETの中身は連想配列になっているので、それをhttp_build_query()の第1引数に渡します
    $query_string = http_build_query($_GET);
    // このPHPファイルのURLになります。
    $url = "http://localhost/get_sample.php";
    // クエリストリングを加えて、ブラウザからリクエストしたURLを再現します
    echo $url."?".$query_string;
}

 

この記事を監修してくれた方

青木 敦史(あおきあつし)

昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。