どうもです、タドスケです。
このブログはConoHa WINGサーバーをレンタルして置かせてもらっているわけですが、ふと
ブログ以外にも自作のWebプログラム作って置いたら動くんじゃない?
と思いつきました。
そして試しに検索してみたところ、以下の記事を見つけました。
この記事によれば、PythonでCGIプログラムを作ってConoHa WINGのサーバーで実行できるとのこと!
ってなわけで、早速作ってみました。
昔懐かしのお名前入力画面です。
ほぼ記事の通りの手順ですが、以下にまとめておきます。
pythonコードを拡張子「.cgi」で用意する
以下のpythonコードを作成しました。
#!/opt/alt/python36/bin/python3.6
import cgi
# 文字コードをUTF-8にする
import sys
import io
sys.stdout = io.TextIOWrapper(
sys.stdout.buffer, encoding='utf-8')
# HTTPヘッダーの出力
print("Content-Type: text/html")
print()
# ---- ここまで ----
form = cgi.FieldStorage()
print(f'ようこそ{form["text"].value}さん!')
print('<button type="button" onclick="history.back()">戻る</button>')
1行目でサーバー上にあるpythonのパスを指定しています。
ConoHa WINGサーバーの場合はこうなるらしいです。
次にprintで出力される文字コードをUTF-8にしています。
これをやらないと画面に文字が表示されませんでした。
HTTPヘッダーの部分は、CGIプログラムを作る上でのお決まり処理だそうです。
そしてプログラム本体部分。
cgi.FieldStorage() でフォームの入力データ全体を、form[“text”].value の部分で指定部分の値を取得しています。
htmlを用意する
html側のコードは以下です。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="POST" action="cgi-bin/test.cgi">
あなたのお名前は?<br/>
<input name="text" cols="20" rows="5"/>
<input type="submit" />
</form>
</body>
</html>
input name=”text” の部分でcgiに渡すフィールド名を、
formの action=”cgi-bin/test.cgi” の部分で送信先のcgiファイルを指定しています。
あとは送信ボタンを押せばcgi側に入力した名前が送られるという寸法です。
ファイルをアップロードする
ConoHaWINGからファイルマネージャーを開き、適当な場所にhtml, cgiファイルをアップロードします。
一般的にはcgi-bin/ 以下に置くようですが、ConoHaWING的には特に制限は無いそうです。
(その代わりに拡張子を.cgiにする必要があります)
アップ後、cgiファイルを右クリック→Change modeを開き、Permissionを755に変更します。
(他の人が実行できるようにする)
まとめ
以上、ConoHaWINGサーバー上でPython製のCGIプログラムを実行する方法について解説しました。
ファイルの入出力とかも組み合わせたら、昔あったCGIゲームとかも作れるかもですね。
CGI以外にもサーバー上で色々できそうなことがわかったので、他にも試してみたいと思います。
コメント
コメント一覧 (1件)
[…] […]