No.4ベストアンサー
- 回答日時:
まず最初に。
コマンドラインで動かした場合、CGI関連のモジュールが正常に動作しない場合があります。
今回のエラーはその辺が関係しているかもしれません。
ちなみに、perl に -w オプションを指定すると、
・一度しか出現しない変数名(宣言のみで未使用)
・初期化されずに参照される変数
・危険、無駄と思われる処理
などをチェックして警告を出します。
最初の「Use of uninitialized value ~」は
$cgi->param('mode')の中身が無い(=不定)だからでしょうね。
これはコマンドラインで実行したからだと思います。
この手のエラーメッセージは、単語の意味を調べたり
英文を(変数名、サブルーチン名は除いて)検索に掛けてみたりすると
何がわかるかもしれません。
ところで、今の時点ではブラウザ上ではCGIは動作していますか?
もしそちらで表示できるのなら、以降の動作確認/デバッグは
ブラウザを介してやった方が良いでしょう。
前回書き忘れましたが、ApacheのログにもCGIのエラーは出ますので
(確かlogというフォルダに)そちらを参考にしてください。
コマンドラインでのチェックは、CGIモジュールの問題があるので、
あくまでも文法チェック、HTMLの出力確認程度に留めてください。
現時点ではブラウザで問題なく動作しています。今後はそちらでチェックしていきます。今回はいろいろご親切に有難うございました。とても助かりました。
No.3
- 回答日時:
>「ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています」
> cd (テストしたいCGIがあるフォルダ)
> (perlのパス) (テストしたいCGIのパス) > out.html
パス指定が間違っているかもしれません。
あと、ファイル名やディレクトリ名にスペースがある場合は、
ダブルクオート(")で囲ってください。
一応、細かく手順を書いておきましょうか
・perl.exeのパス:C:\usr\local\bin\perl.exe
・CGIの置き場所:C:\home\hoge\public_html\cgi_bin
・CGIファイル:test.cgi
としておきます。あとは自分の環境に置き換えて読んでください。
1. コマンドプロンプト起動
最初はC:Documents and Setttings\(ユーザ名)にいるはずです
2. CGIの場所まで移動
> cd C:
> cd \
> cd "home\hoge\public_html\cgi_bin"
ここまできたら
> dir
で、CGIのファイルがあることを確認しましょう
3. perlコマンド実行
・文法のチェック (チェックファイルCGIとほとんど同じです)
> "C:\usr\local\bin\perl.exe" -cw "test.cgi"
問題なければ、syntax OK と出ます
・実行+HTML出力
> "C:\usr\local\bin\perl.exe" "test.cgi" > out.html
これで、CGIファイルと同じ場所にout.htmlができますので
ブラウザまたはテキストエディタで中身を確認してみましょう。
途中で問題があればエラーメッセージが出ます。
この回答への補足
有難うございました!同じサブルーチン内に同じ名前の変数があったのでダメだったみたいです。一応out.htmlにきちんと出力されました。
しかしまだ、いくつかエラーがあるみたいです。ネット調べたのですがよくわからないのがいくつかあります。
「Use of /c modifier is meaningless in s/// at ・・・.cgi line・・・」
この部分では空白を置換している行なのです。何かおかしいのでしょうか?「$hennsu=~ s/ /and/gc;」としています。
「Use of uninitialized value in string eq at ・・・.cgi line・・・」これは変数が初期化されていないとネットに書いてあったのですが、直前で
my $cgi = CGI::new();
my$mode = $cgi->param('mode');
if ($mode eq 'read') {&READ();}
初期化してるはずです。
他のファイルから読み込んでいるサブルーチンにも
「Useless use of subtraction (-) invoid context at ・・・.cgi line・・・」
「Useless use of subtraction (.) or string at ・・・.cgi line・・・」
「se of uninitialized value in split at・・・.cgi line・・・」
とエラーがあります。いろいろ調べたのですが、何がエラーなのか良くわかりません。どんな問題があるのでしょうか?
No.2
- 回答日時:
チェックファイルのCGIがどういうものかはわかりました。
中でCGIを読み込んでエラーチェックしているんですね。
($cgiroom_cgiのところは実際にはちゃんとファイル名が書いてありますよね?)
他に考えられるのは
・CGI中のperlや各種ファイルのパス
・出力したHTMLのエンコード(charset指定と実際のテキスト)
あたりでしょうか?
まず一度、コマンドプロンプトで
> cd (テストしたいCGIがあるフォルダ)
> (perlのパス) (テストしたいCGIのパス) > out.html
を実行して、out.htmlがちゃんと出力&表示されるか、試してみてください。
この回答への補足
上記の方法でコマンドプロンプトを試してみたところ
「ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています」となってしまいました。この場合どこに問題があるのでしょう?
No.1
- 回答日時:
状況がよくわからなかったので
まず最初に、いくつか確認させてください。
・PCのOS種類、バージョン
・httpサーバソフトの種類(Apacheとか)
・動作確認はローカルでやっているのか?
(FTPでサーバーに置くのではなく、自分のPC内にあるCGIにアクセスしているのか?)
ちなみに、この手の問題では掲示板CGIのファイル自身に
実行属性が無かったりするというケースが多かったりします。
(Windowsの場合でパーミッションが有効なのかは知りませんが
チェックファイルのCGIというのがよくわかりませんが、
そちらだと、チェックファイルのCGIが内部で掲示板CGIを読み込んで
いるからOKなのだと推測します。
この回答への補足
すいません説明不足でした!
OSはXPです。
ローカルでApacheでやっています。
チェックファイルは下記のようなものです。
#◇ チェックするCGIファイルの名前
$cgiroom_cgi = ".cgi";
#======================================================================#
# CGIの実行 & 出力
$cgiroom_check= (split(/\\|\/|\:/,$0))[-1];
open(CHECK,$cgiroom_cgi) || &cgiroom_error("チェックしようとしたCGI($cgiroom_cgi)が見つかりません。");
while(<CHECK>){
last if /^__END__[\r\n]+$/;
$cgiroom_perl .= $_;
}
close(CHECK);
$cgiroom_perl =~ s/$cgiroom_cgi/$cgiroom_check/g;
eval $cgiroom_perl;
&cgiroom_error("$cgiroom_cgiを実行した結果エラーが報告されました。<hr><pre>$@</pre><hr>CHECK ") if $@ ne "";
exit;
sub cgiroom_error{
print "Content-type: text/html\n\n";
print "$_[0]<hr size=1><pre>$]</pre><hr size=1><a href=\"http://cgiroom.nu\" target=cgiroom>CGIROOM</a>";
exit;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- ドライブ・ストレージ vhdxファイルからのデータの取り出し方 4 2023/06/14 23:53
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Windows 10 win10 立ち上げ時のエラー 1 2023/04/17 11:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
ホームページでCGIのフォームを...
-
(フリーの)ツリー掲示版CGI、...
-
古ーくからフリーのtree.cgi掲...
-
フォームを再送信しますか?
-
ラズパイでのCGIで、pythonソー...
-
.htaccessでサーバエラー
-
opencvのコード、エラー発生
-
htmlからパラメータで、cgiに渡...
-
CGI.pmはもう古い!?
-
チェックボックスでのvalue値の...
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIでソースがそのままでてしま...
-
XサーバーでCGIを使うには??
-
phpの中で外部のcgiを実行させ...
-
ファイルをアップロードするフ...
-
Windowsで作った *.cgi ファイ...
-
メールフォームの作成(sendmail)
-
.cgi拡張子のままCGIファイルを...
-
CGIが実行されずにダウンロード...
-
フレームページでSSIを使ってア...
-
Linuxで拡張子は必要か
-
CGIをコピーしたのですがうまく...
-
ファイルのダウンロードがうま...
-
UTF-8で書いたperlのパスが正し...
-
xyzzyで拡張子がcgiやpl, pmの...
-
ファイルのアップロードとログ
-
ブログのデータをアップロード...
-
BBS掲示板でのhtmlとcgiの関係...
-
cgiファイルのhtmlファイルへの...
-
排他処理について教えてください。
-
一つのファイルだけにPremature...
おすすめ情報