めのん@ひとりプログラミング同好会

このブログはすべてフィクションであり、実在の人物、団体とは一切関係ありません

ビルトインウェブサーバーってCGIは動かせないの?

こんにちは、めのんです!

最近はPHPを中心にWebプログラミングを勉強していますが、同時並行でC++とZigの勉強もしています。 そこで、できればそれらを組み合わせてなんかやってみたいなあと思いました。

本当に単なる思いつきですが、ZigでCGIでも作ってみようかなと思ったんです。

で、いつも面倒なのでWebサーバーはPHPのビルトインウェブサーバーで済ませてしまっていますので、今回もそれでやれないかなと考えたわけです。

でも、ちょっと調べただけではPHPのビルトインウェブサーバーでCGIを動かす方法は見つかりませんでした。 本当にざっとしか調べていないので、私が見つけられていないだけの可能性は高いと思います。

ビルトインウェブサーバーでCGIを動かすことが目的じゃないので、何でもいいからそれっぽく動けばいいやと思って邪道に走りました。 PHPからZigで書いたプログラムの標準入出力とパイプでつないで、環境変数を渡せればそれでOKなはずです。

標準入出力をパイプでつなぐのはまあいいと思います。 でも、環境変数がなかなか面倒そうだということがわかってきました。

具体的な話をすると、たとえばREQUEST_METHODのような基本中の基本ともいえる環境変数PHPのコードでは取得できないのです。 これだと、PHPから子プロセスとして起動したZigのプログラムでもきっと環境変数を取得できませんよね。

試しに環境変数PATHを取得させたところ、これはうまくいきました。 だからやり方が間違っているわけではなさそうです。

たしかにPHPでは環境変数を使わなくても必要な情報は取得できます。 だから必要ないんでしょうね。 私はてっきりCGIと同じ環境変数PHPにも渡されると思っていたのですが、その考えが根本的に間違っていたのかもしれません。

CGIに必要な環境変数PHPのコードでputenvしてからZigのプログラムを呼び出してもいいんですけど、結構な数があるので面倒です。 それに、きっとどこかでミスをすると思います。

こんな面倒なことをするぐらいなら、XAMPPでも何でもいいのでもうちょっとまともな環境にした方が楽そうです。 そういうのが面倒だからビルトインウェブサーバーだったんですけどね。

ということで、今日はこのへんで。

それでは!!