トップページperl
981コメント266KB

CGIだけど、なんか質問ある?

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさんNGNG

print "くだらねぇー質問はココから始めろ!";
0002(゚Д゚)ハァ?NGNG
ムダスレ立てんなボゲェ。
0003名無しさんNGNG
黙って実行されてろ。
0004名無しさんNGNG
500 とかいうなよ
0005名無しさんNGNG
たまには、日本語話せよ。
0006名無しさんNGNG
1の頭の中は404だな。
0007名無しさんNGNG
ない
0008名無しさんNGNG
初心者の素朴な疑問ですが、cgiに大量のデータが送られてきた
として、これをcgi側でサイズチェックして大きすぎると判断したら
破棄してエラーメッセージを送り返すとします。
このときcgi側で読みこまなかったデータはそのままサヨナラして
くれるのでせうか? サーバのメモリのどっかに溜まったまま・・・
なんてことは絶対ナイジェリアですか?

0009名無しさんNGNG
送りたいんだけどだろ?>8
00108>9NGNG
いきなりgets(Cの場合ね)で読みこんだりするとヤバそうなんで、
環境変数でサイズをチェックした方がいいと思うんですが
これ、何メガバイトも送られてきたらどうすればいいんでしょう?
というのが質問の主旨でありんす。
0011名無しさんNGNG
それはデータ管理の範疇でCGIとは関係ねーだろ >>8
0012TDRNGNG
SSIの <!--#exec cgi="./????/****.cgi"-->は*.cgiスクリプトだと
どう書くんでしょうか?
0013名無阿弥陀仏NGNG
>>8
標準出力を使って「そのCGI」に送られたデータなので
そのCGIのプロセス自体を終わらせれば破棄されてるはずです
じゃないと困る。

>>12
質問の意味がよくわからないのですが。
http://xxxx/yyyy/????/****.cgi みたいなことかね?
SSI を実行した場所 http://xxxx/yyyy の後に付ければいいはず。
0014TDRNGNG
ちょっと判りにくかったでしょうか。
CGIでSSIの <!--#exec cgi="./????/****.cgi"-->機能を
使うという事です。
判る人だけレスください。
0015名無しさんNGNG
>>14
つまり、 <!--#exec cgi="./????/****.cgi"-->部分に実行結果
を埋め込みたいってこと?
・ASPを使う。
・PHPを使う。
・PerlからHTML::Embperlを使う。
・PerlからHTMLファイルをopenで普通に開いて、埋め込みたい部分
 を置換する
・ネットで調べる
0016名無しさんNGNG
フレームを使うはどうよ?
0017名無阿弥陀仏NGNG
一応、言っておくと <!--#xxxx--> をCGI側で print してもSSIそのものは構造上使えないからね。
15はそれに近いことをやろうとしてるのだけど、
CGI で実行させるなら
`` といか exec とかいう「CGIが」プログラムを実行させる命令を別に書かないといけない。
0018【質問】NGNG
アクセスカウンターで画像の表示が終わってから、
数字がスロットのようにぺロンって変わるcgi下さいな!
0019名無しさんNGNG
あげません >>16

つーか、それは「質問」とは言わない。
0020名無しさんNGNG
>1
お前、細かい構文にうるさすぎるんだよ!
ソースの流れから汲み取って判断できないのか?

500ばっかり出しやがって人間様をなめるな!!!
0021名無しさんNGNG
>20
確かに、俺もそう思う。
0022名無しさんNGNG
インタプリタからして壊れていると見た。
0023名無しさんNGNG
>20
まったくその通り!
;が抜けたくらいでエラーにすんなっ
行間を読め!

それにな、エラーを出す時はきちんと
「何処何処がエラーです」って教えろよ。
たまにいい加減なことをいうから探すのが大変だろ?
0024名無しさんNGNG
標準出力吐き出し系の掲示板作ってんだけど、
書きこんだあとに、そのページ表示してもブラウザのキャッシュ
がきいて書き込みが反映されてないような状態になります。
リロードすればもちろん見れるんだけど・・・

なんかヘッダとかで「キャッシュ使うなよゴルァ!!」みたくする方法はないですか?
できれば、javascriptとかみたいに環境に依存するような方法以外で・・・
I-MODEでも有効ならなお良しなんだけど
0025適当君NGNG
<META HTTP-EQUIV="REFRESH" CONTENT="1;URL=http://
0026初心者NGNG
あのー、HTMLだけでホームページ作るときってファイル一杯作って
リンクでつなぎますよね? CGIの場合もそういう風に処理の単位で
別ファイルにしてリンクでつないでいった方がいいんでしょうか?
それとも変数の値で全然違う振舞いをするようにしておいて、
ソースファイルは一つにしておいたほうがいいのでしょうか?
後者の方が重いのは分りますが、ファイルが一杯になるのはちと
面倒くさいんで...
0027名無しさんNGNG
>>24
串はずせ。
0028>26NGNG
好みで作ってよし!
0029名無阿弥陀仏NGNG
>>24
<META NAME="Cache-Control" CONTENT="nocache">
<META NAME="Pragma" CONTENT="nocache">

でいけると思う。CGIを直接参照しているなら

Cache-Control: nocache
Pragma: nocache

を Content-Type ヘッダに追加してもいい。
0030厚着deミロードNGNG
>29 Pragmaって なんでしょうか?
0031名無阿弥陀仏NGNG
タイムリーなハンドルだなおい(w
Pragma も Cache-Control もやってることは同じだから気にしなくていいよ。
とりあえず両方設定しとけばどっちかが有効になるっつうことで。
0032FW:【紹介】NGNG
アクセスカウンターで画像の表示が終わってから、
数字がスロットのようにぺロンって変わる
フリーのcgi紹介して頂けませんでしょうかぁ
003324NGNG
>25
それは適当すぎます(^^;)
>27
串なんかつかってないです
>29,31
ありがとほ、早速試して見まふ。
PragmaはC言語の#pragmaと同じような感じかな?
CGI直接参照標準出力オラオラ型CGIなんで直接ヘッダを吐いてみます。
0034名無しさんNGNG
>33
でもそのヘッダ吐くとオフラインで見れなかったと思うから
その辺、気に止めておいてくれ。
0035名無阿弥陀仏NGNG
>>32
あっちじゃ誰も答えてなかったな。
アニメーションカウンタはCGIではなくGIFアニメでやってると思うぞ。
0から1とか、3から4とか、9から0などに変わる動画のアニメGIFとかがあるんだろう。
まあCGI内部でもカウントアップ時に変動する数値は動画を使って
変動してない数値は静止画を使うっていう工夫はいるだろうけど。
JAVAでやってる場合もあるだろうがそっちは知らん。
003626>28NGNG
うーん。好みですか。じゃ、一つのシステムは一つのファイル
で作っときます。
PWSだとファイルのパスが何故かcgi-binからの相対パスで
書かないといけないのでファイルを分けるとディレクトリの構造が
代わった時に面倒くさいときが多々ありそうなので。
003732@アメリカのビスは..NGNG
>>35さん ありがとうございます〜!!
  ソース見るとCGIポイんです<IMG SRC="http...>
  CGIでアニメGIF使えたんですね。
0038日本強いねNGNG
Pragma: no-cache
HTTP/1.0で「キャッシュ使うな」指定するためのヘッダ
Cache-Control: no-cache
HTTP/1.1で「キャッシュ使うな」指定するためのヘッダ
* サーバ(及び中に介在させるプロクシ等)がすべてHTTP/1.1を理解できるならば、Pragmaはいらない。

Pragmaではno-cacheしか指定できないが、
Cache-Controlではキャッシュに関して色々な指定が出来る。
詳しくはRFC2616。
003920NGNG
で、CGIからの返答は無しか。

ちょっと都合が悪くなったからといってダミーの403返すなよな。
0040CGINGNG
401 Authorization Required
0041名無阿弥陀仏NGNG
>39
いや、そもそも来る気も無いとみたぞ。
0042名無しさんNGNG
やる気の無いヤツが立てたスレは盛り上がらない、という良い見本。
0043名無阿弥NGNG
38>> あ、誤字ってたか。
そうそう no-cahe でした。さんくす。
24 の人そのように直してください。修正希望あげ。
0044名無しさんNGNG
ファイルの中身を連想配列に入れたいんですが、なんかこう
もっとエレガントな方法ありませんか?perlに慣れてないんで
こんなヘボスクリプトしか書けませんでした。

 if (!open (FILE,$filename)) { &error(3); }
 foreach $tmp (<FILE>) {
  chop ($tmp);
  @a = split(/\t/,$tmp);
  $TBcategory{@a[0]}=@a[1];
 }
 close (FILE);
0045名無しさんNGNG
>37
これじゃないの。クルクルカウンター。

http://www2.biglobe.ne.jp/~nir/npc/
0046CGINGNG
if (!open (FILE,$filename)) { &error(3); }
s/^([^\t]+)\t([^\n]*)/ $TBcategory{$1}=$2; /e while <FILE>;
close (FILE);
0047名無しさんNGNG
>>29
ちょっと待て、誰も突っ込んでないが、name属性じゃなくてhttp-equiv属性だろ?!
もちろん、CGIならばhttp-equiv形式のmeta要素は一切必要ないが。
004844NGNG
( ̄□ ̄;)
すっ、すげぇ…

正規表現使うとここまで省略できるんですか。
まっことありがとうございましたっ!>>46さん
0049japuNGNG
%TBcategory = map { chomp; split /\t/ } <FILE>;
の方が良いかもしれません。
タブが複数個入る場合を考えて、split /\t/, $_, 2 とするのは良い考えです。
0050【多謝】NGNG
>>45様~
ぉ!!!ありがとうでした〜 早速、使ってみます。。。
0051CGINGNG
メモリの消費量を考えるとmapは使いたくない。
0052名無しさんNGNG
キャッシュの...
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
                      ...これで、いいの?
0053名無阿弥NGNG
>>47
う。多分それが正しいんだね。ありがとう。
違いがよくわかってないのでどう違うのか教えてください。
HTTPヘッダとして使われるものはこっちってことでいいのかな?

>>44
japuさんが言ってますが 46 なら\t が複数あっても改行まで2個めの\tも含めてすべて受け取れるけど
44 だと2個めの \t 以降は切り捨てられる違いがある。使い分けができます。
44 も同じ結果にするなら split/\t/, $tmp, 2) にすればいいのかな。

>>46
[^\n] はピリオドにしたほうが多分効率いいね。

>>52
で、いいと思います。あと Pragma も同様にね。
0054CGINGNG
>[^\n] はピリオドにしたほうが多分効率いいね。
それでchomp相当処理はどこでやるつもり?
0055CGINGNG
やり直し。
&error(3) unless (open (FILE,$filename));
undef %TBcategory;
while (<FILE>) { $TBcategory{$1}=$2 if /^([^\t]+)\t([^\n]*)/; }
close FILE;
0056新入りNGNG
すみません、いきなり質問で申し訳ないのですが、
環境変数、HTTP_REFERER ってどんな場合に環境変数に
代入されるのですか?
代入される場合と、されない場合があるのですが。。。
0057名無阿弥NGNG
>>54
ピリオドが「改行文字以外」にマッチなので [^\n] と同じ結果のはずです。
なので問題ないかと。
あと open(FILE, $filename) || error(3); なら見栄えもスッキリしますよ。

>>56
<A>タグなどでリンク(ここでは「最新レス100」など)を移動すると
その直前のURLが入っています。
URLを直接ブラウザに打ち込んで飛んだ場合は入らない(はず)。
たまに、ブラウザがバグって別ウィンドウのURLが入ってることもあるみたいです。
[unknown origin] が入ってることもあるけどこれは直打ちってことかな?
0058japuNGNG
man perlre:
. Match any character (except newline)
&nbsp;&nbsp;&nbsp;&nbsp;:
To facilitate multi-line substitutions, the "." character
never matches a newline unless you use the /s modifier,

try this:
$_ = "sakura\tmoe\n";
@hoe = /^([^\t]+)\t([^\n]*)/;
print "[@hoe]\n;
0059名無阿弥NGNG
あ、 & が抜けてた。さげ。
0060japuNGNG
個人的には、
open FILE, $filename or error(3);
0061名無阿弥NGNG
あ、なるほど。japuさんどうも。それと勘違い君で皆さん申し訳ない。
勉強になりました。
0062適当君NGNG
>>56
 ブラウザの"戻る"がアクティブでない時が変数の中身はカラ。
 ...「新しいウィンドウでリンクを開く」とか
0063名無阿弥NGNG
あれ?早とちりかな。
ピリオドでも [^\n] でも同じなのかな…。わからなくなってきた。

\s 使わなければ "." は \n にマッチしないということかな?
すいませんけど識者の方教えてくださいませ。
0064ぺこちゃんNGNG
こんばんわ。
GETでサーバーに送れるデータは254文字までと
書いてある本と書いてない本が有るんです。
私がテスト(IIS4)してみたら、300文字でも送れた
んですが、どうしてでしょうか?UNIXだとだめなん
ですか?
0065便乗さんNGNG
ココは「なし」ですよね?
0066>64NGNG
その本が古いだけじゃない?
今は数千文字でも大丈夫。
0067新入りNGNG
>>57さん >>62さん
いきなりの失礼な質問に答えて下さり有難う御座いました。
こちらで再現している状態と一緒なので、そういう仕組みに
なっているようですね。勉強になりました。本当に有難う御座いました。

0068名無しさんNGNG
プロバイダとかレンタルのCGI鯖ってPERLのモジュールの
入り具合はどんな感じですか?
Perl本体だけとか?
0069名無しさんNGNG
>Perl本体だけとか?
標準で入ってるモジュールはあるだろ(笑)
0070clearNGNG
Niftyだとuse Strictさえエラーになる。
モジュール消すにしてもプラグマぐらい使えるようにしといて欲しい。
0071名無しさんNGNG
use Strictって書いてエラーっていうのもおもろいな(藁
0072名無しさんNGNG
まあね。他の奴の相場は?
0073名無しさんNGNG
あら、しまったリロードしてなかった。
72 > 69 ね。
0074名無しさんNGNG
cc gcc sh httpd
0075等幅フォントって...NGNG
OS共通の等幅のスペルって、どないでしょうか?
<FONT FACE="等幅" COLOR="#AAAAAA">Copyright(C) 2000
XXX.All rights reserved.</FONT>
0076名無しさんNGNG
>>75
web制作管理板
http://mentai.2ch.net/hp/index2.html
0077名無しさんNGNG
CGIの負荷って、どうやって測るのですか?
また移転先探さなきゃ・・
0078名無しさんNGNG
ロードアベレージかな >>77
007944NGNG
先日はありがとう御座いました。
あれで作られた連想配列、key を与えればちゃんと取り出せるのですが
順番がぐじゃぐじゃになっているのはどういう事なんでしょうか?

順番に取り出したい場合はデータにuniqueなIDつけて、カウンタをkey
にして取り出すしか無いんでしょうか?

$flag = 0;
foreach $tmp (%TBmens_collar) {
 if ($flag == 1) {
  print "$tmp\n";
  $flag=0;
 } else {
  $flag++;
 }
}
0080名無しさんNGNG
掲示板のメッセージ欄でURLをしてもリンクされません。
ハイパーリンクジャンプするには、どうすればよいのでしょうか?
初心者ですがよろしくお願いします。
0081名無しさんNGNG
>>79
入門書でも読んでハッシュについて勉強しろ。
0082 NGNG
# 自動リンク
$in{'msg'} =~ s/($http_URL_regex)/<a href="$1" target="_blank">$1<\/a>/ig;
008380NGNG
>82さま
ありがとうございました。早速コピー&ペーストしてみたのですが、
残念ながらうまく、表示されませんでした。
やはり私では難しいすぎたのかもしれません。
でもいずれ使える時のために82さんのレスをテキスト保存しました。
お気遣いすみませんでした。
0084>83NGNG
$http_URL_regexってやつちゃんと設定してる??
008580NGNG
>>83
http://tako.2ch.net/test/read.cgi?bbs=perl&key=970569445&ls=50
0086名無しさんNGNG
CGIの中でsysytem文は使っちゃだめなんですか?

print "Content-type: text/html\n\n";
system "cat ./header.txt";
system "./sidebar.pl";
&mainroutine;

こんな感じで。
ちなみに sidebar.pl は SSI としては正常に動いています。
0087名無しさんNGNG
>86
使用自体に問題はないけど、printの出力はバッファリングされてるので、
systemと混ぜると出力データの順序がばらばらになってしまいます。
最初に $|=1 を実行して、printのバッファリングを停止すれば、
オーケーでしょう(動作効率は多少落ちる)。
008880NGNG
>84様
すみません。やはりダメでした。
OTDの掲示板なので、無理があったのかもしれません。
ありがとうございました。
0089>80NGNG
無理があるのはあなたの頭でございます。
わからないくせにCGIいじろうなんて考えるのやめとけ。
0090>87NGNG
サーバーがApacheのバヤイ、$|=1;をやっとかないと
ロックアウトしてまうということを「CGIのための実践入門Perl」で
読んだ。system関数つかわなくてもApacheでは$|=1;でバッファフラッシュ
はデフォつーことで理解しとけばオゲーですか?
0091名無しさんNGNG
>90
なにそれ聞いたことないよう。もうちょい詳しく引用きぼん。
009286NGNG
$|=1; というのを初めて聞きました。
結論から言うと上手くいきましたが何を意味するのかちょっと理解できていません。
結果オーライ的思考からいくとこれでいいのですがちょっと釈然としないものが・・
web出力の基本は標準出力であり、system文が絡むとなぜバッファリングの順が狂うのやら。
ともかく有難うございました。
009386NGNG
あ!今、理解できた気がします。
検索結果が膨大になるときでも、実行中に結果を順次表示しないのかが
これでわかりました。perlの中で出力を溜めちゃうんですね。
逆に$|=1; をトップに入れておけば途中経過がリアルタイムで
観察出来るって事でしょう。<ほぼ独り言

ついでになんですが、phpでバッファリングを止める方法ってありますか?
0094(゚д゚ )NGNG
馬鹿ばっか。
0095動かない///なんで?NGNG
print "Content-type: text/html\n\n";
print "<html><head><title>REMOTE_ADDR</title></head><BODY>\n">

while ( ($a,$b) = each %ENV) {
print "$a=$b<br><br>\n";
}
print "</body></html>\n";
0096名無しさんNGNG
>95
二行目の最後を見れば幸せになれるぞ
009795@動きましたNGNG
あっほんとだ!さんきゅ〜 ; ネ 
0098名無しさんNGNG
海外サーバーにおいた掲示板とかの日時が現地時間になってしまうのを
日本時間に直すにはどのようなスクリプトを書き足せばいいのでしょうか..
0099名無しさんNGNG
>98
$ENV{'TZ'}='JST-9';
これだけ追加。
010098NGNG
>>99さん

ありがとうございます!
できましたー!
0101RiVerNGNG
だれかs///gを使って、標準語を関西弁に変換するようにしてください
■ このスレッドは過去ログ倉庫に格納されています