[HOME]  [CGI PAGE]

良くある質問
  1. CGIがエラーで動作しない
  2. 「ファイルのオープンに失敗しました」と表示される
  3. 文字化けしてる
  4. 無料HPスペース(Freeweb・Miltonet等)においての広告タグの挿入方法
  5. CGIの動作で、書き込み時に「只今他の方が書き込み中です。ブラウザの
    「戻る」で戻って再度登録を行って下さい。」と表示される。
  6. 投稿後、書き込みはされているが、画面が戻らない。又は投稿後FILE NOT FOUND
  7. フォントサイズを変更したい
  8. パスの指定が良くわからない
  9. スクリプトをダウンロードしたら、いくつかファイルが無いよー
  10. スクリプトをダウンロードしたら、ファイル名が「tackydwncnt.cgi」。
  11. スクリプトを修正してると「メモリ不足のため、作業を実行出来ません〜」と表示される
  12. 『送信』や『クリア』ボタンを画像にしたい!
  13. 入力フォームに項目を増やしたい(減らしたい)!
  14. ログをダウンロードして、再度アップロードしたら表示がおかしくなった
  15. 画面は表示されるが、投稿フォームが表示されない(入力する部分が無い状態)…サーバーがProhostingですかね?)
  16. サポート掲示板で質問するのに「ソース」をアップロードしたいんだけど、どうやっていいのかわからない・・・
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";等にするだけです。

パスの指定が良くわからない

  ・CGI設置の際に、初心者の方は必ずここで詰まるかと思います。σ(^_^)が最初そうでした。

  ・『相対パス』は、"../"や"../../"のように"自分の場所から見て"、
  どの場所に対象のフォルダがあるか? というものです。。。。。。だそうです。(^^ゞ

  ・『絶対パス』は、至って簡単。"http://www.〜"のフルパスの事です。
  いや、たぶん違う(笑)
  何かね、「../」を使わないで、「/data/log/」みたいに、「../」が無いのが絶対パスかも。←かもって!!(爆)

  それでは具体例を。

 public_html
   |--cgi-bin
   |--bbs
   | |--ここにCGIがあるとします。
   | |--icon
   | |--log
   |--gif
   | |--icon2

このようなサーバー上のフォルダ構成があったとします。
  1.スクリプト内で、ログファイルの指定をする場合
    ■CGIと同じフォルダ内に置く場合は、"./ログファイル名"もしくは"ログファイル名"
    ■上記の"log"フォルダに置く場合は、"./log/ログファイル名"

  2.画像を指定する場合
    ■CGIと同じフォルダに置く場合は、上記と同様です。
    ■上記の"icon"フォルダに置く場合は、これも同じように"./icon/画像ファイル名"
    ■上記の"gif"フォルダに置く場合は、"../gif/画像ファイル名"
    ■上記の"icon2"フォルダに置く場合は、"../gif/icon2/画像ファイル名"

こんな感じです。
難しいようで実際はたいした難しくないんですよ〜♪
相対パスでは「../」とする事によって『一つ上の階層へ』の意味であり、「../../」とすると
『二つ上の階層(上記の例ですとpublic_htmlの位置ですね)へ』となるんです。
自分のサーバーのフォルダ構成さえ、上のように図で表す事が出来れば、
これから苦労しないと思いますよ〜

ただ!、Biglobeのサーバーでは、うちのスクリプトだけかどうかはわかりませんが、
相対パスでは動作しない場合がありました。ですので、その場合は絶対パスで
指定してみて下さいね。

スクリプトをダウンロードしたら、いくつかファイルが無いよー

  この問題はMacの場合にあるみたいですね。
  解凍した場合、0バイトのファイルが正しく解凍されない事があるらしいです。
  よって、空のテキストファイルを自分で作って下さいね〜

  ファイルの作り方。

  ■Windowsの場合
   エクスプローラー等対象のフォルダに移動し、右クリック→「新規作成」
   →「テキスト文書」でファイルが作成されます。あとは名前を「xxx.txt」のように
   するだけです。

  ■Macの場合
   よくわからないんだけど、シンプルテキスト等のエディタソフトで、
   新規文書を「別名で保存」で「xxx.txt」とするだけだと思います。

スクリプトをダウンロードしたら、ファイル名が「tackydwncnt.cgi」。

  これもMac+IE環境の場合にこうなるらしいですねぇ。(^^ゞ
  この場合は、ダウンロード後に本来のファイル名「xxxxx.lzh」等に変更して下さい。

スクリプトを修正してると「メモリ不足のため、作業を実行出来ません〜」と表示される

  ご使用のエディタソフトで利用可能なファイルサイズを超えてしまったんだと
  思います。エディタソフトを変更するしかありませ〜ん♪(^^ゞ

  Windowsであれば、オススメはエムソフトの『Emeditor』です。
  ホームページはこちらです。


『送信』や『クリア』ボタンを画像にしたい!

  スクリプト内に、
  print "<input type=submit〜>という部分がありますので、そこを
  print "<input type=image src=画像ファイル名>〜にするだけです。

入力フォームに項目を増やしたい(減らしたい)!

  申し訳ありませんがサポート範囲外(有料カスタマイズ範囲となります)ので
  サポート掲示板でこのご質問は受け付けておりません。m(_ _)m

ログをダウンロードして、再度アップロードしたら表示がおかしくなった

  これも僕の苦手とするところ(^^ゞでして、
  通常はアスキーモードでアップロードしてると思いますが
  バイナリーモードで転送してみて下さい。
  
  注意点ですが、ログファイルをローカル環境(自分のパソコンで)で
  修正した場合、適当に改行したりすると確実にログの表示がおかしくなり
  ますので、ログをいじる自信が無い方は修正しないほうがいいですよ〜(^^;;;


画面は表示されるが、投稿フォームが表示されない(入力する部分が無い状態)


海外サーバーの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」のように名前を変更。

▼アップロードの際の注意事項。

  1. ソース内部にて設定している【管理人用パスワード】は 削除するか適当な文字に変更しておいて下さいね。
    変更しないと、第三者にパスワードが漏れちゃうからね。

  2. ソースをアップロードして、サポート掲示板に投稿する前に、ソースが正しく表示されているかどうかを必ず
    お確かめ下さい。たまにアドレスが間違っている方がいらっしゃいますので。(^^ゞ