4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのレンタルサーバにてpythonで記述したCGIを動かす

4
Last updated at Posted at 2020-05-04

はじめに

さくらのレンタルサーバでスタンダードプランを利用しています。
Pythonで記述したシンプルな「Hello World」プログラムを作成して、
CGIとして動作させるまでを説明します。

Pythonで記載したプログラム

Hello.cgi
# !/usr/local/bin/python
print "Content-Type: text/html\n\n"
print "Hello World"

[2026.5.3 追記]
上記のコードですが、コメント欄にてインターナルエラーが出るとのご指摘をいただきました。もし、同様の症状が出た場合には、コメント欄にご記載を頂いている以下をご検討ください。

  • 上記はpython2を想定して記載されている為、print文に括弧がありません。python3では括弧がないとエラーの原因となるようですので、python3を利用される場合はprint文に括弧をつけて試してみてください。
  • 「!/usr/local/bin/python」の部分ですが、Qiitaのmarkdownの仕様なのか下書きでは#記号の後に空白を入れていないのですが、公開された記事では#記号の後に空白ができてしまいます。この空白があるとエラーの原因となる可能性があるので、実際にご利用の際には空白をとったうえで試してみてください。

ファイル作成に関する留意点

ファイルの拡張子

「py」ではなく「cgi」にする必要があります(※1)。

※1:実は、拡張子をpyのままでcgiとして動作させる方法もあり、
 これにについては、後述の「.htaccessの要否」をご参照ください。

文字コードと改行記号

文字コードを「UTF-8」にして、
改行記号を「LF」にすると良いです。
他の組み合わせだとエラーになることがあるそうです。

pythonへのコマンドパス

上記の「Hello.cgi」の1行目に記載されているpythonへのコマンドパス。
最新の情報は、さくらのサポートページ>「レンタルサーバサービス仕様」>「CGI・PHP・SSI について」のページで「プログラムのコマンドパス」という項目があるのでここで確認してください → さくらのサポートページ

レンタルサーバへのアップ

アップ先

作成したファイル「Hello.cgi」のアップ先は、ドキュメントルート(/home/アカウント名/www/)以下であればどこでも良く、ドキュメントルート以下に新しく作成したフォルダでも良いです。

権限の設定

ファイルパーミッションは、 755、705、700(※2)のいずれかに設定する必要があります。

また、ドキュメントルート以下に作成されたフォルダ内にファイル「Hello.cgi」をアップした場合は、ファイル「Hello.cgi」があるフォルダに対しフォルダパーミッションとして755、705、700(※2)のいずれかに設定する必要があります。

※2:さくらのサポートページには、
「755または705のいずれかに設定」と記載されていますが
コメント欄でご指摘を頂いた通り「700」でも動作しました。
セキュリティ面を考えると「700」がより良いように思います。

.htaccessの要否

「.htaccess」は不要です。

ただ、コメント欄でご指摘を頂いた通り、
このままですと拡張子「py」を「cgi」に直さないといけないので非効率です。
そこで、以下を記述した.htaccessを作成して
拡張子「py」のままでもcgiとして動作できるようにする
という方法もあります。

.htaccess
AddType application/x-httpd-cgi .py

参考(さくらのサポートページ)

最新の情報は、
さくらのサポートページ>「レンタルサーバサービス仕様」>「CGI・PHP・SSI について」のページで「ファイル、ディレクトリの設定」という項目があるのでここで確認してください → さくらのサポートページ

動作確認

ブラウザで「hello.cgi」が配置されているURLを指定して
「Hello World」が表示されることを確認します。
URL指定例:
「hello.cgi」をドキュメントルートへ配置した場合は、
「https://(ドメイン名)/hello.cgi」となります。

あとがき

ちょっとPythonでCGIを試してみようとしたときに、
簡単な事例があると便利だ!と思いましたので、
この投稿をしました。誰かのお役に立てれば幸いです。

4
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?