CGIだけどなんか質問ある Pert 5.01
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/03 12:49ID:673UxTI50756nobodyさん
02/04/07 02:32ID:GbMi0GS6すみません。
PerlをParlと書いていました・・・。(鬱
参考になりました。
ありがとうございました。
0758川上
02/04/07 17:12ID:adMQ+yzYUNIXサーバーからNTサーバーへCGI(Perl)の
移転に伴いエラーが発生し原因が究明できず困っております。
プログラムとしてはCSV形式でデータを保存するデータベースです。
UNIXサーバーでは問題なく稼動しておりました。
状況としてはデータベースの検索処理を行っている部分では
データファイル($logfile)の読み込みは[open(IN,"$logfile")]で
処理しており問題なく動作しています。
しかし、新規書込みにおいて、[open(OUT,">>$logfile")]
また、修正において、[open(OUT,">>$logfile")]で処理したところ
ファイルが開けないというエラーが発生しております。
これは何が原因で起きているのか解らない為 どこをどう調べれば
いいのか困っております。
情報の至らぬ質問かと思いますが是非
考えられうる原因をご意見を拝聴致したく
何卒 宜しくお願い致します。
0760川上
02/04/07 17:52ID:adMQ+yzYありがとうございます。まず エラーメッセージですが
The specified CGI application misbehaved by not returning a complete set of HTTP headers.
The headers it did return are:
と表示されreturn are:以降にエラー箇所の表示が出ておりません。
open(OUT,">>$logfile1") || &error("Write Error : データファイル1");で
ファイルが開けなかった時にエラー画面を出すようにしておりまして
そのエラー画面が表示されおります。
本件には関係ないと思いますが
当初 移転設定時にjcode.plの設定エラー時にはreturn are:以降にプログラム内での
require './jcode.pl';のラインをエラーとして表示してくれました。
0761川上
02/04/07 17:52ID:adMQ+yzYまず新規書込処理としてはフォームから受取ったデータを下記にて書込みをさせています。
----データの書込処理----
# ログを読み込み
open(IN,"$logfile1") || &error("Open Error : データファイル1");
@lines = <IN>;
close(IN);
# 1つ前の記事を取得し分解
($bno,$bp1,$bp2,$bq1,$bq2,$bq3,$bq4) = split(/<>/, $lines[$#lines]);
# 登録Noを取得
$no = $bno + 1;
# ログ更新処理
open(OUT,">>$logfile1") || &error("Write Error : データファイル1");
print OUT "$no<>$p1<>$in{'P2'}<>$in{'q1'}<>$in{'q2'}<>$in{'q3'}<>$in{'q4'}<>\n";
close(OUT);
----データの受取処理----
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# 文字コード変換
&jcode'convert(*value,'sjis');
# 禁止文字変換
$value =~ s/<>/<>/g;
# 削除情報
if ($name eq 'del') { push(@DEL,$value); }
$FORM{$name} = $value;
$no = $FORM{'no'};
$DEL = $FORM{'del'};
$in{$name} = $value;
}
--------
0762川上
02/04/07 17:53ID:adMQ+yzY他にどのような情報をご提示させて頂けばいいか
わからないために とりあえず こちらを書き込ませて
頂きました。 ご教授 宜しくお願い致します。
0763nobodyさん
02/04/07 18:22ID:???指定されたCGIアプリケーションは、HTTPヘッダーの完全なセットを返さないことにより
無作法に振る舞いました。それが返したヘッダーは次のとおりです:
0765川上
02/04/07 18:41ID:???早速 ご教授頂きありがとうございます。
情報としてヘッダー部分の表示が抜けておりました。
申し訳ございません。
ヘッダーのソースは
print "Content-type: text/html\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
print "<title>タイトル</title></head>\n";
print "<body>\n";
としております。
エラーが発生した際に エラー画面を表示させておりますが
表示されたソースをみると出力されるべきソースが途中で終わっておりました。
今回のエラーとは関係ないかもしれませんが追記させて頂きました。
UNIX環境では問題なく動きNT環境ではデータファイルに書込みが出来ないのは
どういったときに発生するものなのでしょうか。
ご教授 宜しくお願い致します。
0766nobodyさん
02/04/07 18:42ID:???にしてみて。どっちでもいいんだけどこっちが正式。
0767nobodyさん
02/04/07 20:49ID:???use CGI::Carp qw(fatalsToBrowser);
して、出力されたエラーメッセージ書け。
0768川上
02/04/07 21:25ID:???レスありがとうございます。
試して エラーメッセージを書かせて頂きますので
宜しくお願い致します。
0769やさしいお兄さん
02/04/07 23:26ID:???NPHスクリプトじゃない限りやってもやらなくても意味がないと思うゾ!
あと、Windows環境では、\r\n だと、印字するときに前もって binmode(STDOUT)
(標準出力の場合の例)をやっておかないと \x0d\x0d\x0a と3バイトになって
しまうのでは?
0770川上
02/04/07 23:57ID:???レスありがとうございます。
私がご教授をお願い致しました件(758 760 761)で
他より頂きました情報に
ファイルへの書込権限がないので ファイルオープンが失敗しているのでは
と頂いたのですがNTサーバーでもパーミッション設定が必要なのでしょうか?
0771nobodyさん
02/04/08 00:03ID:???そりゃいくらなんでも$Mをバカにしすぎ
0772やさしいお兄さん
02/04/08 00:54ID:???ファイルロックのとことかどうやってる?
まぁ、どちらにしろソースを全部みないとなんとも言えないから
どこかにアップしてくれや。
0773nobodyさん
02/04/08 05:15ID:AyL3x1HLと書いたんですが、オペラでやるとナナシタンとならずに空白で
そんままログファイルに書き込んでしまいます。
NN6やIE6では出来たんですが、なにか対処法などはあるのでしょうか?
0774nobodyさん
02/04/08 05:16ID:AyL3x1HLナンシタンじゃなくてナナシタンでした。
あと、そんままではなくてそのままでした。
言語と同時に日本語を学びます。
0775みかど ◆D9/neH06
02/04/08 10:54ID:???(既出なら悪い)
0776交付じゃないけどな
02/04/08 10:59ID:???ttp://www.gedoh.org/aki/2ch/current/bbs/
C言語でいいなら。
0777nobodyさん
02/04/08 23:55ID:???0778nobodyさん
02/04/09 11:12ID:TGMHutEB0779nobodyさん
02/04/09 14:24ID:c4h4V4YQいま、LWPのSimpleってやつを使って、cgiの変数を色々を変えて
結果をどばっと落とすプログラムを書いてます。
それで、変数の指定の仕方ですが、変数がtextだと
http://hogehoge/cgi-bin/hoge.cgi?hoge=hero
で上手くいくのですが、
変数がtextareaだと上手くいきません。
どしたらよいでしょうか?
0780nobodyさん
02/04/09 14:28ID:???0781nobodyさん
02/04/09 15:16ID:???0782初来板
02/04/09 17:08ID:H7fQTBug去年のスレが平然とゴロゴロ転がってるわけ?
0783nobodyさん
02/04/09 17:52ID:/BtheE/Chttp://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm
を読みながら作ってたんですが、
upload()で取ってきたinputの値がファイルハンドルになってくれません。
マニュアルに「use strict;だとperlが文句を言う」と書いてあったので
その関数の最初でno strict;しています。
それから、my $file = upload("file"); print ref($file);
とすると<UPLOAD>file</UPLOAD>という文字が帰ってきました。
これは関係ないですか?
0784nobodyさん
02/04/09 17:56ID:???このスレの1がCGI.pm使ったアプロダを作っていた気がする
http://pc.2ch.net/test/read.cgi/php/1001950501/l50
0785nobodyさん
02/04/09 18:59ID:XYR/ZMS70786nobodyさん
02/04/09 20:24ID:/BtheE/Cソース読んでみるとFile::Copy::copy()で保存してるみたいなので、
use File::Copy;
:
copy($file, "save") || die("error: $!");
としても、<UPLOAD>file</UPLOAD> No Such File or Directory
というエラーで終了してしました。
CGI.pmを関数として使ってるんですが、それが悪いのかなあ、と。
0787nobodyさん
02/04/10 04:17ID:???0788nobodyさん
02/04/10 04:18ID:c6LIImpcネットの読み物を探してみても、どうしても分からないです。
下のテストソースを実行させても出力が無いのはなぜですか?
#!/usr/bin/perl -w
use CGI qw(upload);
print <<"END";
Content-type: text/html
<html>
<body>
<form method="POST" action="$0" enctype="multipart/form-data">
<input type="file" name="upfile" value="" />
<button type="submit">send</button>
</form>
END
if ($ENV{"REQUEST_METHOD"} eq "POST") {
$file = upload("upfile");
print <$file>; # print <STDIN>; では出力がありました。
}
print '</body></html>'
__END__
0790nobodyさん
02/04/10 08:07ID:???あまりに古いと一部の機能が使えない。
0791nobodyさん
02/04/10 14:49ID:U5pgjWQyhttp://yokohama.cool.ne.jp/icefall/
にリロードボタンをつけるにはどうしたらいいんでしょうか。
投稿欄全て空白で書きこみボタンを押すと
「名前を入れて下さい」「内容を…」
と出る仕組みになってるのでリロードボタンを別に設置したいと思っています
ブラウザのリロードボタンを押しても更新されないようで (;´Д`)
0792初心者ですいません
02/04/10 14:54ID:pqz8X1Tu{$tanka = $gearn / $gvtnum;}
などと割算をしているのですが、割り切れないと処理が止まってしまいます。
(割り切れると大丈夫みたいなのです)
こういう場合はどうしたら良いのでしょうか?
どなたか宜しくお願いいたします。
0793nobodyさん
02/04/10 15:25ID:???$tanka = $gvtnum ? $gearn / $gvtnum : undef;
0794初心者ですいません
02/04/10 16:10ID:pqz8X1Tuどうも有り難う御座います。
こうするものなのですね・・・
0795nobodyさん
02/04/10 21:44ID:NYy94cTHたとえばたとえば発言をする前にセレクトフォームで「大きい」を選ぶと
発言が大きくなるとか。つまりはここのような機能です。
http://c.cgiboy.com/test/
0796nobodyさん
02/04/10 21:50ID:???http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0797nobodyさん
02/04/10 21:51ID:???セレクトフォームの内容によって出力内容を変えるだけ。
if($FORM{'select'} == 1){
$message = qq(<FONT SIZE=+2>$message</FONT>);
}
表示行数変えるのと一緒だろ。
頭使えよ。
0798nobodyさん
02/04/10 21:57ID:ZuHoR8rNスクリプトを改造してエラー処理を無くす。(おそらく&error("hoge")になってるだろう)
その代わりにコメント等が無い場合はスルーしてそのままリロードさせるようにする。
(書き込み処理をifで囲む)
それとブラウザの更新ボタンを試してみたけどちゃんと更新されるよ?
>>795
チェックボックスのvalueをifで受けてチャットのコメントの始めと終りに
<font size=4>hoge</font>というふうに付くよう、
if($DATA{'checkbox'} eq "middle") {$hoge=~s/(.+)/<font size=4>$1<\/font>/; }
みたいな感じで改造する。
以上パールで書かれていると仮定してのお話でした。
というかソース見てないけど多分パールだよね?w
0799nobodyさん
02/04/10 22:10ID:???上の者だけど、普通にリンクを貼ればいい話でした。すんまそん。
更新できないってのはおそらくformのvalueが残ったままで更新しようと
してるからエラー処理にひっかかってると思われ。
2チャンのリロードのリンクと同じようにそのCGIのURLを貼ればいいだけ。
0800nobodyさん
02/04/10 22:41ID:???0802nobodyさん
02/04/11 22:02ID:xrC+7yeQNetscape6.2で繋げた画像の先頭だけがおかしくなります。
これは、仕様なのでしょうか?
某有名CGI頒布サイトのサンプルでも同じようになります。
言語は、Parlです。
0803nobodyさん
02/04/11 23:39ID:???Parlなんて言語は知りません。
0804nobodyさん
02/04/11 23:50ID:xrC+7yeQすみません。また間違えてしまいました。
Perlです。
0805nobodyさん
02/04/12 00:02ID:???ttp://tohoho.wakusei.ne.jp/soft/gcat.txt
それじゃあ配布元を調べるという基本中の基本は?
0806nobodyさん
02/04/12 00:24ID:DCCb4BjX同じ資料ではありませんが、似通った内容は見たことがあります。
> 一番最初の画像の大きさが全体と異なる場合に表示がおか
>しくなるという、ブラウザ側のバグが原因だと推測しています。
とありましたが、画像のサイズは、全て統一しています。
0808113
02/04/12 03:55ID:xkmU3hC6うちんとこは全桁化けてるけど、もう知らん。ネスケ無視だ。がはははは。
てか、俺も解決策知りたし。
0809nobodyさん
02/04/12 07:20ID:???一番最初の画像=一番左の桁の画像
全体の画像=一番左から一番右まで全部含めた画像
0810nobodyさん
02/04/12 16:06ID:KhU9N1Jwすみません。
小学校から国語をやり直してきます。
0811nobodyさん
02/04/12 16:07ID:KhU9N1Jw仕様だったんですね。
ありがとうございました。
0812nobodyさん
02/04/13 19:59ID:ZRf5XmIQErrorDocument 404 /aaa.html
と書けば指定したサイトに、飛ばせるようなのですが
---
AuthUserFile /hoge/
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<Limit GET>
require valid-user
</Limit>
---
のどこに書けばいいのでしょうか?
お願いします。
0813nobodyさん
02/04/13 20:31ID:???http://pc.2ch.net/test/read.cgi/php/1003772635/l50
上記のスレのどちらかのほうがいいかも
0815nobodyさん
02/04/13 23:50ID:???PCからは絶対に見ることが出来ないように
出来るのであれば、やり方を教えてほしいです。お願いします。
0816nobodyさん
02/04/14 00:18ID:gxlmJk+G絶対は無理だろ。
ユーザエージェントで判断すればある程度はじけるが、
エージェント変更できる奴とかもあるしな。
0818nobodyさん
02/04/14 00:29ID:gxlmJk+G環境変数のUSER_AGENT調べて判断しる。
例えばdocomoならDocomo〜とかなってる。
0819nobodyさん
02/04/14 00:29ID:???REMOTE_HOSTで弾けたのが一年前 今はどうなんだろ
>>817
携帯のHTTP_USER_AGENT調べれ
0820nobodyさん
02/04/14 00:36ID:oStrNP4H0822817
02/04/14 01:51ID:???if($user_agent =@@@@@@@@) { $mobile = 1; }
DoCoMoとUP.BrowserとPDXGWとASTELとJ-PHONEのうちどれか一個あれば
引っかかるようにしたいのですが
@@@@@@@@@の部分をどういう風に書けばいいのですか?
お願いします。
0823nobodyさん
02/04/14 02:03ID:gxlmJk+G正規表現使えば?
$_ = $ENV{'HTTP_USER_AGENT'};
if(m/(DoCoMo|UP.Browser|...|...|...)/){
$mobile = 1;
}
0824nobodyさん
02/04/15 06:09ID:???CGIに入る人数制限をする方法を教えてください。
0825nobodyさん
02/04/15 06:19ID:???死ぬまでに1度は入りたいね。
0827nobodyさん
02/04/15 09:44ID:???負荷は上がります?
0828nobodyさん
02/04/15 10:09ID:???まず、なぜそんな回りくどい事をする必要があるか、200文字以内で説明せよ。
0829nobodyさん
02/04/15 13:12ID:???0830nobodyさん
02/04/15 13:17ID:???アナタノニホンゴムズカシイ。
何がどこにアクセスするのか?
何の負荷を気にしているのか?
0831nobodyさん
02/04/15 17:36ID:???このように記載すると時間と分と秒数が表示されるのですが、
これに30分足した時間を求めるにはどうすれば宜しいですか?
0832nobodyさん
02/04/15 17:58ID:???それを算出する為にlocaltime()使ってるだろ?
そこの数字に30*60をたしておく。
0833nobodyさん
02/04/15 20:45ID:7iLwapD7<a href="$image"><img src="$image" border=0></a>
の部分がありまして、
$imageの拡張子が .gif .jpg .png
の拡張子以外は別の代変え画像を表示したいのですが、
どうすればいいのですか?
0834nobodyさん
02/04/15 21:03ID:???$image = $image2; # $imageの中身を$image2に変更
}
print qq(<a href="$image"><img src="$image" border=0></a>\n);
0835nobodyさん
02/04/15 21:03ID:???タイプミス…
自分で修正して。
0836nobodyさん
02/04/15 21:18ID:???$image = $altimg if $image =~ /\.(png|jpe?g|gif)$/i;
print qq(<a href="$ancurl"><img src="$image" border=0></a>\n);
0838WebBeginer
02/04/16 01:35ID:DFygP1Bi例:
bcom.datの内容↓
<STYLE TYPE="text/css">
A { text-decoration: none; }
</STYLE>
cgiで読み込む文章↓
$bcomfile = "./bcom.dat";
open (IN,"$bcomfile");
flock (IN,1);
$bcom = <IN>;
close (IN);
これで$bcomをhtmlの中に書いても、最初の1行<STYLE TYPE="text/css">
しか格納されてないんですよね。
$FORM{'bcom'}=~ s/\r\n|\r|\n/<br>/g;
とすると、改行が<br>に置き換えられてしまうので、結果としてタグが機能しなくなってしまうんですよね。
何とかなりませんか?
0839nobodyさん
02/04/16 01:44ID:???リストに入れたいのならば普通に
@LIST = <IN>;
で改行で区切ってリストに格納される。
もしスカラーにまとめて格納したいのならば
$list = join("",@LIST);
でおながいします。
なぜ私がおながいしているのか謎である。
0840nobodyさん
02/04/16 01:45ID:???$bcom .= $_;
}
0841二重送信だったらスマソ
02/04/16 01:46ID:???while(<IN>){
$bcom .= $_;
}
0843WebBeginer
02/04/16 01:55ID:DFygP1Bicolor.datの中身↓
black<>silver<>blue<>silver
で、
$colorfile = "./color.dat";
open (IN,"$colorfile");
@COLOR = <IN>;
close (IN);
($bg_c,$tx_c,$li_c,$h_c) = split(/<>/,$COLOR[1]);
と書いても各変数に値が代入されないのはなぜですか?
0845nobodyさん
02/04/16 01:58ID:???0846やさしいお兄さん
02/04/16 02:01ID:???undef $/;
$bcom= <IN>;
$/= "\n";
これでおながいします。なぜおながいするのかは、わたしにも謎です。
0847nobodyさん
02/04/16 02:08ID:3Tlg2ssNどのあたりまで改造して原型をとどめないようにしたら自分のって言っていいんですか?
あー、このスクリプトおもしれーことやってるなーなんて思って
ガチャガチャいじってるうちに原型がなくなるときあるじゃないですか。
そういうのってだめなの?
0848WebBeginer
02/04/16 02:11ID:DFygP1Bi$body='<body bgcolor="$bg_c" text="$tx_c" link="$li_c">';
として、
<html>
$body
・
・
・
とすると、変数がむきだしに(ソースを見ると<body bgcolor="bg_c"・・・)となってしまい、うまくいかないのですが何故でしょう。
0849nobodyさん
02/04/16 02:13ID:???一から書いてAそっくりなものが出来た → OK
0850nobodyさん
02/04/16 02:14ID:???自分で調べると言うことも身に付けような。
0851WebBeginer
02/04/16 02:33ID:DFygP1Bi0853nobodyさん
02/04/16 03:56ID:???クオート風演算子の風ってのがなんか好き
これって一般的な言い方なんでしょうか?
qq()
0855nobodyさん
02/04/16 04:15ID:???■ このスレッドは過去ログ倉庫に格納されています