[←Back]   8. 実際のサーバーにアップしよう  [Next→]

   8-1 プロバイダはCGIを許可してる?
実際にサーバーにアップしようとしても、そのサーバーがCGIを許可してなければ、意味がありません。
加入しているプロバイダがCGIが使えるかどうかは、たいがいそのプロバイダのホームページ上に 載っています。どうしても見つからない場合は、メールで問い合わせるのも良いでしょう。
ですが、CGIを認めていないサーバーは以外と多いものです。それには、次のような理由があります。

1.セキュリティーのため
普通サーバーは、HTMLファイルを「読み込み」しかできない状態にしています。
しかし、CGIを認めるということは、サーバーにあるファイルを「書き換える」ことを認めるのと同じになります。
当然サーバーとしては、書き換えを認めないほうがセキュリティーは向上します。

2.サーバーを安定させるため
もしエラーのあるCGIが実行されると、たいていサーバーはエラーメッセージを返します。
しかしwhile文をミスするなどして、無限ループをするCGIを実行してしまった場合には、
サーバーは永延に処理を繰り返し、メモリを消費して、最後にはダウンしてしまいます。

また、CGIにエラーがないとしても「置いてあるHTMLを読み込ませる」のと、 「CGIを処理して結果を返す」
のでは、CGIを処理する方がサーバーの負担は大きくなります。
このため、CGIを禁止するサーバが多くなります。


ただし、加入しているプロバイダでCGIが使えないからといって、諦めることなかれ!
私のように、無料サービスを使うなどの方法があります♪


   8-2 Perlのパスを設定しよう
ローカルでCGIスクリプトが無事動いたからと言って、サーバー上でも確実に動くというわけではありません。
ただし、この場合原因のほとんどは、
・Perlのパスの設定ミス
・パーミッションの設定ミス
・ファイルを転送するモードの設定ミス
のどれか思います。

まず、Perlのパスの説明です。Perlのパスとは、CGIスクリプトの1行目にある
   #!/usr/local/bin/perl
を指します。この部分は、「CGIを書くときのおまじない」と表現していましたが、 実は、サーバーによって違う場合があります。
実際、私が使っているサーバーでは、
   #!/usr/bin/perl
でした。Perlのパスについてはサーバーのほうで説明があると思うので、それにあわせて書き直せばOKです♪


   8-3 パーミッションとは?
パーミッションは、「このファイルは見るだけ」、 「このファイルは、見ることと書き込むことができる」 などのアクセス権限のことをいい、「644」のような3桁の数字で表現されます。

上の図を使いながら説明すると、パーミッションの3桁は、左から順に「オーナー」「グループ」「その他」 のアクセス権限を表しています

次にそれぞれの桁の数字は、読み込み(r=4)、書き込み(w=2)、実行(x=1)として、許可されているものの合計で表されます。

上の図では、「オーナー」は読み込みと書き込みができるので、パーミッションは(4+2)=6
「グループ」と「その他」は読み込みしかできないので、パーミッションは4
よって、このファイルのパーミッションは「644」になります。

……と、まあこのように言っても分かりにくいので、具体例でいきましょう。

1.HTMLファイル、画像ファイル、jcode.plなど……「644」
「読み込むだけ」のファイルのパーミッションは644だと思ってください。
普通、FTP転送したときのデフォルトのパーミッションは644になっています。

ちなみに、jcode.plは「ライブラリファイル」と呼ばれ、CGIを実行するときによく使われます。
たまに、パーミッションを755にするように書いてある場合もありますが、たいていどちらでも動きます。

2.CGIファイル……「755」
CGIファイルは実行する必要があるので、パーミッションは755にします。

3.CGIが使用するデータファイル……「666」
データファイル(カウンターで言えば、カウントを保存するファイル)は、オーナー以外にも書き込みを許可する必要があります。
そのため、パーミッションは666にします。

4.CGIを入れているディレクトリ……「777」または「755」
ディレクトリのパーミッションは777の場合が多いのですが、 セキュリティーの問題で755に制限している場合もあります。
実際、私が使用しているサーバーは755でした。


ちなみにパーミッションの変え方ですが、FFFTPを使っている方は ファイルを右クリックして「属性変更」をクリックすると上の画面がでてくるので、そこで変えてください。


   8-4 転送モードはあってる?
FTP転送には、「アスキーモード」と「バイナリモード」があります。

画像や音声データなどは「バイナリーモード」で転送しますがCGIスクリプトはアスキーモードで転送する必要があります
CGIをアップロードする前に、FTPソフトの設定を確認してください。


次に転送モードの設定法ですが、FFFTPを使っている方は 「ファイル名で転送モードを切り換え」に設定しておけば、自動的に拡張子を識別して 転送モードを切り換えてくれます。


   8-5 動かない!そんなときは…
CGIが動かないときには、サーバーはエラーメッセージを返します。メッセージの種類は
・「500 Internal Server Error」
・「403 Forbidden」
・「404 File Not Found」
のどれか思います。
このエラーメッセージから、動かない原因を予想してみましょう。

1.「500 Internal Server Error」の場合
これが一番よく見かけるエラーです。原因と対処法は以下の通りです。

CGIファイルの記述ミス
 CGIファイルにエラーがあるとこのメッセージが表示されます。もう一度ローカルサーバーでテストしてみましょう。

Perlのパスの設定ミス
 8-2で書いた通りです。サーバーの設定にあわせて書き直しましょう。

ファイルを転送するモードのミス
 8-4で書いた通りです。アスキーモードで転送しましょう。


2.「403 Forbidden」の場合
CGIファイルに実行権が無いときにでます。
CGIファイルのパーミッションが755になっているか確認してください。

また、サーバーがCGIを認めていないフォルダにCGIを転送したときにもこのエラーがでます。


3.「404 File Not Found」
ファイルが見つからない時はこのエラーが出ます。
ファイルを転送したアドレスをもう一度確認してください。


   8-6 それでも500エラー!?
ローカルでCGIスクリプトが無事動いた。
Perlのパスもチェックしたし、パーミッションや転送モードもOK。

……でも、それでも「500 Internal Server Error」といわれる場合があります。(ってか、実際ありました;)
こうなってしまうと、どこがエラーだか分かりません。

こんな時は、KENT WEBのPerlチェッカを利用してみてください。 エラーメッセージが表示されるので、参考になると思います。

[←Back]   BACK   [Next→]