トップページ⇒php
983コメント345KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。01/09/18 18:17ID:plR9HC2E
print "くだらねぇー質問はココから始めろや!\n";

print<<HTML_END;
<a href="http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833" target="_blank">旧スレ</a>
HTML_END
0910 01/12/19 14:47ID:Ay+y58z0
>>909
ありきたりな文字列なら解ける可能性はあるけど。
それより漏れも>>898に正規表現を使うわけを聞きたい。
0911名無しさん@お腹いっぱい。01/12/19 15:11ID:???
ついでに、「マホ」ってのはどこかの板で流行っている書き方なのか、
それともタイプミスなのか、それも聞きたい。
0912名無しさん@お腹いっぱい。01/12/19 16:08ID:ysls8V+7
速報板マツリの予感・・・
http://choco.2ch.net/test/read.cgi/news/1008739542/
0913名無しさん@お腹いっぱい。01/12/19 16:19ID:yulg3qde
すいません、>>905を書いた者ですが、
掲示板システムを作ってまして、
一度読みにきたら、その後10秒間は
304 Not Modified
を返すようにしたのですが、
IEだと何の問題もないのですが、
ネスケ4.75だと、
「ドキュメントにデータが含まれていません」
とエラーが出るのですが、どうしたらいいのでしょうか?
0914 ◆JAPUTeX. 01/12/19 18:48ID:wM5++m8M
If-Modified-Since が無い場合には 304 返したらマズいような。
# 嘘かも。

Not Modified 返したいなら、Last-Modidied: を吐き出せばよきに計らってく
れますが、それではダメですか。少なくとも apache ならその情報を利用して
200 or 304 を決めてくれます。

#! /bin/sh
echo "Content-Type: text/html"
echo "Last-Modified: Wed, 19 Dec 2001 09:25:42 GMT"
echo ""
echo "moe"

たとえば、こんなCGIプログラムだと、

最初のアクセスは 200 (OK) が返りますが、
18:27:26.437068 2001:2c8:35::2.80 > 2001:2c8:35::3.3044: P 1:243(242) ack 535 win 65535 [flowlabel 0x610cf]
<snip>
0x0030 6ce5 d55d 5018 ffff 7dca 0000 4854 5450 l..]P...}...HTTP
0x0040 2f31 2e31 2032 3030 204f 4b0d 0a44 6174 /1.1.200.OK..Dat
<snip>

次からは 304 (Not modified) が返ってきます。
18:27:28.719320 2001:2c8:35::2.80 > 2001:2c8:35::3.3044: P 259:411(152) ack 1069 win 65535 [flowlabel 0x610cf]
<snip>
0x0030 6ce5 d773 5018 ffff 0498 0000 4854 5450 l..sP.......HTTP
0x0040 2f31 2e31 2033 3034 204e 6f74 204d 6f64 /1.1.304.Not.Mod
0x0050 6966 6965 640d 0a44 6174 653a 2057 6564 ified..Date:.Wed
<snip>

負荷を下げるために頻繁に読み込んで欲しくないというのであれば、Expires:
を使うと吉かも。
0915名無しさん@お腹いっぱい。01/12/19 22:12ID:FzZSVld0
windows MEはユーザーエージェントでどういう風に表現されるのでせうか。
windows 98のヴァージョン違いは異常にたくさんあるのですが。

Windows 98; Win 9x 4.90

というのがやけに多いのだけれどこれでしょうか?
091691301/12/20 01:55ID:U8Brc/IO
>>914
ありがとうございます。Expires:ですか。
調べてみます。

それと、ふと思ったのですが、CGIで動的にWebページを生成する形態で
apacheはどうやって更新されたかどうかが分かるのでしょうか?

すいません、ひょっとしてモノ凄くドキュソなことを
聞いてるのかも知れませんね・・・
0917名無しさん@お腹いっぱい。01/12/20 02:47ID:???
>>916
> それと、ふと思ったのですが、CGIで動的にWebページを生成する形態で
> apacheはどうやって更新されたかどうかが分かるのでしょうか?
普通のCGIではCGIスクリプト自体は常に呼び出される。
で、CGIスクリプトが"Last-Modified:"をつけて返事を返し、
クライアントからのリクエストに"If-Modified-Since:"があれば、
それらを比較してLast-Modifiedの方が古い場合はクライアントに
"304 Not Modified"を返してCGIスクリプトからの出力は転送しない。

nphスクリプトの場合は、ApacheはCGIスクリプトの出力をそのまま
クライアントに返すだけなので、CGIスクリプトが自前でHTTP_IF_MODIFIED_SINCE
を処理して"200 OK"か"304 Not Modified"を返す必要がある。

通常のCGIでもHTTP_IF_MODIFIED_SINCEで処理を変えた方が、転送量には
関係ないけどサーバの負荷軽減には効果があるよ。
091891301/12/20 03:17ID:iiNlv5yL
>>917
あ、いえ、それはわかるんです。
でも、>>914の方のを読むと、
CGIでもLast-Modified:をつけておけば
apacheが自動的にやってくれる、と言う感じに読めますので。
0919ルータス01/12/20 03:21ID:???
倉庫にも落ちてないスレを観覧できるCGIがおいてあるURL教えてくれませんか
0920名無しさん@お腹いっぱい。01/12/20 03:43ID:???
( ´,_ゝ`)
092191701/12/20 04:31ID:???
>>918
> CGIでもLast-Modified:をつけておけば
> apacheが自動的にやってくれる、と言う感じに読めますので。
自動的って、まさかCGIを動かすかどうかを自動的に決定するってこと?
CGIは常に実行しないとLast-Modified:ヘッダが取れないじゃん。
自動的に行われるのは、
・HTTPステータスを200にするか304にするか
・304の場合にはCGIの出力したボディ部分を捨てる
という動作。914さんも同じこと言ってると思う。
092291301/12/20 04:58ID:iiNlv5yL
>>921
あぁ、なるほど、理解しました。
すいません。アフォでした。

あと、>>913に書いたネスケ4.75ですが
CGIで304を送ると、「ドキュメントにデータが含まれていません」なのに
そのCGIで出力したHTMLに埋め込んである画像には
apacheが304を送って何の問題もなく動作してるようなのですが、
これはどうなってるんでしょうか・・・・。
0923名無しさん@お腹いっぱい。01/12/20 05:54ID:???
>>922
> CGIで304を送ると、「ドキュメントにデータが含まれていません」なのに
access.log を見て、apacheが本当に304で返してるかどうか確認してみれ。
0924家からです。01/12/20 06:11ID:???
HTTP/1.1 302 Found Date: Wed, 19 Dec 2001 20:52:42 GMT Server: Apache/1.3.6 (Unix) PHP/4.0.3pl1 mod_gzip/1.3.19.1a mod_ssl/2.3.6 OpenSSL/0.9.3a Location:
http://www.he.net/cgi-bin/error404 Keep-Alive: timeout=10, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html d6
Found
The document has moved here.(http://www.he.net/cgi-bin/error404)

ダメだ。SJISで書けの後は、これかよ。いいじゃん。スクリプトで書いたってぇ。
0925家からです。01/12/20 06:14ID:???
それに、19日は水曜じゃないぞ。
0926名無しさん@お腹いっぱい。01/12/20 08:06ID:???
19日は水曜だったぞ
0927名無しさん@お腹いっぱい。01/12/20 08:15ID:???
おいっ!お前ら!
19日は水曜ですか?違いますか?

ハッキリさせてくださいませ。
0928名無しさん@お腹いっぱい。01/12/20 08:43ID:???
http://calendar.yahoo.co.jp/
見ろ。
092991301/12/20 15:12ID:7Dj+HM68
>>923
Perlで
print "Content-type: text/html\n";
print "Status: 304 Not Modified\n\n";
を返しています。

access_log見ましたが、
CGIで304を送った時は送信バイト数が"0"ですが
画像の要求に対してapacheが直接304を送った時は"-"となっています。
どう違うのでしょうか・・・・・。
093091301/12/20 16:28ID:7Dj+HM68
すみません。原因がわかりました。
原因はCGI側からLast-Modified:を送っていなかったことです。
ネスケ4だけ
「If-Modified-Since:を送ってねえのに
304とはどういうことだ!!説明しる!!ゴルァ!!」
とゴネてたようです。
ご迷惑をおかけしました。
0931名無しさん@お腹いっぱい。01/12/20 22:06ID:???
>>930
RFC2616には、304 Not Modifiedについて、If-Modified-Since:等が付いていない
GETの動作については書いてないので、どんな動作をするかは実装依存。
0932名無しさん@お腹いっぱい。 01/12/21 10:18ID:???
>>873 とは別人なんですが、nobody設定のサーバで自分でperlスクリプトを
suidしてみたんですが何故か動くスクリプトと駄目なのが有ります。
自分では何処で引っ掛かっているかが分からないんですが・・・
0933名無しさん@お腹いっぱい。01/12/21 11:05ID:???
>>932
setuid/gid下ではtaintedなスクリプトは動かないです。
perldoc perlsec 参照のこと。
0934名無しさん@お腹いっぱい。01/12/21 15:30ID:voEY9WIw
掲示板システムを作っているのですが
POSTで書き込んだあとに、Location:で飛ばすと
IEだとそのURLに対するIf-Modified-Since:を吐かずにリクエストを出し、
ネスケだと、そもそもリクエストすら出さずに勝手にキャッシュを使いやがります。
これ、どうしてでしょう。。。。?
Locationで飛ばしても、ブラウザでURLを指定して飛んだのと
同じようにするにはどうしたらいいのでしょうか?
誰か助けて。。。
0935会社からです。01/12/21 18:56ID:s31HoiR8
確認してないけど、ココと同じ様に、メタタグで飛ばしたらどうカニ?
093693401/12/21 19:08ID:voEY9WIw
>>935
ありがとうございます。
メタタグで飛ばすことによって、IEでは解決しました。

しかし、ネスケでは
明示的にリロードされるまでは、
キャッシュにあるものはキャッシュを使うようになっているみたいです。
0937名無しさん@お腹いっぱい。01/12/21 19:16ID:???
思い切ってキャッシュ無効にしてみては?
0938名無しさん@お腹いっぱい。01/12/21 19:37ID:voEY9WIw
>>937
今回作っている掲示板システムですが、
多少毛色の違うモノでして、
更新されたら更新された差分だけ転送し、
現在のものが最新であれば、304でキャッシュを表示する
というモノです。
なので、キャッシュ無効はできないんです。。。。

実はこういうシステム自体が無理なのかなぁ。。。。
0939名無しさん@お腹いっぱい。01/12/22 03:42ID:???
>>938
飛ばした先のページにmetaタグ書けばキャッシュ読まないと思うけど。
こんな感じで。

<meta http-equiv="expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">

とりあえず現時点でIEでキャッシュ読まない状態なら、ネスケの場合は
<meta http-equiv="Pragma" content="no-cache">
でキャッシュを無効化できると思う(確認はしてないが)。
HTTP/1.1ならサーバレスポンスヘッダを以下のように出力しても良い。

print "Content-Type: text/html\n";
print "Cache-Control: no-cache\n\n";

ただ、なんかIE4.5(Mac)だと駄目らしい。
0940名無しさん@お腹いっぱい。01/12/22 06:03ID:???
掲示板を読むのにもスクリプトを使ってるなら、書いた後は特別なパラメータ
をくっつけて読むスクリプトを呼び出すようにすればいいんじゃないの?
Location: http://$host/$path/read.cgi?force_reload=yes とかそんな感じで。
094193401/12/22 14:56ID:Zp3FJg9R
>>940
おおお、すごい。全然思いつかなかった。。。
アフォですいません。。。

でも、
http://..../read.cgi?a=100&force_reload=yesと
http://..../read.cgi?a=100は
違うURLなので、下のURLに対して、Last-Modified:を送っていても、
上のURLではIf-Modified-Since:は送ってくれないですよね?
キャッシュ無効にすると、そもそもIf-Modified-Since:どころじゃ
ないだろうし。。。。
Metaタグでrefreshしても、サーバに問い合わせすらせずに
キャッシュを表示するネスケの仕様もすごいですが。。。。

Last-Modified:を送らなければ、
ちゃんと読みに行ってくれるみたいなんですけどね
0942名無しさん@お腹いっぱい。01/12/22 23:07ID:jSeqz4dA
CGI書くのに最適言語って何でしょうか?
0943名無しさん@お腹いっぱい。01/12/23 01:12ID:???
>>942 開発する内容・期間・使えるリソースによって異なる。
0944名無しさん@お腹いっぱい。01/12/23 09:14ID:IT07ia6A
現在、内部処理(アクセス解析)をトップページに組み込むために、
パフォーマンスの良い実装方法を検討しています。
その一つとして、HTMLファイル内に<IMG src="〜.cgi">タグを
使用して(content-type=image/gif指定で、表面上は透過GIFを
表示させるようにして、内部でログを生成する)実装する方法も
検討項目の一つとしています。
この場合、アクセスログのリクエスト処理が終わってなくても、
コンテンツはブラウザ上に表示されるのでしょうか?

もしそうなら、負荷のかかる処理を積極的にバックグランドで
処理し、ユーザはそれにストレスを感じずにページを閲覧でき、
効果的だと考えたのですが。

よろしくお願いします。
0945名無しさん@お腹いっぱい。01/12/23 09:20ID:???
されます。
っていうか、全然普通にやられてる方法だし・・・
Referer取るのにめんどくさいので俺は嫌い。
0946デフォルトの名無しさん01/12/23 09:31ID:???
アクセス
  ↓#凄い重い処理
カウンタ表示

って事かな?、でカウンタをストレスレス?に表示したいと。

1:単純にforkしてプロセスを分割する、ただ負荷自体は大きくなる。
2:カウンタを静的な画像にする、つまり100番目にアクセスした人は
  100じゃ無くて099を見る訳、で、HTMLの下の方でCGIをキックして
  こっそり次の(100)画像を生成する。

つーかカウンタ程度なら現状で問題無いと思うけど、がんばってね。
094794401/12/23 10:02ID:SzYzoLzH
>>945,946
ありがとうございます。検討の材料として活用させていただきます。
0948名無しさん@お腹いっぱい。01/12/23 11:03ID:DNt3H0Xe
>>943
Ruby、perl,PHPのいいところ悪いところ教えてください
0949名無しさん@お腹いっぱい。 01/12/23 11:46ID:???
PHP 何か年寄り臭い
PERL 完璧に厨房臭い
Ruby え?何それ
0950名無しさん@お腹いっぱい。01/12/23 11:49ID:DNt3H0Xe
>>949
じゃあ何がいいわけよ?
0951名無しさん@お腹いっぱい。01/12/23 11:52ID:???
ObjectiveC つーか頭悪くならない言語全般 w
0952名無しさん@お腹いっぱい。01/12/23 11:53ID:???
C
0953デフォルトの名無しさん 01/12/23 11:59ID:???
偏ってるなぁ・・・ヒテイハシナイケド(^^
Perlで良いんじゃない?>950
0954名無しさん@お腹いっぱい。 01/12/23 12:03ID:???
EVALと型無しは馬鹿の素、これ業界標準
0955名無しさん@お腹いっぱい。01/12/23 12:15ID:DNt3H0Xe
>>953
perlだったらRubyの方がキレイに見えて覚えやすそう
だったんですが、何でperlがいいんでしょうか?
Rubyの悪いとこも教えてください。
0956名無しさん@お腹いっぱい。01/12/23 12:24ID:???
それは腐ったPerlのコードしか見てないからだとおもうが・・・
キレイってのも良く分からんし
0957名無しさん@お腹いっぱい。01/12/23 12:27ID:???
>>956
$とか多用する事じゃないの?
0958953 01/12/23 12:34ID:???
こう言うの荒れるんだよなー(w
>955 それぞれのページに誇張も含めて特徴が書かれてるよ。
基本的にRubyはPERLより難しいかわり柔軟
(後出しじゃんけんな上に、OOにしちゃったので)
んで、ドキュメントとかは多分少ないしょうね。
どっちにしても、何かポインタ示してもらわないと答えられない(多様性とか習得の難易度とか)
覚え易いのが良ければPythonとかお勧め
>>957
$多用すると汚いの?
0959名無しさん@お腹いっぱい。 01/12/23 12:44ID:???
最強厨房ってやつ?
0960名無しさん@お腹いっぱい。01/12/23 13:29ID:???
use strictしておけば、my()は変数宣言と同じだとか言っている阿呆がいたのですが、どうしましょうか。
0961名無しさん@お腹いっぱい。01/12/23 13:30ID:???
>>958

> $多用すると汚いの?

かなり見づらい。特にCをやっているとね。
0962名無しさん@お腹いっぱい。01/12/23 13:58ID:???
結局こう?
perlはCとか前科が無ければ習得が容易
RubyはCやってた人向きでC勉強できるぐらいの知能あるならRuby
やれって事?そしてRubyの方が融通がきくんだね
0963名無しさん@お腹いっぱい。01/12/23 14:10ID:???
>>962

Cって難しいか?
Perlよりも遙かに仕様が小さくて簡単だと思うけど。
文字列処理は面倒だけどね>C
096496301/12/23 14:12ID:???
あくまでもC++じゃなくてCね。
0965C勉強中01/12/23 15:10ID:???
>963
プログラミングが初めてならPerlの方が楽だと思う。
Cだと初期化が面倒くさい。
Perlの$が汚いという人もいるけど、初心者には変数の目印として逆にわかりやすいと思うよ。
0966名無しさん@お腹いっぱい。01/12/23 15:54ID:???
> 初心者には変数の目印として逆にわかりやすいと思うよ。

そうか・・・・
漏れは時々書き忘れてエラーを起こす。更にVBではセミコロンをつけてしまってエラーを起こす w
0967名無しさん@お腹いっぱい。01/12/23 17:15ID:yPva/HA4
今使っている掲示板はCGIで書き出すものなんですが
HTMLで書き出すようにするのって、大変なんでしょうか?
CGI超初心者ですが、できるようなら改造してみたいと思ってます。
ご意見お聞かせください
0968名無しさん@お腹いっぱい。01/12/23 17:48ID:???
>>967

CGI以外のプログラミングの経験は?
0969名無しさん@お腹いっぱい。01/12/23 23:30ID:???
>>962 全然違う、Javascriptでもやっとけ w
097096701/12/24 11:30ID:nb0Ra4Jq
>>968
はっきり言って、ないようなものです>プログラミングの経験
改造するなら勉強したいと思っています。
ただ、今使っている掲示板のログをそのまま使いたいので、
できれば全部書き直すのではなく、
あくまで改造して、HTMLで書き出すようにしたいです。
ログを変換してHTMLで書き出す掲示板を使うのと
どっちができそうかなと思いまして・・・
0971名無しさん@お腹いっぱい。01/12/24 12:11ID:???
はっきり言って義務教育受けた人ならどちらも鼻くそみたいに簡単です
その辺のDQNweb解説サイツを適当に読むだけで十分でしょう。
ただそう言うことすると脳みそがスポンジ状になる可能性がとても高いので
まともな本を買うかドキュメントを読む事をお勧めします
0972名無しさん@お腹いっぱい。01/12/24 13:00ID:???
http://www.amazon.co.jp/exec/obidos/ASIN/4798001228/250-5907259-9502608

勉強したいんですが
これよいですか?
コレ以外になにかおすすめあったら教えてください
097397201/12/24 14:40ID:???
スレ違いでした
0974名無しさん@お腹いっぱい。01/12/24 15:25ID:???
もう見つけただろけど一応
http://pc.2ch.net/test/read.cgi/php/988809842/l50
お勧めはやっぱオライリー各書
でもプログラム自体初めてなら結城さんの本とかもヨサゲ
097596701/12/25 09:04ID:c3oW+NDS
そんなに簡単なんですか?!
がんばってみます・・・
0976名無しさん@お腹いっぱい。01/12/25 21:28ID:YEFyEeiB
だれかperlでgzipで圧縮されている変数を展開する方法知りませんか?やはりローカルで保存して展開するしかないのでしょうか・・・
http://www.raiji.net/bbs/kaku.cgi
0977名無しさん@お腹いっぱい。01/12/25 22:42ID:???
>>976

圧縮されている変数?なんだそりゃ?

char cmd[200];
sprintf(cmd,"gunzip %s",filename);
system(filename);
0978名無しさん@お腹いっぱい。01/12/25 23:51ID:???
>>976
perldoc Compress::Zlib
0979名無しさん01/12/26 03:25ID:BRFa7AfO
http://me.bird.to/hakoniwa/download.htmlから
箱庭諸島2 Ex.Version (based 箱庭諸島2ver2.30)

を落して自分のFreeBSDのサーバで動作させようと思ったのですが
http://xxx.xxx/xxx/hako/hako-main.cgi
にアクセスしたところ

つぎのターンまで、あと 0 時間 -16821368 分です 同時アクセスエラーです。
ブラウザの「戻る」ボタンを押し、
しばらく待ってから再度お試し下さい

というエラーがでていますいます。

/var/log/httpd-error.log にエラーは記録されてはいません。
どなたか何故エラーででるのあ教えてください
0980名無しさん@お腹いっぱい。01/12/26 08:08ID:???
http://xxx.xxx/xxx/hako/hako-main.cgi
↑ 開かないよ
0981名無しさん@お腹いっぱい。01/12/26 08:52ID:???
httpのエラーと箱庭のエラー出力の区別付かんヤツには無理だと
思われ
0982名無しさん@お腹いっぱい。01/12/26 10:54ID:???
次スレ
http://pc.2ch.net/test/read.cgi/php/1009331505/
0983名無しさん@お腹いっぱい。01/12/26 12:41ID:???
1000
レス数が950を超えています。1000を超えると書き込みができなくなります。