############################################## # # #  FAQまでいかないけどQ&Aコーナー  # # 2000.11.18 # ############################################## Q.ディレクトリの見方? A.ここでは、リロード時のスクリプトを   $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/*****.cgi';   データファイルを   $file = "/dialup/chichibu/cgi-bin/*****.dat";   画像ファイルを   $img = "/dialup/chichibu/gazo/gal1.gif";   と定義しています。   まず、私のプロバイダではCGIスクリプトをホームディレクトリの下にcgi-binというディレクトリを   作り(FTPで作りました)、その中に置くようになっています。   するとプロバイダのサポートが別のCGI専用領域に実行できる形でコピーします、これが$reloadの定義です。   例えば、自分のディレクトリからCGIを実行するプロバイダではここに直接、自分のディレクトリを定義すればいいでしょう。   データファイルは、chichibuが私のホームディレクトリですからdialupはプロバイダが私に与えた領域内での   ルートディレクトリになります(実際にはこの上にディレクトリが存在するはずですが私からは   見えません)私はデータファイルをとりあえずCGIスクリプトと同じディレクトリ内に置いてありますから   chichibu/cgi-bin/*****.datとなります。ここでデータファイル用にディレクトリ(data)を作ったとしたら chichibu/data/*****.datとなります。   画像ファイルも同じです、これは最初から分けたのでgazo/gal1.gifとなっていますが別にファイルと同じところでも   かまいません。 ※CGIスクリプトと同じ場所にあれば定義は、$file = "*****.dat";となります。 または、相対ディレクトリで表すと$file = "./*****.dat";となります。 Q.ファイル(*****.datや*****.txt、*****.log)の作り方? A.1.適当な場所で、右クリックで新規作成をクリック   2.その中のテキスト文書をクリック   3.『新規テキスト文書』ができるので、それを選んで右クリックで『名前の変更』クリック   4.ファイルの名前を入力し、拡張子を定義する(小文字)   5.これで空のファイルができましたのでサーバーにFTPでアップロードしてパーミッションを666にする。      ※拡張子はどれにしてもファイルとして使用できますが、管理することを考えるとデータファイルは    .dat 、スクリプトのようなテキストデータは .txtが良いです。 Q.訪問カウントやアクセスログを実行させるやり方? A.まず、CGIを起動させるためには『CGIの基礎説明』ページにあるようにいくつかの方法がありますが   SSIが使えない場合には、画像を出力する際にCGIスクリプトを実行させるのが簡単です。   例として、『アクセスログの記録』という更新プログラムを取り込む方法を説明します。   1.スクリプト集から『アクセスログの記録』をとります。   2.あなたのメインページに画像出力があればこのスクリプトの画像ファイル名とディレクトリをそれに代えます     画像がなければ、ダミーの画像ファイル(背景色と同じ色でGIF形式の最小サイズのもの)を作り     あなたのメインページの左上隅にでもHTMLでIMGタグで定義する・・・これは私の最初のページのソースを     ブラウザから見て下さい。下の2つはダミーを使いました。                     Q.日本語コード変換ライブラリ(Cgi_lib.pl v2.0)の使い方でコード変換が他と違う? A.私は、CGIの本通りに &ReadParse命令を使い$in{ }の変数に変換後のデータを格納していますが、他のスクリプトでは   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;のような式で直接変換しているようです。どちらでも   良いと思いますが私は簡単な前者で作っています。   但し、これは Cgi_lib.pl v2.0のバージョンだからできるのかもしれません。    Q.メールを送る仕組みを教えて下さい。 A.メールを送る機能sendmailはUNIXコマンドですので詳しくは、UNIXの本をお読み下さい、と前置きします。   まず、処理の流れですが...   1.送信ボタンをクリックするとそのボタンに対してのFORMタグからACTIONで定義されているCGIが呼ばれます   2.CGIはフォーム画面からの入力データを受け取ります。(そのようにプログラムします)   3.メールを送る定義は、sendmail 送り先のメールアドレス               送信データ........となります     ※この辺の定義は、パターンとして覚えて下さい。     受け取ったデータを$messageに入れたとするとこうなります open (MAIL,"|sendmail chichibu@po.kumagaya.or.jp"); print MAIL $message; close (MAIL);     これにより、MAILというファイルハンドルにsendmailへのパイプを結びつけられます     print MAIL $messageとすると$messageの内容がsendmailに渡され、close (MAIL)で     sendmailへのデータが終了とされ送り先のアドレスに送信されます。                                     (CGIプログラミング入門参考) Q.アンケートの集計結果に数字が加算されないで全部0のままなんですがどうしてですか? A.アンケートに限らず、私のCGIではフォームからの入力データを日本語コード変換ライブラリ(Cgi_lib.pl v2.0)の &ReadParse命令を使い$in{ }の変数に、変換後のデータを格納していますので、このライブラリがないと処理が正常に   終わったように見えても$in{ }の変数にデータが入りませんので結果的に、数字が加算されなかったり、表示されなか   ったりします。またCGIと違うディレクトリに置いたらスクリプトも変更しないとだめです。   ここで使われている日本語コード変換ライブラリはトップページから利用方法に行くとダウンロードできます。 Q.文字化けが発生してしまいますが、どうしてですか? A.これは2つ以上の文字コードが混在することにより発生します。   例えば HTMLからの入力は SJISというコードになり、それをそのまま表示しようとすると   サーバーがEUCコードを使っていることが多いためコードが混在してしまい文字化けが発生します。   解決策として、文字コードをすべてEUCに統一するという方法もありますが私はCGIによる入力データは無変換で   ファイルに登録しています。   (最初はSJIS変換をしましたが、時々文字化けを発生してしまいました) Q.文字化けについて教えてください A.これについては、『WEB裏技』のFAQに載っていますから、そちらを参照してください。 Q.バグがあるようですがどうしてですか? A.それは私が適当だからです、よってバグもけっこうありますが『おもちゃ箱』だから勘弁してください。   バグを見つけたらどしどしメールください、お待ちしております。 Q.CGIを作ってほしいのですが? A.有償無償に限らず、製作はいたしません、あしからず・・・。   但し、私のCGIをもとに、似たものを作りたい人に関しては、ちょっぴりお手伝いすることがあります。