エックスサーバーでPythonを動かす方法と500エラーになる場合の対処方法

2023-09-23Python 開発環境,Python

エックスサーバーでPythonを動かす方法と500エラーになる場合の対処方法

エックスサーバーで最低限のテスト用Pythonファイルを動かすのに必要だった事のまとめメモです。

実行ファイルの置き場所

エックスサーバーではcgiファイルが実行できるcgi-binなどのディレクトリ制限はなく、public_html以下なら動く。

.htaccess編集

.py拡張子のファイルをCGIファイルとして使う為に、.htaccessを編集します。

実行ファイルと同じ階層か上の階層である必要はあります。

AddHandler cgi-script .py

テスト用ファイルの作成

Pythonテスト用に以下の実行ファイルをファイル名「hello-world.py」として作成しました。

#!/usr/bin/python3.x
# -- coding: utf-8 --
import io, sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
print("Content-Type: text/html; charset=UTF-8;\n\n")

print("Hello world")

文字コードはUTF-8、改行コードはLF。

※このコードをコピペする場合は改行コードをLFに変更して下さい。

実行ファイルのパーミッション設定

実行する.pyファイルのパーミッション設定を705か755にする。

実行ファイルのあるディレクトリのパーミッションが777になっていない事を確認する。

500エラーになる場合の対処

※ 訂正:当方の環境下で500エラーになってしまうのはエディタのパッケージからSFTP接続で変更しても、再接続するまで何かが書き換わっていない事があるのが原因でした。
となると、ほとんどの人はこの問題で困る事はないのかもしれません。

解決しなければ、サーバーコントロールパネルから該当ドメインのエラーログを取得して確認します。

「End of script output before headers」とある場合は、パス・パーミッション・文字コード・改行コードが違う可能性が高い。

rubyやperlなどの他の簡単なCGIファイルをテストして動くかどうか確認する、など。

コピペの際の改行コードのチェック

コピペで貼り付けたコードの改行コードがLF以外だと、500エラーとなります。

コピペ元のソースコードはLFで書かれていても、ブラウザの表示でコピー、貼り付けた時はCRLFになってしまうケースが多く、そのまま貼り付けて実行しようとしても500エラーが発生してしまいます。

500エラーの原因が改行コードだった場合は、コードエディタの機能で改行コードをLFに変換すると解消されます。

関連:Atom | ファイル中の改行コードをLFまたはCRLFに一括変換する方法 | ONE NOTES