3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AzureのFunction Appに$_REQUESTがない

Posted at

Function App作成

HTTPトリガーのFunction App作成

コンテナを作る→新しい関数を作る→他はデフォルトのまま作成。
HttpGET-CRUD-PHP1のような名前の関数タブが作られる。

ブラウザアクセス

開発タブを開くと
https://example.azurewebsites.net/api/HttpGET-CRUD-PHP1?code=abcdefghijklmnopqrstuvwxyz0123456
みたいなかんじのURLが表示されるので、ブラウザでアクセスすると作成したFunctionAppが呼び出される。
デフォルトでは真っ白。

Function Appの中身

構造としてはHttpGET-CRUD-PHP1という名前のディレクトリが作られ、中にfunction.jsonとrun.phpができる。

function.json

function.jsonはどういう条件で起動するかといったメタ設定を記載する
直接変更してもいいけど統合タブから操作した方が無難。
デフォルトではhttpTriggerという項目があり、これが『HTTPリクエストが来たらPHPを実行する』みたいな意味になっている。

run.php

index.phpとかではなく、ここが処理の起点となる。
開発タブから操作できるけど、とても非効率なのでFTPとかGitHubとか使った方がいい。

中身は基本的に普通のPHPだが、echoとか書いてもログに出力され、ブラウザ側には何も出ない。
最初からfile_put_contents(getenv('res'), $inTable)と書いてあるのだが、getenv('res')は実は単なるファイル名。
しかし、そのファイルに書き込むと何故かブラウザに出力されるという仕様になっている。
最初に全体をob_start();$inTable=ob_get_clean()とかで囲んでおけばあとは普通に書ける。

設定変更

デフォルトではGETしか受け付けない。
統合→トリガー HTTP(req)→Selected HTTP methods
のPOSTにチェックを入れるとPOSTも受け付けるようになる。
他にDELETE/HEAD/PATCH/PUT/OPTIONS/TRACEもあるけどまあ使わない。

リクエストパラメータがない

$_REQUESTがない

GETしようがPOSTしようが$_REQUEST=[]になってしまう。

$_POSTがない

POSTパラメータを送っても$_POST=[]になる。
もっと言うと$_SERVERにも$_ENVにも$argvにも無い。

何処にあるかというと、最初に作成したhttpTriggerから回収できる。
$post = file_get_contents(getenv('req'));

なおhoge=1&fuga=2って送るとそのまま$post='hoge=1&fuga=2'になるのでparse_str()しないといけない。

$_GETがない

同じく、URLにいくらパラメータを書いても$_GET=[]になる。
URLに&hoge=1&fuga=2と入れると、何故か$_SERVER['REQ_QUERY_HOGE']=1$_SERVER['REQ_QUERY_FUGA']=2とかいう変なところに入ってくる。
あと&foo[]=1&foo[]=2とか書くと死ぬ。

$_SESSIONがない

session_start()がfalseになるのでどうにもならない。
もっとも、そもそもそれ以前にFunction Appはセッションを使うようなサービスではないので、素直にApp Serviceでも使っとけって話だ。

まとめ

リクエストパラメータの取り出しがやたらめんどい。
セッションが使えないのは元々そういうサービスではないからいいとしても、GET/POSTが簡単に取り出せないのはどうにかしてほしい。

Function Appとは何か

サーバー不要のコードを使用してイベントを処理

とかよくわかんねーことが書いてあるけど、
まあ正直MySQLで言うトリガーみたいなものだと思っておけばいい。
直接リクエストが来たとかEventHubにアクセスが来たとかデータベースにINSERTがあったとかのタイミングで呼び出され、ちょっとした後処理を書くとかに使える。
定期起動もあるのでcron替わりにも使える。何故か秒単位指定できる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?