トップページ⇒php
1001コメント344KB

CGI: Common Gateway Interface part 11

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん03/06/14 22:26ID:F9qlqHNx
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/

CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/

過去ログ・関連スレッドは >>2-5 あたりに
0879nobodyさん04/05/11 06:20ID:???
だね。
Content-type: text/txt\n\n;
なんて書かないのと同じ。
0880nobodyさん04/05/11 10:54ID:???
たのむから仕事でコード書くときは
CGI、CGI::Sessionなどのモジュールを利用してください。
0881nobodyさん04/05/11 19:06ID:iWNmrZA1
CGIからMHTを出力したいのですが、うまくいきません。
IEではテキストがそのまま表示されてしまいます。
名前をつけて保存すると、開けるようになるので、
バイナリは一致しているはずなのですが。

MHTのMIMEタイプを調べて、
Content-type: message/rfc822\n\n
を出力しているのですが、これではIEが解釈してくれないのでしょうか。
0882nobodyさん04/05/11 19:48ID:Ax2GxUUe
抽選cgiを作りたいんです。
内容として一日一回 当選を出す
日付が変わるとリセットされる
プログラム作って頂けませんか
0883nobodyさん04/05/11 19:55ID:???
>>882
ま、すれちがいなわけなんだが…
0884nobodyさん04/05/11 19:56ID:???
ま、金くれるんならやってもいいぞ。
088588204/05/11 20:15ID:Ax2GxUUe
スレ違いすいません。
0886nobodyさん04/05/15 19:58ID:AknjjuaO
質問というか相談です。
cgi習得のため日記を書き込む&表示するcgiをPerlで作っているのですが、
ログの整理方法で悩んでいます。

全日記データ(1件1kb程度?)を単一ファイルにすれば、データ壊れた時恐いなあ、とか
逆に1日分を1ファイルにしたらクラスタとかの関係でめちゃくちゃHDD圧迫するんじゃないか・・・
などと迷っております。

現在はdiarylog/200405.datとして1月1ファイルあたりにしようかなと考えておりますが
何らかの危険回避のために意識した方がよいもの、
後々便利になるものなどがありましたらご教授いただけませんか。
主観込み込みで構いませんので後押しをお願いします。
0887nobodyさん04/05/15 20:07ID:???
>>886
バックアップすればイイのこと。
データを書き込む前にログファイルをどっかにコピーするとか、sendmailで自分宛に送るとか。
0888nobodyさん04/05/15 20:10ID:???
つけたし。
レン鯖だとすると全データ飛ばしは有り得る話なので、バックアップは自動だろうが手動だろうが必ずしておくべきことだ。
自分のデータは自分で守ろう。
0889nobodyさん04/05/15 20:37ID:???
>>886
ログにDBM使うのはどうかな?
ハッシュで比較的高速にアクセスできるから1ファイル構成でも、
最近と過去とで2ファイル構成でも悪くない。

バックアップはもちろん必要だけど。
0890nobodyさん04/05/15 20:42ID:???
>>889
勉強中の初心者に何を勧めてんのよw
0891nobodyさん04/05/15 20:57ID:???
>>889
唐突でワラタ
0892nobodyさん04/05/15 21:05ID:???
>>886
他人に自作スクリプトを評価してもらうのが効率のよい習得方法だな。
自分が「これはいい」と思ってた部分が実は糞みそだったりするからな。

ほれ
自作CGIを評価するスレ
http://pc5.2ch.net/test/read.cgi/php/1049514428/l50
089388604/05/15 22:52ID:AknjjuaO
みなさまアドバイスありがとうございます!

バックアップ(コピー)をとれば単一ファイルにでき手軽そうですね。

そこで新たに疑問が。
2004年5月15日の日記を読むにはファイル全て読むことになりますよね。
その前日もついでに読むと再びファイル全て読みに行くことになると思いますが、
不要な部分も読むというロスは気にしたほうが良いのでしょうか?
また、みなさんなら何kbくらいのロスからログ形式(もしくは読み取り方法?)の変更を考えますか?

もう一つ似たようなことで、
読み取り専用で開く場合もファイルロック(やバックアップ)をしたほうがいいのでしょうか?
書き込む人は管理者の1人を想定しており、処理に多少時間が掛かっても構わないのですが、
読む場合は[翌日の日記へ>>]ボタンを2秒1回くらいでぽちぽち押しても耐えられるものを作りたいのです。

---
DBMというのはググってもよく理解できず
まだ敷居は高そうですが一応心に留めておきます。

まだファイル読み書き部分も作っていませんが、
日記として機能できたら評価スレに行ってみますね。
0894nobodyさん04/05/16 12:50ID:???
CGI初心者です。
あるCGIから別のCGIにPOSTするにはどうしたらよいですか?
また、その際に送信側でパラメータのセット、
受信側で取得する方法も教えてください。
どなたかお知恵を。
0895nobodyさん04/05/16 12:51ID:???
↑ちなみにPerlのバージョンが古いので
CGI.pmモジュールは使えません。
0896nobodyさん04/05/16 12:56ID:???
>>894
http://x68000.startshop.co.jp/~68user/net/
http://www.studyinghttp.net/
0897nobodyさん04/05/16 13:07ID:???
>>896
ありがとうございます。
しかし、残念ながらここのサンプルは
モジュールを使っているようです。
cgi-lib.plを使って同じことはできないのでしょうか?
0898nobodyさん04/05/16 13:41ID:???
>>897
サンプルを丸写ししろという意味でなく、そういったサイトで HTTP や
CGI の基本を勉強しろという意味なんだがな。それがいやなら
サンプルが動く環境を整えるか、金払って作ってもらえ。
0899nobodyさん04/05/16 14:04ID:???
裏を返せばSocket使えない環境しか与えられてない、というのは
使うのを薦められない何らかの理由があると考えていいんじゃね?
0900nobodyさん04/05/16 15:55ID:???
CGI.pm使ってPOSTする方法を教えてください。
0901nobodyさん04/05/16 16:28ID:???
>>900
CGI.pmはCGIアプリのためのモジュールだから用途が違う。(POSTをするじゃなくてPOSTを受ける方)

自分からPOSTするにはLWP系のモジュールが便利。
ttp://search.cpan.org/~gaas/libwww-perl/
0902nobodyさん04/05/16 16:46ID:???
>>901
ありがとうございます!
090388604/05/17 09:01ID:bRPhhdmX
日記cgiがどうのと質問した>886(=>893)です。

「(CGI-Perl)読み取り専用で開く場合ファイルロックは必要か」
という疑問は、検索の仕方が悪いのか解説されたページが見付かりません。

ファイルが壊れるというのは物理的な干渉でなく、
時間差の引き起こす上書きだという認識なので読み取り専用の場合は気にする必要が無いと思うのです。
この考えは間違っていますか?

スレや板を間違ってる気ならしてきました。
0904nobodyさん04/05/17 09:41ID:???
>>903
http://pc5.2ch.net/test/read.cgi/php/1081148490/694-695
090588604/05/17 10:06ID:???
>>904
共有ロックと排他ロックですか。
分かりやすそうなページがたくさんヒットしました。
今日中に解決できそうです。
http://pc5.2ch.net/test/read.cgi/php/1024795138/
google経由でこんなスレも見つけたので今日帰ってからでも読んでみます。
ありがとうございました!
0906nobodyさん04/05/17 15:28ID:???
>>905
Data::Dunper 結構便利だよね。
DBM紹介して、初心者に紹介するもんじゃねえって言われてた人いたけど、
ま、これも似たようなもんかもしれんけど、
DB使うほどもんでなし、かといってフラットファイルだとかったるいってのは

$database = do "$log_file" or die "$log_file: $!\n";
とかやって取り込み、
print LOG Dumper($database );
とかやってる。

結構お手軽。
090788604/05/17 17:39ID:???
>>906
色々調べてみました。Data::Dumperのようですね。
便利そうなのですがファイル構造はせいぜい2次元ですし、
1行1レコード、先頭の日付8桁の数字をキーくらいにしか考えておらず
このスクリプトではDumperのお世話になるほどでは無いかなと感じました。
情報ありがとうございます。
0908nobodyさん04/05/19 17:04ID:???
>>907
> ファイル構造はせいぜい2次元

ふーん、そうなの?
090988604/05/20 15:54ID:???
>>908
はい。
ファイルの中身の構造はcsvのようにカンマと改行で分けています。
もし語弊がありましたらすみません。
0910nobodyさん04/05/20 21:28ID:???
>>909
あ、いやいや、そっちの扱うデータが、って事なのね。納得。
ただ、joinしたりsplitしたりして変数に格納したり、とかするんなら、
やっぱ便利だと思うけど、、、Data::Dumper
僕はね。
0911nobodyさん04/05/20 21:41ID:???
>>910
でも、doするとなると、CGIなら少し危険になりますね。
SuExecじゃなければ、また...
0912nobodyさん04/05/20 22:02ID:???
だからDBMでいいやん。排他ロックもできるのあるし。
0913nobodyさん04/05/20 23:20ID:???
>>912
うるせぇぞ本7
0914nobodyさん04/05/24 13:36ID:guXgj1Rh
こんなCGI探してますスレッド ver.9
http://pc2.2ch.net/test/read.cgi/php/1051456859/

が落ちていて、新しいスレがないようなので、
すみませんがこちらに書かせていただきます。

よく2chでのやり取りに捨てアドが使われますが、
これを手軽にするために公開鍵暗号を使ったらどうか、と考えました。
概要は

アイディアとしては宅配ボックスのようなもの。
ネットの掲示板のように、誰でも利用でき、
俗に捨てアドと言われるような取得の手間はかからない。

利用者が秘密鍵Aを決めると、自動的に公開鍵Bを生成し、
それをメールや掲示板に貼り付ける。

利用者にメッセージを送りたい人はそのURLをクリックすると
公開鍵Bで暗号化したものをCGIにアップできる。

アップされたデータそのものは誰でも見ることができるが、
公開鍵Bではそれは復元できず、秘密鍵Aを持つ人しか読めない。

このようなものをご存知ありませんか。
0915nobodyさん04/05/24 14:10ID:???
公開鍵暗号とか面倒くさいことを言わなくても、
普通の鍵つきメッセージボックスでいいんじゃない?

1.受け取りたい人がメッセージボックスを作成、パスを決める
2.送りたい人が投函する
3.主がパスで読む、他の人は読めない

目的は達成できそうな予感
0916nobodyさん04/05/24 16:04ID:???
>>914
【CGI】こんなCGI探してますver.13
http://pc5.2ch.net/test/read.cgi/hp/1081608108/
0917nobodyさん04/05/25 09:10ID:???
ていうか2ショットチャットで十分
0918nobodyさん04/05/27 23:32ID:???
フォームで大量のテキストを受け取りたいのですが、
一定量を超えるとボタンを押しても切り替わりません。
どうやればいいのでしょう?
0919nobodyさん04/05/28 01:32ID:???
>>918
どうやっているのでしょう?
0920nobodyさん04/05/28 11:00ID:???
どうやってるか分からんからなんとも言えんが、
もしGETで受け取ってるならPOSTに直せ。
0921nobodyさん04/06/01 12:28ID:???
http://foo/bar/baz
というURLを受け取ってそれがディレクトリなのかファイルなのかを知るのはどうやるの。
0922nobodyさん04/06/01 18:51ID:???
>>921
301とlocation:http://foo/bar/baz/が帰ってきたらディレクトリ。かな?
0923nobodyさん04/06/12 23:57ID:H/qBX9ep
1. 一秒間に一度文字列を出力する。
2. 形式は"行番号 本文"
3. ブラウザでテキストを選択すると行番号は選択されずに本文を複数行選択できる。
ということをやりたいのですが可能でしょうか。
普通に<PRE>などで出力すると1.は可能で3.が不可能に、
テーブルを使うと3.は可能で1.が不可能になってしまいます。
0924nobodyさん04/06/13 00:54ID:???
>>923
1.の動作はむっちゃブラウザ依存じゃん。3.もかな?
行番号の形式が許せるなら<OL>(Ordered List)はいけるかも。
0925nobodyさん04/06/13 01:12ID:???
>>923
板違い
0926nobodyさん04/06/13 13:34ID:???
できるけど、サーバ負荷が迷惑
0927nobodyさん04/06/13 15:57ID:???
そんなことをHTTPでやろうとするな
0928nobodyさん04/06/13 18:07ID:???
ブラウザのタイムアウトで切られるのが落ち。
0929nobodyさん04/06/28 17:33ID:???
Javascriptで文字列を一括格納して、一秒ごとに出力する処理のほうがいいんじゃ?
すんげー見た目悪いけど、3.は<TEXTAREA>を二つ使って、片方は行番号、もう片方に本文を出力すれば、
行番号は選択できんようになるが。
ダサいけどな。
お前さんが何をしたいのかがわからん。
0930nobodyさん04/06/30 18:44ID:???
>>923
JavaScriptならできる。
0931nobodyさん04/07/05 06:22ID:KmrVPKaj
SSIの話題ってどこですれば良いの?
0932nobodyさん04/07/05 11:46ID:???
GET と POST の違いで、GETは送信できる内容の長さに制限がある、
との記述を見かけますが、これは何による制限でしょうか?
HTML1.1のRFCを読みましたがそのような記述はないようです。
それともそのような制限はないということですか?
093393204/07/05 11:51ID:jPcBhI9p
age
0934nobodyさん04/07/05 12:23ID:???
>HTML1.1のRFCを読みましたがそのような記述はないようです。
0935nobodyさん04/07/05 12:29ID:???
POST/GETの違いと言うより
URLとして許容される最大長、という話だと思いますが、
私も以前RFCなどを調べてみて結局よくわからなかった経験があります。

Specification ではなく実装上の制限としては、
Internet Explorer で扱える URL の最大長は 2,083 character だそうです
(MSDN Support Q208427)。
httpサーバや proxyサーバにはこれより短い制限で実装されているものがあるかもしれません。
0936nobodyさん04/07/05 15:35ID:???
>>932
標準としてどうなってるかはHTTP1.1(RFC2616)の3.2.1参照。

結局HTTP1.1としては制限はないことになっているが、世の中の
clientやproxyが扱えないと意味はないのでそこは実装がどうなっ
てるかを調べるしかない。

安全側に振るならNoteにあるように255まででやめとけ。危ない方
に振る場合も935が紹介したIEの制限を越えるのはやめとくのが
いいだろう。独自clientしか使わないなら別だが。
0937nobodyさん04/07/05 18:15ID:???
web鯖は1kb縛りが主流?
0938nobodyさん04/07/06 01:28ID:???
ブラウザ側の制限も忘れないでね。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;208427
0939nobodyさん04/07/06 01:30ID:???
誤爆した。スマソ。
094093204/07/06 11:25ID:???
>>934-939
どうもありがとう。
0941nobodyさん04/07/15 19:25ID:???
<form>に関する質問です。

ユーザがページからログインする際に同時にチャットへログインさせて、
チャットのウィンドウを別ウィンドウで表示させようとしています。

フォームで、
名前 ________ パスワード _______ [ログイン]

と表示させているのですが、このログインのsubmitボタンを押すだけで
現在のページはログイン後の画面、同時に別ウィンドウでチャットのページを
開きたいのです。

<form>は入れ子にできず、submitボタンも一つしかつけられないらしいのですが、
このようなことは可能でしょうか?

よろしくお願いします。
0942nobodyさん04/07/15 19:42ID:???
>>941
ログイン後の画面にonloadイベント仕込んで
window.open でチャットウインドをオープンさせる、
とかじゃねえか?
JavaScriptね
094394104/07/15 19:48ID:???
ちなみにsubmit 先のcgiは ログインページとチャットページで別です。

<from method="post" action="login.cgi">
...
<input type="submit" value="ログイン">
</form>

<from method="post" action="chat.cgi" target="chat">
...
<input type="submit" value="ログイン">
</form>

これだとどっちかしかできません...(T.T)
0944nobodyさん04/07/15 19:52ID:???
だから、
login.cgiにonLoadイベント仕込んで
window.open でchat.cgiを別ウインドウで開く
とかじゃねえか?
JavaScriptね
094594104/07/15 19:56ID:???
>>942
ありがとうございます。

それだとチャットに入るためのウィンドウが開きますが、ログインまで
同時にしてくれないような気がしますが、違うでしょうか?

javascriptでウィンドウを開く時にcgiにname=""など送れますでしょうか?

# ん?
# window.open("chat.cgi?name=hogehoge&pass=hogehoge","chat")
# でオープンすればいいのかな?


094694104/07/15 19:56ID:???
入れ違いカキコですいません。
094794204/07/15 20:07ID:???
>>945
login.cgiでログイン処理してるわけで、
そのlogin.cgiが吐き出すHTMLに仕込んだJavaScriptに
onLoadイベント仕込んで別ウインドウにchat.cgiを開く。
IDだのなんだののchat.cgiに渡す引数はGETでどーぞ。
0948紹介者04/07/15 20:14ID:9VjwcHkZ
http://popup15.tok2.com/home2/psycho1014/cgi-bin/ebs-eb/ebs.cgi
面白いんでやってみてください。
094994104/07/15 20:46ID:???
>>947
ちょっとそれでコーディングしてみたいと思います。
ありがとうございました。


0950nobodyさん04/07/30 23:50ID:???
<form onsubmit="location.href='hoge'" target="_blank" ...> の方が楽じゃん?
0951nobodyさん04/07/30 23:58ID:???
なんじゃそりゃ・・・
0952nobodyさん04/08/29 14:22ID:???
今簡単な掲示板作りに挑戦してるんですが、
改行の事でつまづいてしまいました。

書き込みされた本文が改行を何回されたのか?
というのはどうやったら分るのでしょうか?

色々と試してみましたがどうも上手くいきません。
何か方法がありましたら何卒ご教授下さいませ。
0953nobodyさん04/08/29 14:58ID:???
>>952
http://www.hyuki.com/writing/techask.html#level
0954nobodyさん04/08/29 21:59ID:???
>色々と試してみましたがどうも上手くいきません。

こう書くひとは実は何も試してないことが多い
試したんならどうやったのか、どううまくいかないのか書くこと
0955nobodyさん04/08/30 12:02ID:???
>>954
禿同。
0956nobodyさん04/09/03 18:01ID:???
オリジナルのエラーページを作成しています。
エラーの元になっているファイル/フォルダのURLをオリジナルのエラーページに表示させようと
http://<;!--#echo var="SERVER_NAME" --><!--#echo var="REQUEST_URI" -->
というコマンドと環境変数を使っていますが、
オリジナルのエラーページのURLが表示されます

ステップサーバー(http://stepserver.jp)というレンタルサーバーを利用しており、
そのサポートに問合せましたが、上記の記述で問題ない、との回答でした。

何かアドバイス・ヒントを頂けないでしょうか?
0957nobodyさん04/09/04 00:01ID:???
アパッチのドキュメントを撃墜して来い。話はそれからだ。
0958nobodyさん04/09/11 23:30:56ID:???
ここの、
ttp://www.tryhp.net/oldscript.htm
books.lzhというリレー小説CGIをダウンロードして設置したんですが、何故か管理者メンテナンスモードがエラーになります。
パスはもちろん合っていますし、パーミッションも確認しましたが間違っているところはないです。
どうかご教授願えませんでしょうか?
095995804/09/11 23:32:14ID:???
因みに鯖はAAA!CAFEです
0960nobodyさん04/09/12 02:02:50ID:???
作者に聞け。
それにスレ違い。
096195804/09/12 02:14:00ID:???
スレ違い失礼しました。
吊ってきます
0962nobodyさん04/09/22 14:51:15ID:???
掲示板を改造してユーザが期限内に投稿した俳句にユーザがログインをして点数を
つけるように改造して使っています。
ログインすると俳句が200程表示され、各俳句に1-10点と未選択のradioボタンが
表示されます。はじめは未選択がcheckedとなっています。

今のところ、未選択が1つでもcheckedになっているとjavascriptでエラーを出し、
CGI内部でも、採点されてない俳句がありますとエラーを出すようにしています。

中には2時間もかけて採点したが、javascriptがonでなく、CGI側でエラーに
なり、ブラウザで戻るとタイムアウトで採点したものが全て消えるという
ことになってしまいます。

radioボタンをチェックしたものが消えない、又は記憶、復帰させる方法は
ないものでしょうか?













0963nobodyさん04/09/22 15:15:47ID:???
200個も一気に採点させなければよろし
096496204/09/22 16:32:04ID:???
>>963
例えば50個ずつをページ遷移させてながら評価していくという意味でよろしい
でしょうか?

ログインと言ってもパスワードが合っているかチェックしているだけなので、
セッションなど利用していません。
できれば、セッションを使わない方法があればありがたいです。

radioボタンの状態をどこか(クッキーなりサーバなりローカルPCなり)に記憶する
ことはできないという認識はあっていますでしょうか?

0965nobodyさん04/09/22 17:15:46ID:???
何でそういう認識につながるのか理解不能
0966nobodyさん04/09/22 19:23:55ID:???
CGI側で、もう一度入力を促すフォームを出力すりゃいいじゃん
096796204/09/22 19:33:12ID:???
>>966
200個中198個採点してあったのが送信されてきたら、次のページでエラーを表示し
残り2個だけを表示して入力させるという形ですよね?

すごく良さそうです。シンプルなのに気が付きませんでした。


0968nobodyさん04/09/22 20:06:21ID:???
>>967
それセッション管理してないでできるのか?
096996204/09/22 22:13:10ID:???
>>968
あー、できないですねー。

セッションまでいかず、ユーザ名と採点配分を記録した一時ファイルを作れば
できそうな気もします。セッションハイジャックとかはないと思うので。

やっぱりいい方法はないのですかねぇ。

# cookieがradioの状態を保持してくれればなぁ...

0970nobodyさん04/09/22 22:22:22ID:???
>>969
( ゚Д゚)ハァ?
0971nobodyさん04/09/22 22:35:45ID:???
普通にcookieに仕込めますが

>>970
2が揃いすぎですよ
0972nobodyさん04/09/23 01:44:04ID:???
採点された物はhiddenで持ち越せばええやん。
0973nobodyさん04/09/23 01:57:46ID:???
うん、そう。
別に整合性がとれなかったりセキュアにする必要もないし。
097496204/09/23 11:44:50ID:???
>>972
あ、そうか。なるほど、それでいけそうですね。
# 恥ずかしい…
0975nobodyさん04/09/24 08:56:49ID:???
(・ε・)キニシナイ!!
0976nobodyさん04/09/26 22:57:31ID:???
素人で悪いんですが、教えてください
このtたびc言語でカウンタを作ったんです
それで実装しようとWEB鯖のほうで実装しようとしたんですがうまくいきません
鯖側でのディレクトリ構造
〜(鯖アドレス)/www/(自分のhtml置き場所) からCGIを呼び出したいんですが
〜(鯖アドレス)/cgi/(cgiファイル置き場所) にCGIファイルを置かなければならないそうです
アドレスはhttp://(鯖アドレス)/~(自分ID)/(自分のhtml) というカンジです
この場合htmlからcgiを<--#exec >で呼び出すには、パスはどうしたらよいでしょうか
教えてください 鯖はLINUXです
0977nobodyさん04/09/27 00:18:00ID:???
>>976
http://pc5.2ch.net/test/read.cgi/hp/1087986364/793
http://pc5.2ch.net/test/read.cgi/hp/1020917380/710

糞マルチに教えることはないからカエレ
0978 04/09/29 17:30:58ID:???

レス数が950を超えています。1000を超えると書き込みができなくなります。