phpのスーパーグローバル変数+curlコマンド 簡単にまとめてみた


apiを叩きにいくときやajaxのテストなどで生のcurlコマンドを実行することが多かったので簡単にまとめてみました。

php側では対象のスーパーグローバル変数をvar_dumpして出力しているものとします。

$_GET

unix
$ curl "http://test.com/?id=1"
出力
array(1) {
  ["id"]=>
  string(1) "1"
}

$_POST

unix
$ curl "http://test.com/" -X "POST" -F "id=1" -F "name=manato"
出力
array(2) {
  ["id"]=>
  string(1) "1"
  ["name"]=>
  string(6) "manato"
}

$_FILES

unix
$ curl "http://test.com/" -F "[email protected]"
出力
array(1) {
  ["uploaded_image"]=>
  array(5) {
    ["name"]=>
    string(11) "test.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(14) "/tmp/php9Hmedz"
    ["error"]=>
    int(0)
    ["size"]=>
    int(234601)
  }
}

コマンドを実行したディレクトリに画像がなかったりファイル名が間違っているとこんなエラーが出ました。

curl: (26) couldn't open file "test.jpg"

$_COOKIE

unix
$ curl "http://test.com/" -H 'Cookie: user_id=1'
出力
array(1) {
  ["user_id"]=>
  string(1) "1"
}

$_SERVER

unix
$ curl "http://test.com/" -H 'token: testtest'
出力
array(29) {
 (省略)
  ["HTTP_TOKEN"]=>
  string(8) "testtest"
}

curlコマンドのオプション-Hはヘッダー情報を付加できますが
それをphp側で受け取るには$_SERVER['HTTP_XXX']で取得できるようです。(XXXは指定した文字列の大文字)

なので上の例だとHTTP_TOKENとなります。

また、$_COOKIEのコマンドを打った際もvar_dump($_SERVER)の結果はこうなっていました。

出力
array(29) {
 (省略)
  ["HTTP_COOKIE"]=>
  string(10) "userid=78C"
}

ヘッダー情報の一つなので$_SERVERにも入っているということですね。

まとめ

上から順に$_GET, $_POST, $_FILES, $_COOKIE, $_SERVERのコマンドです。

$ curl "http://test.com/?id=1"
$ curl "http://test.com/" -X "POST" -F "id=1" -F "name=manato"
$ curl "http://test.com/" -F "[email protected]"
$ curl "http://test.com/" -H 'Cookie: user_id=1'
$ curl "http://test.com/" -H 'token: testtest'
-Hオプションの結果は$_SERVER['HTTP_任意の文字列大文字']で取得可能。
$ curl "http://test.com/" -H 'age: 20'
echo $_SERVER_['HTTP_AGE']; // => 20

以上、簡単にcurlコマンドについてまとめました。