|
CGI を作成・改造する際に良くある質問とその回答 |
CGI を作成・改造する際に良くある質問とその回答を掲載しています。
|
|
Q. CGI の作成をするには何が必要ですか?
作成や修正はテキストエディタのみあれば行う事ができますが、正しい動作をするかなど確認する為、できればご自分のパソコンにサーバソフトを入れてアップロード前にテストを行う事をお薦めします。
普段使っているパソコンにサーバソフトをインストールするのに気が引ける場合、Linuxなどは非常に低スペックのパソコンでも動作しますので、余裕があればテスト用のサーバ機を用意するのが理想です。
「Tera Pad」 テキストエディタ
https://www.vector.co.jp/soft/win95/writing/se104390.html
AN HTTP Server Home Page サーバソフト
(Windows9x/Me/NT/2000/XP)
https://www.st.rim.or.jp/~nakata/
ページ先頭へ戻る
|
Q. 動作確認をするのに便利なツールはありますか?
以下のようなソフトを使うと動作確認や不具合の時の箇所を特定するのに便利です。
KENT-WEB ユーティリティ
https://www.kent-web.com/utility/index.html
AN HTTP Server Home Page サーバソフト
エラー行が表示される為、デバックに大変便利です。
(Windows9x/Me/NT/2000/XP)
https://www.st.rim.or.jp/~nakata/
ページ先頭へ戻る
|
Q. 初めて作成する際の順序などはありますか?
順序はありませんが、初めて作成する場合、本などで一から勉強していくより、他の方が作ったスクリプトの内容をじっくり見てみるのがお薦めです。
最初に作成するなら行程が簡単なカウンタなどから作成してみるとよいと思います。
何か作りたいものなど目的を持って作り始めると、覚えやすいと思います。
ページ先頭へ戻る
|
Q. CGI はどのような環境でも動作しますか?
CGI の実行環境は設置するホームページスペースによって左右されますので、初めにCGI
の設置自体が許可されているか、どのような制限があるかなどをよく確認する必要があります。
また、ホームページスペースのサーバOS が UNIX系 なのか Windows系なのかによっても違いますが、大抵は
UNIX系のサーバです。
逆に作ったスクリプトを見る側は、ブラウザなどの違いを除けば同じように見ることができます。
ページ先頭へ戻る
|
Q. 一般に配布されているCGI を改造して使ったり再配布してもいいですか?
配布されている所により利用規約がありますので、必ずそれに従って下さい。
改造して個人で使う場合は許可などの所もありますが、再配布は大抵の場合禁止されています。
CGI は作成された方の著作物ですので、利用方法には十分に注意して下さい。
ページ先頭へ戻る
|
Q. 自分の環境では制限が多いので自由に使う方法は?
最近ではインターネット接続のスピードがかなり上がり、自宅サーバを立てる方も多いようです。
検索エンジンで調べると解説ページも多くあり、古いパソコンなど使い自分のサーバで配信するのが一番自由度が高いです。
自分でサーバを立ててしまえば、設定次第で全く制限のない環境ができますので、試してみても良いと思います。
・ Yahoo! 自宅サーバ構築 カテゴリ
ページ先頭へ戻る
|
Q. CGI の基本的な設定に間違いがないかを確認したい
A. KENT-WEB さんで配布されているCGI でPerl のパスや、実行権限や改行コードなどをチェックするユーティリティが配布されています。
この CGI はPerl のパスとアクセス権のみ設定すれば動作しますので、確認方法が分からない場合、このスクリプトを使うと便利です。
「Perl Checker」 KENT-WEBさん
https://www.kent-web.com/utility/index.html
ページ先頭へ戻る
|
Q. サーバエラーとなってしまったが不具合の箇所が分からない
修正などを行う際は、一部分ずつ修正・動作確認をするのが確実ですが複数の箇所を修正後エラーとなり、どこが間違いか全く分からないなどの場合、Windows
で利用できるフリーのサーバソフトがありますので、それをインストールしエラーとなる行番号を確認する方法が良いと思います。
インストールから利用方法までを紹介されているサイトが以下の配布先ページ下部のリンクにありますので、利用方法などはそちらでご確認下さい。
エラーの出た行番号が分かると、不具合の修正に絶対便利ですので、とりあえず利用してみると良いと思います。
実際にはエラーの出る箇所の前の処理で不具合があり、その後の処理でエラーとなる場合もありますので、エラー箇所の前後も調べる必要があります。
また、アクセス権限が指定されている場合 (例えば 777 を 700 や 707 など)
はホームページスペース側の指示に従い設定してみて下さい。
その他で意外に原因が分かり難いのは、表など2バイト目に \ 記号を表すコードが入っている文字を最後に表示した場合です。
ヒアドキュメントで表示する場合は問題ありませんが、下の場合は文字化けでなく、サーバエラーとなります。
print "表";
AN HTTP Server Home Page (Windows9x/Me/NT/2000/XP)
https://www.st.rim.or.jp/~nakata/
ページ先頭へ戻る
|
Q. CGI は間違いなく正常だがエラーとなる
CGI 自体に間違いが無いように見えても、その中で読み込もうとしているファイルや改行コードなど別の部分がおかしい場合があります。
・ 全く分からない場合、上記サーバソフトを使ってエラー行を確認して下さい。
・ CGI 自身が出しているエラーなのか、サーバ側で出されるエラーなのかを確認して下さい。
・ スペースによってはCGI の動作できるディレクトリやサーバが限られている所がありますので確認して下さい。
・ ご利用環境で Perl のバージョンが低い場合、最近のCGI で動かないものがあるかもしれません。
・ 読み込むファイルが無い、又はアクセス権が無い → require で読み込もうとしているファイルが存在するか、アクセス権は正しいか確認
・ 改行コードが違う → 通常CR+LF 〜 LF へFTPツールで変換しますが、LFで保存されている場合バイナリモードで転送してみて下さい。
・ 全角のスペースが入っている → プログラム部に全角文字があるとエラーになりますので、エディタの検索で全角スペースを確認して下さい。
・ htaccess で間違った設定をしている → htaccessを使っている場合、プログラムのエラーでなくhtaccessの記述ミスの可能性もあります。
・ windows環境で使えない関数を利用している → 利用する環境によっては使えない関数があります
windows で flock alarm 等です。
・ その他、特定の部分でエラーとなる場合は周辺の処理を確認して下さい。
例えばメール送信処理が入っていたら sendmail のパスなど
・ アクセス権限が指定されている場合 (例えば 777 を 700 や 707 など)
はホームページスペース側の指示に従い設定してみて下さい。
その他で意外に原因が分かり難いのは、表など2バイト目に \ 記号を表すコードが入っている文字を最後に表示した場合です。
ヒアドキュメントで表示する場合は問題ありませんが、下の場合は文字化けでなく、サーバエラーとなります。
print "表";
ページ先頭へ戻る
|
Q. ページの表示で文字化けする特定の文字がある
A. CGI で書き出すページで 可能性 や 表示 などの文字を書き出すと文字化けを起こします。
これらの文字に含まれる 能 や 表 は文字コードに \ 記号を表すコードが入っている為、そのまま書き出すと文字化けします。
このような場合は \能 など文字の前に \記号を付けてエスケープします。
この他にも文字化けする文字は多くあり、カタカナでも文字化けする文字があります。
ページ先頭へ戻る
|
Q. 動いたり動かなかったり、何もないページが表示されたりする
A. 原因はこれだけではありませんが、使おうとしているCGI が異常に負荷の高いものの可能性があります。
負荷が高い又は実行時間を長く使うものの場合、サーバ側で強制終了させられている場合があります。
大抵のプロバイダのホームページスペースでは負荷の高いCGI は動作しません。
ページ先頭へ戻る
|
Q. 動作させると長い間読み込み、ページが見つかりませんや無地のページが表示される
A. 色々な原因があると思いますが、自分で作成したスクリプトの場合、無限ループになっていないかを必ず確認して下さい。
実際には借りているホームページスペースにいきなりアップロードして動作させるのではなく、自分のパソコンなどでテスト環境を作り、十分テストした後、アップロードして動作を再確認するのが理想です。
大抵の場合、無限ループになっても一定時間で強制終了する為、長い間読み込みを行って突然止まるように見えますが、実際には無限ループになっていて、サーバ側で強制終了させられているのかもしれません。
中にはこのように強制終了しないサーバ設定の所もあり、この場合サーバをダウンさせてしまうなどなど大変な事になります。
ほとんどの場合共用サーバとなっており、このようなミスは他の方へ迷惑となりますので十分に注意する必要があります。
ページ先頭へ戻る
|
Q. 画像が上手く表示されない
A. CGI が動かせる場所と、画像の読み出しが許可されている場所が決められているスペースもあります。
この場合画像は画像で許可されているスペースに置き、パスなどの設定を修正する必要があります。
ページ先頭へ戻る
|
Q. 実行するとソースが表示されてしまう、又はダウンロードされてしまう
A. お使いの環境でCGI が許可されていない可能性がありますので、ホームページスペースのマニュアルなどでご確認下さい。
ページ先頭へ戻る
|
Q. ロックされています、Lock is Busy などと表示される
A. 掲示板やカウンタなどではログを保護する為にロック機構が備わっていますが、このファイルが残ってしまっている場合があります。
大抵の場合時間を置くと削除される仕組みになっていますが、この削除が上手く行われずサーバ上に残ってしまい、その後動作しないなどの不具合が出てしまう場合は、FTPツールで接続して 〜.lock
(CGI によってロックファイル名は違います) を削除しましょう。
ページ先頭へ戻る
|
Q. 配布先からCGI をダウンロードしたら説明より内容物が足りない
A. 配布されているCGI は全てが入っているとは限りません (例えばカウンタのカウンタ画像やライブラリなど) ので、説明をよく読んで必要なものを揃える必要があります。
また、全て入っていると記載されているのに解凍したら足りなかった場合、ダウンロードに失敗している可能性がありますので、ブラウザの一時ファイルを削除後、再度ダウンロードして下さい。
IEの場合、【ツール】→【インターネットオプション】→インターネット一時ファイル
の 【削除】
一時ファイルを削除していない場合、再度ダウンロードしてもキャッシュから読み込まれる為、必ず一時ファイルを削除して下さい。
ページ先頭へ戻る
|
Q. 突然 core というファイルができた・・・
A. core というファイルは、ホームページスペースのサーバが重いなどCGI が何らかの原因で強制終了してしまった時などに出来る場合があるファイルで、激しく巨大な場合もありますが、削除しても問題ありません。
先に core というファイルを作り、書き込めないアクセス権を設定しておけば生成されるのを防ぐ事ができますが、このファイルが出来た
という事は、何らかの原因(プログラムのミスで強制終了やサーバ側の負荷が異常に高いなど)がありますので、原因を探る事をお薦めします。
ページ先頭へ戻る
|
Q. CGI は使えるのに一部に使えないものがある
A. 一般に配布されているCGI は全てのサーバで使えるとは限りません。
負荷の高いもの、必要とするモジュールがサーバ側に入っていない、バージョンが低いなど色々な原因がありますが、このあたりは配布先で説明がされている場合がありますので、確認してみましょう。
ページ先頭へ戻る
|
Q. 編集しようとしたら、文字化けしていて編集できない
配布されているCGI で保存されている文字コードをエディタ側で読めない場合、文字化けを起こします。
フリーで配布されているテキストエディタが多くありますので、それらを利用してみて下さい。
「Tera Pad」
https://www.vector.co.jp/soft/win95/writing/se104390.html
ページ先頭へ戻る
|
Q. 編集しようとしたら、全ての行がつながっていて編集できない
テキストエディタ側で、保存されている改行コードが読めない場合があります。
上のFAQで紹介しているテキストエディタは自動で認識しますので、これらを使えば正常に読めると思います。
また、作成者側がサイズを小さくする為、スペースなどを消している場合もありますが、この場合は正常です。
ページ先頭へ戻る
|
Q. 投稿時間が出る掲示板などで時間がずれている
ホームページスペース側の時刻設定が違っているか、配布されているCGI の不具合か分かりませんが、とりあえず配布されているCGI
を実際に使っているサイトなどを探し、同じように時刻が違っていないかを確認してみましょう。
同じように違っている場合、スクリプト側の不具合の可能性があります。
自分のスクリプトのみ違っている場合は、サーバ側の時刻設定に問題があるかもしれませんので、サポートに問い合わせてみてください。
ページ先頭へ戻る
|
Q. 掲示板などで長い間正常だったのに突然不具合が出た
過去ログ機能を持つ掲示板や日記などの場合、通常の投稿処理は問題なくても過去ログの設定などが間違っている場合、突然不具合がやってくる可能性があります。
特に設定変更などを行っていないのにエラーが出たりする場合は、その辺りの設定に間違いが無いか、過去ログディレクトリやファイルのアクセス権は間違っていないかなどを確認してみましょう。
また、特に画像などのファイルが投稿できる掲示板などの場合、ホームページスペースの容量を超過している可能性もありますので、そちらも問題ないかを確認して下さい。
ページ先頭へ戻る
|
Q. 掲示板やカウンタなどで現行や過去ログが全て消えてしまった
複数の人が書き込み操作をするスクリプトの場合、ロック機構がついていますが、その設定を行っていないなどの理由でロックが働いていない可能性があります。
ロック機構は非常に重要なので、必ず設定しましょう。
一度消えてしまったログは特別な機能がついているスクリプト以外では二度と戻りません。
ページ先頭へ戻る
|
Q. 画像や投稿記事など修正や操作をしたのに反映されない
大抵はブラウザのキャッシュ機能によるもので、ページの更新やインターネット一時ファイルを削除すれば反映されます。
ブラウザによっては強力にキャッシュするものもあるので、とりあえずキャッシュを疑ってみてください。
ページ先頭へ戻る
|
Q. CGI 自体でなくライブラリでエラーが出る
CGI に同封されている場合は、動作するバージョンだと思いますが、別のスクリプトでも使いまわしをする場合、ライブラリのバージョンが低いと正しく動作しない場合があります。
(ライブラリとは例えば日本語変換の jcode.pl など)
新しいバージョンにするか、CGI に同封されているライブラリを使って下さい。
ページ先頭へ戻る
|
Q. メール送信フォームなどで投稿者側アドレス入力で特定のアドレスのみエラーが出る
メール送信フォームなど投稿者側にメールアドレスを入力させるようなものは、メールアドレスの表記が間違っていないかをチェックするものがほとんどで、メールアドレス自体は正しいのにチェックで弾かれる場合があります。
これはスクリプト側の問題で、知識があれば自分で修正やその部分を消してしまうか、知識がなければ配布元に相談してみましょう。
ページ先頭へ戻る
|
掲示板の投稿メール通知などが上手くいかない
大抵の場合、メール送信プログラム sendmail などのパス指定の間違いか、sendmail
が許可されていないなどが問題ですが、それが違う場合、メールアドレスの @
部分に \ を付けて設定してみて下さい。
例えば、 aaa@bbb.com であれば aaa\@bbb.com という感じです。
@は CGI 内で配列として扱われるのでそれが原因でエラーとなっている可能性もあります。
ページ先頭へ戻る
|
500 404 403 エラーコードの違い
エラーコード 500
500の場合、スクリプトのエラーとなりますが原因は数多くありますので、とりあえず修正した箇所があればそこを確認します。
また、転送モードを間違えていたり、改行コードによる不具合、先頭行のPerl
のパスの間違いなども確認して下さい。
このFAQの中にある、不具合の箇所が分からない で紹介しているサーバソフトを利用するとより詳細に不具合が探せます。
エラーコード 404
このエラーはディレクトリ又はファイルの指定間違いで、スクリプトにアクセスしようとしてエラーが出た場合はURLの入力ミスです。
設置したディレクトリと、指定したURLをよく確認し、再度アクセスしてみましょう。
エラーコード 403
403のエラーはアクセス権限によるエラーです。
例えば適当な画像ファイルをアップロードし、他人の指定部分を0など 例えば644
を 640 などにしてアクセスしてみて下さい。
403のエラーが出ると思います。
ページや画像、ログファイルなども同様に、このアクセス権の設定が間違っているとサーバ側に弾かれ、正しく動作しません。
CGI を置くディレクトリやサーバの指定がある場合、それも疑ってみて下さい。
ページ先頭へ戻る
|
Q. カウンタなどSSI を使ったものが上手く動かない
カウンタなどで画像を使わず、そのまま数字で表示するようなカウンタの場合SSI
などを使っていると思いますが、ホームページスペースで CGI 許可とされていても、このSSI
は非許可の場合がほとんどです。
SSI ではなく CGI で書き出すカウンタがありますので、SSI が許可されていない場合
CGIで書き出すカウンタを使いましょう。
ページ先頭へ戻る
|
Q. 配布元でバージョンアップ版があったのでバージョンアップしたい
大抵配布元で指示があると思いますので、それにしたがって上書きなどを行います。
特に記載されていない場合、初めの設定は必要ですがスクリプト自体を上書きすればOKな場合が多いです。
また、配布元WEBサイトで記載されていなくても、スクリプト内に説明書きが記載されているものもあるので、注意して見て下さい。
ページ先頭へ戻る
|
Q. ファイルの読み込みを行うとエラーとなってしまう
ファイルの読み込み(記録ファイルなどでなくライブラリなど)を行う際は、最後の行に
1; と記載しておくと
正しく読み込みが行われます。
これは、ファイルの読み込みが正常にできたかどうかを示すもので、とりあえず付けておきましょう。
掲示板やカウンタなどの記録ファイルの場合は、上記の 1; はいりませんので、別の何らかの不具合の
可能性がありますので、記録ファイルのアクセス権などを確認して下さい。
ページ先頭へ戻る
|
Q. CGI から作成したロックファイルがFTPから削除できない
通常のプロバイダなどのスペースでは、CGI がユーザの権限で動作する為、CGI
が作成したロックファイルを
FTPから削除する事ができますが(同じ所有者)、CGI がWEBサーバソフトなどの権限で動いている場合、
CGI が作成したファイルを削除する事が出来ませんので、再度CGI から削除処理を行うか、root
など強い
権限から削除を行うと消す事ができます。
これはWEBサーバソフトで作成したファイルをユーザの権限で消す事ができなからです。(違う所有者)
ページ先頭へ戻る
|
Q. 転送した画像ファイルに線が入ってしまったり、崩れて見えない
画像ファイルなどはバイナリモードで転送しなくてはならず、テキストモードで転送すると画像に線が入って
しまったり、モザイク状、半分消えているなど崩れて見えなくなってしまいます。
壊れてしまった画像を再度FTPツールで転送し、上書きしましょう。
その他では、ホームページスペースの容量超過でファイルが完全に転送できていない事が原因の事も
ありますので (画像に限らず) 使える容量を超過してしまっていないかを確認して下さい。
ページ先頭へ戻る
|
Q. 自分のサーバでは動いたが、プロバイダに転送したら動かない
多くの場合アクセス権の指定方法や内部の設定ミスですが、配布されているスクリプトの中には
標準モジュールと呼ばれるものを使用しているものがあり、この場合プロバイダ側にもそれらの
モジュールがインストールされていないと、動作しない又はエラーが出る原因となります。
自作のCGI ならば、標準モジュールを使わない方法で処理を行うように修正しても結構です。
ページ先頭へ戻る
|
Q. HTMLページを表示しようとしてもタグが反映されていない
HTMLページとしてブラウザで表示する為には、 Content-type のほかに、 <HTML>
や <BODY> などの
宣言が必要で、これらがなく Content-type: text/html のみの場合は、HTMLページとしてではなく、
単なるテキストとして表示される為、タグを書き込んでも反映されません。
当サイト内では、なるべく簡潔なソースにする為にソース内に宣言が無いものがありますので、必要な場合
はその都度追加して下さい。
例えば charset=Shift_JIS など文字コードの指定が無い場合は、ブラウザ側が違う文字コードで表示しようと
して、文字化けする場合があります。
ページ先頭へ戻る
|
Q. 文字化けはシフトJISのみでEUCは文字化けしない?
シフトJISで 表 や 能 などの文字が化けるのは、文字コードの2バイト目がASCII
コードに存在するコードと
重複している為で、EUCではASCIIコードと重複するコードが無い為、これらの文字でも化けません。
ページ先頭へ戻る
|
|
|
|
|
|
|
|
|
|
|
|