NO.202703の質問をしたものです。

1.Premature end of script headers: c:/www/public_htm/up_file.cgi

2.String found where operator expected at c:\WWW\PUBLIC~1\UP_FIL~1.CGI line 59, near "open INDD1, "$indd1""

3.syntax error at c:\WWW\PUBLIC~1\UP_FIL~1.CGI line 58, near "open(INDD1, "$indd""

4.Execution of c:\WWW\PUBLIC~1\UP_FIL~1.CGI aborted due to compilation errors.

2.3.4.のエラーについては、解決?できました。
(エラー行をコメント(#)にしたりしてるうちに・・・原因はよくわかりませんでしたが・・・)

1.のエラーの意味がわかりません。
 script headers って何のことなんでしょうか?

※ このエラーログはApacheのサーバーのログです
※ このCGIは、フォームデータを受けっとてファイルを更新するようになっています。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

私も改行コードの変換ということはやったことがないのですが、


参考URLにはshinsa14と同じエラーでの質問に対する答えのようなので、
参考にしてみてください。

>MAINでサブをコールだけの構造というのは、文法上、誤ってるのでしょうか?
sub1,sub2,sub3があるファイルをrequireしていればまったく問題ないと思いますよ。

また、KcatchというPerl用のデバッガがあるので、それを使ってみると、
「Premature end of script headers」より詳しいエラーが吐き出されると思うので、
使ってみてはいかがでしょうか。↓がダウンロードと説明ページです
http://www.kawa.net/works/perl/catch/news.html

参考URL:http://mm.apache.or.jp/pipermail/newbie/2001-Nov …
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考URLのところ参考になりました。
原因は、はっきりわからなかったんですが、なんとなく解決してしまいました。
また、よろしくお願いします。

お礼日時:2002/01/26 18:25

Premature end of script headersというエラーは、


「CGIからhttpdに返されたヘッダーが正常に終了していない」という大雑把なエラーメッセージなので、
原因は「これだっ」というのが特定できません。 エラーログがあるのならば、まずエラーログを見てみると
良いかもしれません。

一応、チェックするべきところを書いてみます。
1.ソースの1行目に#!/usr/local/bin/perlのようなperlまでのパスを記述してあると思いますが、
そのパスはあっていますか?
2.改行コードは正しいでしょうか?改行コードが正しくないと、#!/usr/local/bin/perlの後に
余分なものがついてパスが正しく認識されないので、確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

パスの記述は、あっているようです。

改行コードについてなんですが、改行コードを調べる方法がわかりません。
エディター(Wordpad)で単純に改行(Enter)しているだけなんですが、・・・

ご指摘のとおり、プログラムをべつのCGIにまるごとコピーして実行すると、
できたりすることがあります。
つまり、改行コードにかぎらず、変なコードが混ざってる(ソース上では見れない)ってことですかね・・・

ファイルをHexモードで表示できるツールみたいなのはありますか?

あと、このプログラムなんですが

 &sub1;
 &sub2;
 &sub3;

といった感じになっていて、MAINでは、サブを呼んでるだけなんですが、ここに簡単な、コードを追加すると動くみたいなんです。

例えば:

 &sub1;
 &sub2;
 &sub3;
 PRINT ”OK !¥n”

MAINでサブをコールだけの構造というのは、文法上、誤ってるのでしょうか?
  

お礼日時:2002/01/23 02:14

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Qcgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す

何度もPerlのところで質問していますが・・・今回は
ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います

以下の二つのファイルで構成しています(一部分だけ)

---form.html---
<form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data">
<textarea name="input_textarea" rows="20" cols="70"></textarea>
<input type="file" name="File" size=32>
<input type-"submit" value="ok">


---upload.cgi---
[formからの情報を配列変数に代入するスクリプト・・・]
use CGI;
$query = new CGI;
$filename = $query->param('File'); # ファイル名の取得
$type = $query->uploadInfo($filename)->{'Content-Type'};
同じファイル名が無いことを確認して、保存

という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。
かなり省略してます。

さて、、問題となるのは ENCTYPE="multipart/form-data" とすると
配列変数にFORMからの情報がうまく入ってくれないということです、
かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った
ファイルのアップロードができなくなってしまいます。
ENCTYPE="multipart/form-data" のオプションをつけて
配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。
テキストエリアを取り除くとファイルのアップロードはできます。
ただ、ファイルと入力したテキストを同時に処理することができないんです。

何度もPerlのところで質問していますが・・・今回は
ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います

以下の二つのファイルで構成しています(一部分だけ)

---form.html---
<form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data">
<textarea name="input_textarea" rows="20" cols="70"></textarea>
<input type="file" name="File" size=32>
<input type-"submit" value="ok">


---upload.cgi--...続きを読む

Aベストアンサー

うちではできましたよ。

ちなみに「配列変数」ってのが、、、。
どこで配列に値を格納しているのでしょうか?
そのあたりで妙な事になっているのですかね。。。?

-wオプションつけて変数名に誤りがないか調べてみるのもいいかもしれません。

以下かなり適当に作ってしまったサンプル。
でも動作確認済み。
------------------------------
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="upload.pl">
<TEXTAREA NAME="textarea"></TEXTAREA>
file : <INPUT TYPE="file" NAME="file">
<INPUT TYPE="submit" NAME="submit">
</FORM>

</BODY>
</HTML>
------------------------------

------------------------------
#!/usr/bin/perl

use CGI;

my $cgi = new CGI;

my $filename = $cgi->param('file');
my $textarea = $cgi->param('textarea');
my $type = $cgi->uploadInfo($filename)->{'Content-Type'};

open (OUTFILE,">>/tmp/feedback");
while ($bytesread=read($filename,$buffer,1024)) {
print OUTFILE $buffer;
}

print "Content-type: text/html\n\n";
print <<"_HERE_";
<html>
<body>
たぶん処理は正常に終了しています。<BR>
textarea : $textarea<BR>
type : $type
</body>
</html>
_HERE_
------------------------------

うちではできましたよ。

ちなみに「配列変数」ってのが、、、。
どこで配列に値を格納しているのでしょうか?
そのあたりで妙な事になっているのですかね。。。?

-wオプションつけて変数名に誤りがないか調べてみるのもいいかもしれません。

以下かなり適当に作ってしまったサンプル。
でも動作確認済み。
------------------------------
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="upload.pl">
<TEXTAREA NAME="textarea...続きを読む

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.

Qエラーログ「\x8ew\x92\xe8・・・」はどういう意味?

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
--------------

ActivePerl-5.6.1.638-MSWin32
Apache/2.0.55(Win32)

以下のような意味不明のサーバー「エラーログ」が出るのですが、何を意味しているのでしょうか?

スクリプト(フォームの入力値を取得するプログラム)の動作上はなんら問題はないのですが、必ず出るエラーなので、その意味が知りたいのです。

-------------
[Wed --] [error] [client --] \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83p\x83X\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r, referer: http://127.0.0.1/fmail.cgi
[Wed --] [error] [client --] \x8ew\x92\xe8\x...続きを読む

Aベストアンサー

Shift-JISの生バイト配列が文字になったモノですね。
デコードしてみると、

「指定されたパスが見つかりません」

となりました。
使用しているスクリプト中の、ファイルバスの部分を確認してみてください。
存在しないディレクトリやファイルを指定している部分があるのではないでしょうか。

Qerror_logファイルの中身で教えて・・「 Premature end of script headers: 」

Perl初心者です。
Perlでスクリプトを書いてます。
うまく動かないのでerr_logファイルを見ると下記の内容になっています。
[error] (2)No such file or directory: exec of /home/***/***.cgi failed
[error] [client **.**.**.**] Premature end of script headers: home/***/***.cgi
これは何を意味しているのでしょうか?(何処が悪いのでしょうか)教えて下さい。

Aベストアンサー

すでにレスがついていますが...

■No such file or directory: exec of
まず、「No such file or directory」の中でも、「exec of」の場合、Perlへのパスが間違っているため実行できないという場合が多いです。
同じ意味で、改行コードがLFでない場合も、制御コードが最後に続いてしまうため、このエラーがでます。
先頭のパスが#!/usr/bin/perl等、正しいか、改行コードがLFか確認してください。
#1や#2でかかれている、スクリプト中の他のファイルやCGIのパスの間違いでは、関数がエラーを戻すだけで、スクリプトのエラーにはなりませんので、今回は違うかと思います。
(dieするように自分で書いた場合は別ですが。)

■Premature end of script headers
これは、retrさんの書かれたとおりです。
Content-type: text/html
という行を出力する前にエラーでCGIが終了すると全てこのエラーが表示されるので、ほとんと手掛かりになりません。
ちなみに、上の「No such file or directory: exec of」のエラーが解決されても、他にエラーがあれば、またこれが表示されることも考えられます。

#以上、動いているCGIをわざと間違えて検証したので、間違っていないと思います...
私も開発中はパスにwオプションをつけることをお勧めします。

すでにレスがついていますが...

■No such file or directory: exec of
まず、「No such file or directory」の中でも、「exec of」の場合、Perlへのパスが間違っているため実行できないという場合が多いです。
同じ意味で、改行コードがLFでない場合も、制御コードが最後に続いてしまうため、このエラーがでます。
先頭のパスが#!/usr/bin/perl等、正しいか、改行コードがLFか確認してください。
#1や#2でかかれている、スクリプト中の他のファイルやCGIのパスの間違いでは、関数がエラーを戻すだけで、ス...続きを読む


おすすめ情報