チラシの裏からうっすら見える外枠の外のメモ書き

新聞に挟まってる硬い紙のチラシの裏からうっすら見える外枠の外に走り書きされたようなものです。思いついたときにふらふらと。

さくらのレンタルサーバでC++のCGIを動かす

Webアプリケーションを作るときに、PHPを使うのも速度的になんだか嫌な感じがしたので、今回は少しお遊びな感じでC言語CGIを作成して、それを実行してみました。

ただ、今回はソースコードの仕様上C++でないとコードが動作しなかったので、C++を使用します。

 

サーバは、さくらのレンタルサーバ スタンダードプランで、特にshellをいじったなどはしていませんが、teratermでログインしてコンパイルレンタルサーバ上で行います。

 

 

まずはクライアント環境で簡単なC++プログラムを作成しました。

ソースコードは以下の通りです。

C++でのCGIプログラム

 

プログラムの解説を行います。

1~2行目はインクルード文です。おなじみ標準入出力ヘッダーと、可変引数リストを処理することができるようになるヘッダーであるstdarg.hがインクルードされています。

 

4行目及び30行目では可変引数をテンプレートにしています。省略記号で任意の数の引数を受け取ります。

5行目は31行目の関数のプロトタイプ宣言です。

今回プロトタイプ宣言した関数は、cprintfという関数です。この関数は入力された文字にLinuxの改行文字である"\r\n"を加えて出力しています。

フォーマット文字の処理を行うために少し変な組み方としています。

sという改行文字含む文字列を入れる配列をC99で保証された文字数分の4095個確保します。

次に、その配列に引数formatと改行文字を入れ、出力します。

printfでは可変引数を入れています。

 

この関数を用いて必要な情報を記述します。

9行目ではHTTPヘッダーの設定をします。これをブラウザが読み込んでHTMLデータであると判断します。

Content-Typeの後は2回改行する必要があります。

その後、通常通りHTMLを記述していけば問題ありません。

ファイル作成後、さくらのレンタルサーバの外部からアクセスできるディレクトリにプログラムをアップロードします。

 

その後、teratermなどのターミナルソフトからさくらのレンタルサーバにアクセスし、以下のコマンドをプログラムがあるディレクトリで入力します。

C++でのCGIプログラムコンパイル

正常にコンパイルが成功すれば、同じディレクトリにhello.cgiが生成されるはずです。

あとはブラウザでhello.cgiにアクセスすると次のようになります。

f:id:k-hyoda:20170714004559p:plain

このように、C++でもさくらのレンタルサーバでWebページを作成することができました。

ただ、どうしても動作を高速化したい場合やメモリの消費を最小限に抑えたい場合など以外での使用であれば開発効率と全く見合わないのでおすすめできません。

当然のことなんですがね。