| 良くある質問 |
| CGIがエラーで動作しない |
1.設置したCGIにアクセスした際 『Internal Server Error』が表示される場合
【原因】
→Perlのパスが間違っている、jcode.plのパスが間違っている
→パーミッションの設定
・cgi及びjcode.plは「755」、その他は「666」となっていますか?
又、独自でフォルダを作成した場合、そのフォルダのパーミッションが
「777」になっていますか?
※プロバイダーによっては上記以外の場合があります。
→カスタマイズした際にミスがあった可能性があります。
【対応】
■…『記号』の使い方の誤り
「 $title = 'ここにタイトルを表示します';」というような行に対して、
$title = 'Tacky's Room'; としたり、
$title = "Tackyの"CGI"のページです";
とした場合、これはエラーになります。
まず基本として、文字列を変数に代入は、$a = 'xxx'; 又は $a = "xxx";のように、
シングルクォーテーション『'』、又はダブルクォーテーション『"』で囲みます。
両記号の使い分けは、$a = "Tackyの"CGI"のページです"; とすると、
ダブルクォーテーションが途中に入ってますよね?これはエラーとなってしまいます。
この回避方法としては2種類あります。
一つは、シングルクォーテーションを使用する場合。
$a = 'Tackyの"CGI"のページです';
もう一つは、
$a = "Tackyの\"CGI\"のページです";
では、上記で書いた『$title = 'Tacky's Room';』はどう修正しましょう?
これも、今書いた『$title = 'Tacky\'s
Room';』でオッケーです。
結論: 『"』、『'』、『&』等の記号を使用する場合は、
直前に『\』を付けるようにクセをつけておいた方が良いですね。
■…『;』や『{ }』、『( )』の付け忘れ。
Perlの基本として、一つの命令の最後には必ず『;(半角ですよ)』を付けなければ
なりません。これが1ヶ所無いだけでも動作しません。
○: $title = 'Tacky's Room';
×: $title = 'Tacky's Room'
○: if ( $a eq 'yes' ) { $b = 'yesだよ' }
×: if ( $a eq 'yes' ) { $b = 'yesだよ'
×: if ( $a eq 'yes' ) $b = 'yesだよ'
×: if $a eq 'yes' { $b = 'yesだよ' }
■…日本語スペースの混入。
コメント部分(#がついている以降)以外に余計な日本語スペースがあった場合
エラーとなります。気を付けて下さい。
2.設置したCGIにアクセスした際 『未検出』でエラーだった場合
【原因】
→スクリプトへのパスが間違っている。
【対応】
→設置したアドレスが正しいかを確認する事。
| 「xxxxファイルのオープンに失敗しました」と表示される |
・ログファイルやiniファイル等の指定を「http://〜」からのフルパスで指定していませんか?
CGIと同じ所に置いているのであれば、初期設定「./xxxxxx.txt」のままでオッケーです。
・ログファイル(xxxx.txt等)をサーバーにアップロードしましたか?
・ログファイルのパスは合ってますか?
・パーミッション(通常は666)は合ってますか?
| 文字が化けてしまう |
$title = 'ここにタイトルを表示します'; #<<<タイトルを指定
↑こう指定すると"表示"という文字が文字化けすると思います。
漢字によって文字化けする文字があるようですね。
こういった文字化けする場合は、以下のように漢字の前に『\』を指定して下さい。
$title = 'ここにタイトルを\表\示します';
#<<<タイトルを指定
| 無料HPスペース(Freeweb・Miltonet等)においての広告タグの挿入方法 |
無料HPスペースをレンタルされている方がCGIを設置される場合、
プロバイダー側からの規定で『広告を表示するように』と言われている場合、
以下の内容で修正してみて下さい。
『広告をウインドウ最上部に表示する場合』
→スクリプト内には、必ず以下の行が存在していますので、その直後の行に
広告を表示させるタグを書いて下さい。
print "<title>$titlename(又は$title)</title></head>\n";
#↓Freewebの場合
print "<a href=\"http://www.freeweb.ne.jp/cgi-bin/changebanner.cgi?no=1&action=href\">";
print "<img src=\"http://www.freeweb.ne.jp/cgi-bin/changebanner.cgi?no=1\"></a>\n";
#↓ミルトネットの場合
print "<!-- MILLTO_BAR:BEGIN -->\n";
print "<!-- MPID=#### TYPE=N GUESTBOOK=0 -->\n";
print "<DIV align=\"center\">\n";
print "<TABLE border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
print "<TR><TD><MAP name=\"millto_bar\">\n";
print "<AREA coords=\"0,#,#,#\" ";
print "href=\"http://www.millto.net/?MPID=####\" ";
print "target=\"_top\" "; print "alt=\"ミルトクラブ・トップページ\">\n";
print "<AREA coords=\"#,##,##,15\" "; print "href=\"http://www.millto.net/catalog/?MPID=####\"
";
print "target=\"_top\" ";
print "alt=\"ショッピング・カタログ\">\n";
print "<AREA coords=\"#,0,###,#\" ";
print "href=\"http://www.millto.net/mindex/?MPID=####\" ";
print "target=\"_top\" "; print "alt=\"会員ページ・インデックス\">\n";
print "<AREA coords=\"#,####,##,###\" ";
print "href=\"http://www.millto.net/mbest/?MPID=####\" ";
print "target=\"_top\" "; print "alt=\"ミルト・ベスト\">\n";
print "<AREA coords=\"#,##,#,15\" ";
print "href=\"http://www.millto.net/search/?MPID=####\" ";
print "target=\"_top\" "; print "alt=\"会員ページの検索\">\n";
print "<AREA coords=\"#,0,#,###\" "; print "href=\"http://www.millto.net/tools/ranking/?MPID=####\"
";
print "target=\"_top\" ";
print "alt=\"ランキングを投票\"> ";
print "</MAP>\n"; print "<A href="http://mb.millto.net/link/\" target=\"_top\">\n";
print "<IMG src=\"http://mb.millto.net/ad/?MPID=####&TYPE=N\" ";
print "width=\"468\" height=\"60\" border=\"0\"></A>\n";
print "<BR><IMG src=\"http://mb.millto.net/img/millto_bar_N0.gif\"
print "width="468\" height=\"18\" border=\"0\" usemap=\"#millto_bar\">";
print "</TD></TR></TABLE></DIV>\n";
print "<!-- MILLTO_BAR:END --><br><br>\n";
『広告をウインドウ最下部に表示する場合』
→スクリプト内には、必ず以下の行が存在していますので、その直前の行に
広告を表示させるタグを書いて下さい。
print "</body></html>\n";
#↓Freewebの場合
print "<a href=\"http://www.try-net.or.jp/\">";
print "<img src=\"http://www.freeweb.ne.jp/ad/trynet.gif\"></a>";
print "<a href=\"http://www.freeweb.ne.jp/\">";
print "<img src=\"http://www.freeweb.ne.jp/ad/freeweb_s.gif\"></a>\n";
修正ポイントは!
■文字列を「print "〜文字列〜";」の形式に修正。
■文字列内の「"」は「\"」にする。
※Freewebの場合、「1行で書いて下さい」 となっていますが、上記の方法でばっちりです!
「print文」とは、htmlソースを作成する命令であり、基本的な書き方は「print "";」です。
実際、改行の命令を与えている箇所が「\n」という部分です。
例えば、上記のFreewebの『広告をウインドウ最下部に表示する場合』をみてみましょう。
実際「4行」書いてますが、各行の終端部分に「\n」があるのは、4行目だけでしょう?
という訳で、このCGIが動作した場合のhtmlソースを見てもらえればわかると思いますが、
上記のprint文は1行にダラダラダラ〜となっていま〜す♪(・・・いるはずです。(^^ゞ)
| CGIの動作で、書き込み時に「只今他の方が書き込み中です。ブラウザの 「戻る」で戻って再度登録を行って下さい。」と表示される。 |
これは、「xxxxx.lock」というファイルがサーバー上に存在しているから発生するエラーです。
各スクリプトの説明ページで記載していませんでしたが、この「lock」ファイルは、
スクリプト側で自動生成&削除を行いますので、自分で作成したサーバーにアップ
ロードする必要はありません。
ですので、サーバーに「xxxx.lock」というファイルがあったら削除して下さい。
■Lockファイルって具体的にどんな風に使っているファイル?具体例を書きますね。
・Aさんが書き込みを行いました。
・CGIがxxxxx.lockというファイルを自動で作成します。
・Aさんのメッセージを書き込み中に、Bさんが書き込みを行いました。
・CGIがxxxxx.lockというファイルを見つけました。(Aさんが投稿中なので)
・Bさんのブラウザ上に「他の方が書き込み中です」と表示されます。
・Aさんの書き込みが終了しました。
・CGIがxxxxx.lockを自動で削除します。
・Bさんが再度投稿しました。
・xxxxx.lockが存在していませんので、Bさんの投稿が正しく行われます。
・・・というように、同時書き込みされた場合のログ消失を防ぐ為に使用している
ファイルが「xxxxx.lock」というファイルなんですよ♪
| CGIの動作で、書き込み時に「エラー」となるが、書き込みは正常だった場合 |
■プロバイダーがBiglobeの場合でこんなのがありました。
今までの経験上、Biglobeの場合しか見た事ないのですが、
「Location: CGIファイル名\n\n;」(HPを表示させる命令ね)の指定において、
CGIファイル名の部分が相対パス(./CGIファイル名)では動作しなく、絶対パス
(http://www.〜CGIファイル名)だと動作しました。
ですので、当サイトのスクリプトでもし、この現象が発生した場合は、
どのスクリプトでも必ずある「$script = './xxxxxx.cgi';」の部分を絶対パス
(「$script = 'http://www.〜xxxxxx.cgi';」)で指定してみて下さい。
又は、$script = './xxxxx.cgi';の部分の書き換えミス。
■サーバーがWindows NTサーバー+IISの場合。
投稿後、Locationヘッダーを発行しているのですが、IISの場合だめみたい。(^^ゞ
→スクリプト内部に、「print "Location: $script?\n\n";」という部分が何ヶ所かあります。
その上に数行追加して、下記のようにしてみて下さい。
それでもダメだった場合は、Locationの行を削除して、下記のようにしてみてね。
■ <head>タグを定義している部分に以下の行を追加したら全体のフォントサイズが変更出来ます。
※LISAさんありがとう!(^^ゞ
sub header {
print "Content-type: text/html\n\n";
print "<html>\n<head>\n";
print "<title>$title</title>\n";
print <<EOM;
<style type="text/css">
<!--
body,tr,td { font-size: 10pt;}
-->
</style>
EOM
print "</head>\n";
■スタイルシートを使用しない場合は、ひたすら変更したい箇所に<font>タグを追加して下さい。
例えば、フォントサイズを「入力フォームの"Name","Email"」の文字を
フォントサイズ「2」に変更したい場合
・スクリプト内で変更したい文字列を検索します。
※上記の"Name"、"Email"等
・print "<td>Name</td>\n";等と書かれていると思います。
それを
・print "<td><font size=2>Name</font></td>\n";等にするだけです。
※その他として、投稿された項目の場合は、投稿者の「名前」や「コメント」等
のログファイルに書かれている内容のフォントサイズを変更したい場合
1.基本的にうちのスクリプトで、ログを表示する部分は、
「sub view」と書かれている所でログ表示処理を行っています。
そこから下をとりあえず見て下さい。
2.そうすると、「foreach ( @LOG )」や、「for ( $i = $d 〜」等と書かれている
部分があります。
その直後に、「($no,$name$email,$comment〜) = split(/,/,$_)」等と
ありますよね〜?
そこが、ログファイルからデータを取り出している大事な所です!
3.あとは、その下の方に、$nameやら$emailやら$comment等が
print文(htmlとして書き出ししますよーの命令)として書かれていますので、
それを上記の例のように変更して下さい。
・print "<td>$name</td>\n";等と書かれていると思います。
それを
・print "<td><font size=2>$name</font></td>\n";等にするだけです。
| パスの指定が良くわからない |
| スクリプトをダウンロードしたら、いくつかファイルが無いよー |
この問題はMacの場合にあるみたいですね。
解凍した場合、0バイトのファイルが正しく解凍されない事があるらしいです。
よって、空のテキストファイルを自分で作って下さいね〜
ファイルの作り方。
■Windowsの場合
エクスプローラー等対象のフォルダに移動し、右クリック→「新規作成」
→「テキスト文書」でファイルが作成されます。あとは名前を「xxx.txt」のように
するだけです。
■Macの場合
よくわからないんだけど、シンプルテキスト等のエディタソフトで、
新規文書を「別名で保存」で「xxx.txt」とするだけだと思います。
| スクリプトをダウンロードしたら、ファイル名が「tackydwncnt.cgi」。 |
| スクリプトを修正してると「メモリ不足のため、作業を実行出来ません〜」と表示される |
| 『送信』や『クリア』ボタンを画像にしたい! |
| 入力フォームに項目を増やしたい(減らしたい)! |
| ログをダウンロードして、再度アップロードしたら表示がおかしくなった |
| 画面は表示されるが、投稿フォームが表示されない(入力する部分が無い状態) |
海外サーバーのProhostingをご使用されている方の場合に発生するようです。
当サイトのスクリプト内にあるスタイルシートの定義「$css_ctyle」 との相性が悪いようなので
同サーバーをお使いの方は、スタイルシートの定義をおやめください。
$css_style = <<"EOM";
STYLE="font-size:$pt;color:#000000;border:1 dotted #cccccc;" onFocus="this.style.backgroundColor='#ffffcc'" onBlur="this.style.backgroundColor='#FFFFFF'"
EOM
の4行で記載されている部分を、
$css_style = "";
の1行にしてください。
| サポート掲示板で質問するのに「ソース」をアップロードしたいんだけど、どうやっていいのかわからない・・ |
「お手持ちのCGIソースのファイル名を変更して、自分のサーバーへアップロードして下さい」
という事です。
例:「mkakikomitai.cgi」→「mkakikomitai_cgi.txt」のように名前を変更。
▼アップロードの際の注意事項。
- ソース内部にて設定している【管理人用パスワード】は 削除するか適当な文字に変更しておいて下さいね。
変更しないと、第三者にパスワードが漏れちゃうからね。
- ソースをアップロードして、サポート掲示板に投稿する前に、ソースが正しく表示されているかどうかを必ず
お確かめ下さい。たまにアドレスが間違っている方がいらっしゃいますので。(^^ゞ