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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/09/22 23:15ID:???
CGIの運用に関する質問スレッドです。

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

※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
  ↓
  Perl 初心者コーナー Part16
  http://pc.2ch.net/test/read.cgi/php/1032070299/l50

過去ログ・関連スレッドは >>2
0082nobodyさん02/09/29 12:02ID:???
>>79
クッキーに書き込む時にエンコードしてるから%数字になってる。
クッキーを読み込む時にデコードしてるから元に戻ってる。
この処理にブラウザは関係無い。

修正前のスクリプトでは読み込む時にデコードしてないから
元に戻らないだけ。

>>81
それぞれのHTMLのとこに入れれば?
00838102/09/29 12:11ID:1nC5j6FV
>>82
sub frame {
# クッキーを取得
&get_cookie;

# クッキーにリロード時間/行数のない場合は初期値を代入
if ($ck{'retime'} eq "") { $ck{'retime'} = $re_sec; }
if ($ck{'line'} eq "") { $ck{'line'} = $line[1]; }

&header;
print <<"EOM";

</head>
<frameset rows="147,*" title="MARU's Chat 2">
<frame name="form" id="form" title="フォーム" src="$script?mode=form&retime=$ck{'retime'}&line=$ck{'line'}" />
<frame name="log" id="log" title="ログ" src="$script?retime=$ck{'retime'}&line=$ck{'line'}" />
<noframes>
<body>
フレーム非対応のブラウザの方は利用できません
</body>
</noframes>
</frameset>
</html>
EOM
exit;
}

これを、どう書き換えればいいのかよくわからないのです。
すみませんが、どのように書き換えるのかを教えてください。
008481 ◆V3marusw 02/09/29 12:11ID:1nC5j6FV
トリップ
00858202/09/29 13:03ID:???
>>83
スレ違いなのでこっちに書いといた
http://pc.2ch.net/test/read.cgi/php/1028193595/187
00868102/09/29 13:37ID:???
スレ違い失礼しました。今度から気をつけます。
どうも、ありがとうございました。
008779=7102/09/30 11:09ID:???
>>82
ありがとうございます。
納得しました。
0088nobodyさん02/09/30 21:50ID:???
ホント糞な質問させてもらいます。すみません。

CGIでブラウザに出力する時、ヘッダーの中に送信するファイルタイプ書きますよね?
それの一覧表みたいな物が書いてあるサイトってないでしょうか?
midとか、jpegとか、出力する時どーやって書いたら良いのか分からないもので…

ホント厨房ですみません
0089nobodyさん02/09/30 22:02ID:???
>88
それらの単語を組み合わせて検索サイトにかけたらいっぱい出てきたぞ。
試してみ。
0090nobodyさん02/09/30 22:03ID:???
>>88
サーバの /etc/mime.type 辺りにない?
0091nobodyさん02/09/30 22:28ID:???
>>89
ごめんなさひ。
自分もそれらしきサイトを見つけました。

>>90
サーバに入ってるんですか?
ヘッダーって受け取る側に対するためのプロトコルですよね?(違うのカナ?)
と言うか、俺が借りてるサーバ内のディレクトリ自由に見れないっす。
環境変数かなんかで取得出来るなら是非教えていただきたいです。
0092nobodyさん02/09/30 23:18ID:???
>>91
クライアントがunixなら、>>90.
windowsなら、explorer->表示->フォルダーオプション->ファイルタイプ。
0093nobodyさん02/09/30 23:40ID:K+IqKEJl
>>92
なっとく。
ありがとです。
0094nobodyさん02/10/01 15:25ID:???
<!--#include virtual="hogehoge.html"-->
等のssiってcgiから呼べませんか?

print '<!--#include virtual="hogehoge.html"-->';
だとそのまま出力されてしまうので。

呼び出すファイルがcgiだったら require とかで呼べばいいんですが、htmlの場合って
どうすればいいんでしょ。
0095nobodyさん02/10/01 18:36ID:???
CGIからSSI使える訳ないじゃん。
つーか使える必要もないし。

普通に開いて読み取るとかイロイロあるしょ?
0096( ´�D`) lo02/10/01 19:33ID:fiT0f6FN
niftyで携帯とPCで振り分けた掲示板を使おうと思ってるんですけど
どうしてもエラーでます。
まさかとは思いますがniftyではuser_agentが使えないんですか?
0097nobodyさん02/10/01 19:38ID:???
>96
そういう事はniftyサポートに聞け。
0098( ´�D`) lo02/10/01 20:25ID:???
一応メール送ったんだけどこっちで聞いたら知ってる人がすぐに答えてくれることもあるかと思ったので…
0099nobodyさん02/10/01 20:29ID:???
>98
じゃあ、こっちなりの答え。
どんなエラーが出るかわからないし、CGIの言語もわからない。
それではエラーの原因は特定できない。
user_agentが原因だと思うなら、それを吐き出すだけのスクリプトを作ってみるとか
診断君でも設置して確認してみるとかすればいんじゃないか?

しかし、niftyに聞くのが一番確実。
このスレでniftyの設定を聞かれても板違い。
0100nobodyさん02/10/01 20:29ID:???
>>96
プププ
エラーの原因をUSER_AGENTのせいにしてるよ。
0101nobodyさん02/10/02 00:36ID:???
今「」人のビジターがこのHPを見てる

↑ってのをHP上に表示するCGIを探しているんですが、ご存知の方いますか?
0102nobodyさん02/10/02 00:59ID:???
>>101
CGIではリアルタイムでビジターを管理することはできません。
擬似的にやるとしても退室の際に必ず決まった方法で退室してもらわないと無理
010310102/10/02 01:06ID:???
>>102氏

CGIでなくても構いませんので、何か無いですかねー。
0104102じゃないけど02/10/02 03:29ID:???
>>103
無理無理。
入退室制にすればまだ可能。
だけどそんな所にアクセスしたくない。
0105nobodyさん02/10/02 07:45ID:???
>103
ブラウザを使わずに専用のクライアントをプログラムして、そのクライアントでしか閲覧できないようにする。
0106nobodyさん02/10/02 08:57ID:???
>>95
Apache2.0では使えたりします。
意味無いとは思いますが。
010710102/10/02 12:03ID:???
>>104
わかりました。ありがとうございました。
01089502/10/02 16:25ID:???
>>106
mod_perlを使ってもperlでSSIを書ける。
意味はないけど。
0109nobodyさん02/10/02 23:43ID:mzLIaqrg
街の灯
http://www.matino-akari.com/linksyu/
みたいなスクリプトのある場所を教えて頂けないでしょうか。
探したのだけどシンプルなものがどうしても見つからない・・・。
011010902/10/02 23:44ID:mzLIaqrg
スレ間違えました、すいません。。。
0111nobodyさん02/10/03 22:47ID:???
次スレ早すぎ
0112nobodyさん02/10/04 00:41ID:???
>>103
・htmlページにcount.cgiを埋め込む
count.cgiはIPをキーにexpireを設定(DBMが楽)
透過gifを返す

・view.cgiで人数を画像で表示
画像はon-fly,GD.pm等で作成

昔やったことあるが、簡単に作れます。
http自体がリアルタイムでセッション管理しているわけじゃないし、
適当だけどね。
タイムアウトの処理は、count.cgiが呼ばれる度にチェックするか、
crontabで

ipは当然重複する場合があるから、クッキー食わせるとか、
IP+agent+...とかで工夫する
0113nobodyさん02/10/05 20:42ID:apJJAmbi
フォームメールに添付ファイルを送信する機能をつけたいのですけど、
どう書けば出きるでしょうか?
0114nobodyさん02/10/05 20:45ID:???
今いるディレクトリ名を取得して、出力したいのですが
(「index of $dir」などで)

どう書けばいいでしょうか?
0115nobodyさん02/10/05 21:14ID:???
>>114
$dir = `pwd`;
0116nobodyさん02/10/05 21:23ID:???
>>115
それだと、今いるディレクトリだけではなく
フルパスが表示されるんですが…
0117 ◆hMJAPH9PWA 02/10/05 23:52ID:???
>>116
フルパスを得られたんだから加工すればいいじゃん…。少しは自分の頭を使いましょう。
まぁマジレスすると、普通はCwdモジュールを使います。

#!perl -w
use Cwd qw(getcwd);
use File::Basename qw(basename);

my $curdirname = basename getcwd();

print $curdirname, "\n";
__END__
0118ほっとぞなー02/10/06 00:11ID:b+S20Ecq
CGIで、
メールだけを使って対戦ゲーム(例えばオセロ)をする仕組み
を作ることは可能でしょうか?
具体的には、自分の指し手をホストにメールで送って
ホストはその手を反映させた盤の情報をプレイヤー達に
メールで送りつける、というようにします。

このような仕組みをつくる手がかり、ヒントを下されば幸いです。
0119nobodyさん02/10/06 00:40ID:???
>>118
練鯖でやると仮定して。
できる。
http://member.nifty.ne.jp/hippo2000/perltips/rcvmail.htm
これを読めば、メールを受け取る仕組みはわかるだろう。
後は、すぐに反応をさせたい場合は、cronを調べるべし。crontabとかで検索せよ。
0120nobodyさん02/10/06 01:18ID:???
>>118
CGIでやる意味はないな。Webプログラミングってわけもないので板違い。
メール受け取ったSMTPがプログラムに投げて、
そのプログラムが結果をメール送信するだけでしょ。

.forward あたりを調べて、わからなかったら
プログラム自体の質問はプログラム板へ、
メールをプログラムに投げる方法ならUNIX板へどうぞ。
0121ほっとぞなー02/10/06 01:24ID:b+S20Ecq
>>119,>>120
ご丁寧なアドバイスどうもありがとうございました。
とても参考になりました。
あとは自分でがんばってみます。ありがとうございました。
0122CGI@リファラーでいいですか?さん02/10/06 03:19ID:tpCDZSk3
CGIスレで聞くべきことかわからんのですが。。。

掲示板で
”指定したフォーム以外からの書き込みを無効にする”場合
リファラーを参照して、照合すればよいでしょうか?

心配なのが、リファラーを返さないブラウザがあったらどうしようってことなんですが、
そんなブラウザってあるんでしょうか?

あと、他にいい方法とかありましたら、どうぞご教授お願いします。
0123nobodyさん02/10/06 04:38ID:???
>>122
知ってるブラウザでリファラを返さないブラウザは知らないが・・・

けどリファラを偽造するくらいなら簡単に出来る
0124nobodyさん02/10/06 04:44ID:???
>>122
単純にはREFERERのみで良いと思われ。儂もそうする。
手のこんだことをするなら、動的に変わる隠し変数みたいなので不正アクセスをはじくとか。。。

i-modeかなんかでREFERER返さないものってなかったっけ。
逆にあやしいブラウザだと、REFERERを偽れるので、そっちの方が心配だと思われ。
0125nobodyさん02/10/06 04:53ID:???
Norton IE 入れてると、デフォルトで吐かないよ。
0126nobodyさん02/10/06 10:05ID:???
ネスケ/モジラもちょっと弄ればリファ出さないし。
0127nobodyさん02/10/06 12:28ID:???
>>122
「Referer リクエストヘッダの除去」といページがある。
http://www.st.ryukoku.ac.jp/~kjm/security/memo/referer.html

フォームの生成も動的にできるなら、
>>124 さんの方法がイイかも。
0128どっげぇマーチン02/10/06 17:24ID:6RfgQjkt
2chでのURLは
http://news2.2ch.net/test/read.cgi/newsplus/数字/
とかでスレとかを指定してますが、read.cgiにこの数字はどうやって渡しているんでしょうか
普通なら
http://news2.2ch.net/test/read.cgi?cate=newsplus&thread=1033647903
ってこんなふうにすると思うんですが。
mod_rewriteを使えば可能なのかなと思うんですが、それ以外でできる方法ってなんでしょう?
0129nobodyさん02/10/06 18:35ID:???
>>128
環境変数 PATH_INFO
0130どっげぇマーチン02/10/06 18:43ID:6RfgQjkt
---%DocumentRoot%test.php----
<? phpinfo() ?>
---
で
http://サーバ/test.php/aaa/bbb
ってやったらphpinfoの内容が表示されて
PATH_INFOが/aaa/bbb/になってました。
これをCGIで解析、表示するわけですね。
さんすくこ
0131太郎02/10/07 00:39ID:+FxSSxSS
無料サイト総合案内室わつくりますた。
情報量は知り合いの友達よりも結構多いです。
あと無料ソフト集もあるのでねダウソしてみては 。
あと、このサイトの正式タイトルを考案中ですので応募してみては。
あとアンケートにも答えてみては。

http://www31.tok2.com/home/sanche/
0132nobodyさん02/10/07 00:55ID:???

おい、太郎よぉ。

ここはCGI質問スレだぜ、、、みてはスレとちゃうぜ!
0133nobodyさん02/10/07 13:32ID:???
perlのLWPモジュールでいくつかのHPを取得するとこまで
できたんですが、ファイルに保存しないで、ストリーム
っていうのかな、流れてきた文字列に検索かけて、必要な
行だけ取り出すようなことできますか?
パイプとか・・ヒントをいただきたく。
0134nobodyさん02/10/07 13:34ID:???
ごめんなさい。こりゃCGIじゃないから初心者スレに行った方が
いいですか?すぐ向こうにも書くとマルチさらし上げとかされ
るから、もうちょっとまちます。はい。

0135133==13402/10/07 13:44ID:???
だれか〜、早くスレ違いって書いてくれよ〜
0136nobodyさん02/10/07 13:45ID:???
>>133
漏れはできるぞ
0137133==13402/10/07 13:47ID:???
>>136
じらさないでおせえれ。
教えてくださいませ。
0138nobodyさん02/10/07 14:15ID:???
検索条件の例は?
0139133==13402/10/07 14:47ID:???
>>138
あっ、すません。日本語(euc-jpあたり)で1語ていいっす。
0140133==13402/10/07 14:53ID:???
そいで、その単語の入っている文を抜く。「。」から「。」まで。
0141133==13402/10/07 16:25ID:???
>>133につきましては、解決いたしました。(初心者スレで)
貴重なスレスペースを汚しまして、失礼いたしました。
0142nobodyさん02/10/07 23:19ID:jF69Rk9S
cgi初心者です。
ttp://www.*******.com
にアクセスすると、OS別に(index.html)や(/i/index.html)に自動でジャンプするcgi等はありますか?
情報キボーン
0143nobodyさん02/10/07 23:31ID:???
>>142
キミなんかカコワルイね
0144nobodyさん02/10/07 23:45ID:jF69Rk9S
age
0145nobodyさん02/10/07 23:48ID:???
>>142=>>144 きみまだいるのか・・・

UAで振り分ければ?
0146nobodyさん02/10/08 11:33ID:???
>>142,144
mod_rewrite。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
cgi初心者にはお薦め出来ない。
まあお前、ドcgi初心者は、HTTP_USER_AGENTでも食ってなさいってこった。
0147nobodyさん02/10/08 15:17ID:???
>>146 センスが全く感じられないのは俺だけじゃないはず。
0148nobodyさん02/10/09 13:12ID:???
「CGIの運用に関する質問スレッドです。」と書かれているのでスレ違いかもしれませんが・・・・

今はCGIといえばPerlですよね。
CGIが開発された当初はどのような言語がよく使われていたんですか?
C言語ですか?
014914602/10/09 13:34ID:???
>>147
コテハン晒さないでよかったぽ。

>>148
sh かね。
0150nobodyさん02/10/09 14:15ID:???
>>148
CGI を実装したのって NCSA httpd 1.0 が最初でいいんだっけ?
ttp://hoohoo.ncsa.uiuc.edu/docs/Upgrade.html

リリースされた正確な年月日が分からんが、
ttp://www.webhistory.org/www.lists/www-talk.1993q4/0811.html
1993年末って事でいいんだろうか。

その時既に Perl は 4 から 5 への移行期だ。
ttp://www.perldoc.com/perl5.6/pod/perlhist.html

なら最初から Perl 使ってた人も多いんじゃない?
015115102/10/09 17:33ID:c2qNWBgI
今でもC言語使ってますが、マズイすか?
0152nobodyさん02/10/09 19:06ID:uuWUlWUQ
>>142
初心者ならCGIからJavascriptの道へ転進したらいい
0153Perl初心者スレ84502/10/09 19:13ID:1+Y7R6lC
Perlスレで質問したら、こちらのスレに行くように
勧められたんでこちらに書き直します。
CGI.pm を使ってCGIを書いているのですが、

my $query = new CGI;
my $value = $query->param("text");

print
  $query->header
  (
    -type=>'text/html; charset=euc-jp'
  ),
  $query->start_html
  (
    -title=>"値の表示",
    -lang=>'ja'
  ),
  $query->h1($value . "の値"),
  $query->end_html;

として$valueを取得して表示する場合、
文字コードの扱いはどうなるんでしょう?

自分は、クライアント環境のコードがそのまま
飛んでくるだろうと考えていたのですが、
UNIX上のブラウザから試してもWindows上のブラウザから
試しても化けずに表示されました。

もしかして、CGI.pm は適切に文字コードを変換するところまで
やってくれているのですか?

0154nobodyさん02/10/09 19:30ID:???
>>153
OSに関係なく多くのブラウザが、ページがShift_JISならShift_JISで、EUC-JPならEUC-JPで送信すると思うけど・・・
0155nobodyさん02/10/09 19:49ID:???
アクセスしてきたアドレスが「....test.cgi?name=mona&msg=age」
となっているとき、monaやageは、どうやって取得したらよいの
でしょうか?
015615402/10/09 19:53ID:???
>>153
とりあえずNetscape7.0(Linux)では>>154で言ったとおりだった。

>>155
getenv()などで環境変数QUERY_STRINGを参照。
0157nobodyさん02/10/09 20:03ID:???
>>156
ヒントありがとうございました。
助かりました。
0158nobodyさん02/10/09 20:04ID:???
>>153
Use the source, Luke!
0159nobodyさん02/10/09 20:05ID:???
>>155に似た質問なんですが、ブラウザに直接「....test.cgi?name=mona&msg=age」
を入力してきたユーザと、正式にフォームのボタンをクリックしたユーザを
見分けて処理することはできるのでしょうか?
0160nobodyさん02/10/09 20:19ID:???
>>159
環境変数HTTP_REFERERを見れば判別できるかもしれないが、それはクライアントが送るものだから信用できないといえば信用できない。
0161nobodyさん02/10/09 20:22ID:???
>>160
なるほど!とりあえずいろいろやってみます。
016215302/10/09 21:16ID:???
>>154
なるほど。この場合は
  $query->header
  (
    -type=>'text/html; charset=euc-jp'
  ),
とやって、Content-Type ヘッダが

Content-Type: text/html; charset=euc-jp

となるようにしているためにEUC-JPでかえってきている
っつーことですか。
ありがとうございます。
0163nobodyさん02/10/09 21:26ID:???
>>155
すぐ上(>>153)にやり方が上がってるがソレじゃ嫌なのか?
016415502/10/09 21:59ID:???
>>163
Perlじゃないんです。
016516302/10/09 22:34ID:???
>>164
申し訳無い。
>※CGIは特定の言語に依存するものではありません。
の言葉を噛みしめて逝ってきます。


0166nobodyさん02/10/10 00:34ID:???
若干スレ違い(板違い?)かも知れませんがよろしくお願いします。
CGIからあるアドレスにメールを送信したところ
User unknownとなり送信されませんでした。
普通にメーラーからテスト送信すると送信元によって挙動が異なり
送信されたり、User unknownとなったりします。
これはメールサーバのどのような設定が関係していると思われますでしょうか。
よろしくお願いします。
0167名無しさん02/10/10 03:07ID:M5uzoLnQ
今、KENTさんのpostmailを使ってみてるんですが、
フォームに記入したあと「この内容で送信する」を
押すと、Write Error : ./*****.tmp
というエラーが表示されます。(*****の部分は毎回違う数字)

これはどこがいけないんでしょうか?
初心者なんでよろしくお願いします。
0168nobodyさん02/10/10 06:13ID:???
perlのcgi.pmってなんでHTMLタグを出力する命令まであるんでしょう?
絶対直接printで書いたたほうが早いのにどうしてメモリの無駄遣いするかな。
0169ぼるじょあ ◆yBEncckFOU 02/10/10 09:00ID:???
■■■■■■■■■■■■■■ 終了 ■■■■■■■■■■■■■■■■■
0170nobodyさん02/10/10 09:22ID:???
>>167
cgiを置いているディレクトリのパーミッションにその他ユーザに対する書きこみ許可が無いため
cgi(=その他ユーザ)が作る新しい***.tmpファイルを書き込むことが出来ない。
対策
その他に書きこみ許可を与える。



つまりパーミッションを777にしろ。
0171nobodyさん02/10/10 10:05ID:lLciuzr5
cgiプログラムを見る方法って無いですか?
名前に点数をつけますってので自分の名前が
2点だったので少しむかついて。どんなアルゴリズムか知りたいので。

http://www.cc.rim.or.jp/~ksa/cgiland/namae.html
0172nobodyさん02/10/10 10:11ID:???
>>165
君が逝く必要は無いじゃないか。
使用言語を書いていない>>155が悪いのだから。
0173nobodyさん02/10/10 10:12ID:???
>>171
作者に聞きなさい。
0174nobodyさん02/10/10 10:14ID:hlW8Speq
すいません。教えて下さい。perlだとcgiが動くのに
Cだと動きません。昨日まで動いていたCGiなのでソースが間違ってることは
ありません。
昨日、サーバーの設定をいじったら動かなくなりました。
どなたかご存知ないでしょうか?
お願いします。
0175nobodyさん02/10/10 10:49ID:???
>>174
サーバ上でコンパイルしなおしても動かないか?
017617502/10/10 10:52ID:???
>>174
もしかして、サーバソフトがAN HTTPdだったりする?
あれは設定によっては問答無用でプログラムを(たとえば)Perlに渡すようになるよ。
つまり、コンパイル済みのバイナリをPerlに渡してエラーと・・・・

以前、プログラム板のCスレッドでそういう状況におかれた人がいたよ。
017717402/10/10 10:53ID:hlW8Speq
ローカルでコンパイルしたものをあげています。IISなので。
昨日まではそれで動いていたのですが、POST送信を受け付けないため
いろいろといじったらエラー表示になってしまいました。
どうしたら直るのか、またCで動かす場合にはそういう設定が必要だった事を
知らなかったので激しく後悔しております。。。
0178nobodyさん02/10/10 11:39ID:???
>>174
実行権がスクリプトのみになってるとかじゃないの
017917802/10/10 11:41ID:???
>>174
拡張子は.exeですよね。
018017402/10/10 11:48ID:hlW8Speq
実行権はスクリプト及び実行可能ファイルになっています

拡張子は.cgiです。exeだと動くのですが、気に入らないので.cgiで使ってました
もしかして.exeで使わないといけないんですか?昨日は.cgiでも
動いたのですが…
0181nobodyさん02/10/10 12:24ID:e9euvxTv
iputのcheckboxのvalueの初期値ってどなたかご存じないですか?
0182nobodyさん02/10/10 12:57ID:???
>>181
規定は無いんじゃないかな。
IEとネットスケープは 'on' になってるけどちゃんとvalue=で指定しといた方が良いと思うよ
■ このスレッドは過去ログ倉庫に格納されています