AmiticaAmiticaAboutAboutロリポップサーバーにてCGIをPython3で運用したかった2018.11.12こんにちは。このブログはロリポップのレンタルサーバーで運用されているんですが、「レンタルサーバーならCGI動かせるじゃん。cron使えるんだ、使ってみよ」という軽い好奇心でCGIを作成しようとしたら思いの外苦戦したので詰まった点をまとめておきます。何と言っても流行ってるしな!」というテンションでPython3選んだらめちゃくちゃ苦戦した......。私のようにCGI作成は1日で終わったけどサーバーで動かすだけで3日間かかったという人間がいなくなりますように......!スポンサーリンク目次はじめにHelloWorldが出ない、日本語が出ないファイルの書き換えができない参考サイト様はじめに私はふだんJavaしか書いていません。CGIは以前大学の授業でちょっと触ったくらい(しかもその時の言語はperl)なので、以下に書いてることは自分自身が芯から理解しているわけではないことをご了承ください。HelloWorldが出ない、日本語が出ない最初に書いておきますが、わりときちんと書いてるのに500エラーになる!はパーミッションの間違いの可能性があります。cgitbをインポートして有効にした後に、Content-Type:でhtmlを指定しないとエラーになります。https://lolipop.jp/manual/hp/cgi/ロリポップのパーミッションは以上を参考にしてください。設定しないと本当に動作しません。適当に777でいいやとかしないように。charset=UTF-8\r\n")print("<html><head><title>Title</title></head><body>")print("Hello!")print("</body></html>")ファイル名は適当にいいですが拡張子は.cgiです(.pyで動くかどうかは不明。これが動作しない場合はおそらくパーミッションエラー(ロリポップ以外のサーバーの場合はきちんとpythonの言語パスを確認してください(1行目))。ちなみに文中のcgitbについては公式のドキュメントを参考にしてください。噛み砕いて言うとCGIとして使うときにエラーメッセージをHTMLで出力してくれるよという代物。これ、Hello!の部分をこんにちわ!とするだけで動作しなくなります。2バイト文字(日本語)が入ってくるだけで動かなくなるんです。調べた結果、動作するコンピュータのロケールが取得できず、入出力の文字コードがANSI_X3.4-1968となっているのが原因の模様。Apacheの設定をいじれと書いてあるページもありますが、レンタルサーバーではいじれません(最初は.htaccessの設定かと思ったけれど改善せず)。いろんなページを巡ってソースコードを切り貼りした結果、日本語でも動作するようになったのが以下のコード。強制する記事の一番後ろに私が参考にしたサイト様の一覧を載せておくのでこれで動かない場合はそちらを参考にしてください。この問題についてもっと理解したいという人もそちらを見ることをお勧めします。ファイルの書き換えができない私が作成したCGIは一定時間ごと(cron)で動作し、どこどこのページから情報を取得してtxtファイルにまとめるというもの。'w')f.write(text)f.close()A.txtはcgiと同じディレクトリにあるとします。ローカル環境では問題ないのですが、サーバー上で運用するには問題が2点。文字コードを指定していないため、出力時にエラーになる。ファイルの参照は相対参照でもいいけど現在のディレクトリを書く必要がある。以下の様に書きましょう。ファイルを閉じるディレクトリは./から書くか、あるいはいっその事絶対参照にしてもいいかもしれないです。ルートパスはcron設定のページに書かれています。ちなみにこのA.txtが文字化けしてるという人はブラウザのテキストエンコーディングをUTF-8にしましょう。Windows10にてWindowsでAtomのインストールに失敗しました。基本的に「もともとオーナー権限を持っていたアカウントがなくなったとき」に表示されたりする模様。Code)で簡単なHTMLやCSSを書いて見た目を確認するときのテクニックを紹介します。起動して新規ファイルを作成します(起動したら新規ファイルにする設定もありますが、さしあたりctrl...テキストPagesでプログラミングのコードを綺麗に書きたいMacにはiWorkというオフィススイートがあり、無料で使うことができます。Officeを入れずとも同じようなソフトが使えるのは嬉しいですね。Amitica.メニューAboutホーム検索トップ。