スターサーバーでPythonで実装したページを表示させた時のメモです
.htaccessの作成
Pythonで実装したプログラムをCGIスクリプトとして扱うために
.htaccessを作成し以下を追記する
AddHandler cgi-script .py DirectoryIndex index.php index.html index.py
2行目はindex.pyをデフォルトドキュメントにするための設定
サンプルプログラム1
#!/usr/bin/python3.6 print("Content-Type: text/html; charset=utf-8") print("<html><meta charset='utf-8'><body>") print("<h1>テストページ</h1>") print("</body></html>")
サーバーにアップロード
実行権限与えないと500エラーが発生するみたいなので権限を付与してます
この状態でindex.pyにアクセスしてみると・・・
500エラーが発生
改行コードはLFでないと500エラーが発生するという情報があったのでCRLFからLFに変えて再度試すも解消せず
サンプルプログラム2
#!/usr/bin/python3.6 print("Content-Type: text/html; charset=utf-8\n") print("<html><meta charset='utf-8'><body>") print("<h1>テストページ</h1>") print("</body></html>")
Content-Typeの最後に改行がないと500エラーが発生するという情報があったので改行を追加
この状態でindex.pyにアクセスしてみると・・・
500エラーは発生しないが真っ白
ソースを確認してみると
body以降が出力されていない
怪しいのは日本語出力か?
ということでまたまた修正
サンプルプログラム3
#!/usr/bin/python3.6 print("Content-Type: text/html; charset=utf-8\n") print("<html><meta charset='utf-8'><body>") print("<h1>aaa</h1>") print("</body></html>\r\n")
やはり日本語が問題でした
標準出力をエンコードすれば日本語が出力できるようになるみたいなので修正
サンプルプログラム3
#!/usr/bin/python3.6 import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'utf-8') print("Content-Type: text/html; charset=utf-8\n") print("<html><meta charset='utf-8'><body>") print("<h1>テストページ</h1>") print("</body></html>")
日本語が出力されました。