トップページphp
990コメント300KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/26 22:47ID:44KxXtaW
CGIの運用に関する質問スレッドです。

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

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

過去ログ・関連スレッドは >>2-5 あたりに
0732nobodyさん03/05/25 00:10ID:???
>>731
無理。
0733nobodyさん03/05/25 00:28ID:Os0pVi9Q
>732
なんで無理なん?
0734nobodyさん03/05/25 00:36ID:???
>>731
そんな夢のような「タグ」は存在しない。
つかお前はHTMLをなんだと思ってやがりますか。

http://hoge.ne.jp/~hoge/
こんな風に、URLの末尾をディレクトリにしてアクセスした時に、
PCと携帯を振り分けたいのであれば、方法はいくらでもあるが、
>>731程度の認識と知識ではどれも不可能だろう。

>>732は途中をかなりすっ飛ばしているが、結論だけは正しいな。
0735nobodyさん03/05/25 00:51ID:Os0pVi9Q
>734
http://hoge.ne.jp/~hoge/
こんな風に、URLの末尾をディレクトリにしてアクセスした時に、
PCと携帯を振り分けたいのであれば、方法はいくらでもある


それがやりたいんだw
0736nobodyさん03/05/25 00:58ID:Os0pVi9Q
>734
頼むからそれ教えて!
さっきからCGI失敗しまくりだから・・・
0737_03/05/25 01:03ID:???
http://homepage.mac.com/hiroyuki43/
0738サンプルです03/05/25 01:05ID:qXE1ysu+
☆オススメ! カワイイ女の子満載のHサイト☆ 〜二日間だけ無料です〜
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0739nobodyさん03/05/25 01:46ID:???
index.htm を index.cgi にする。
0740nobodyさん03/05/25 02:22ID:???
>>739
その書き方は分かってる奴ならいいが、そうじゃないと文面どおり解釈されかねないぞ。
(index.htmlをindex.cgiにリネーム→アップロード→動かない!)
0741nobodyさん03/05/25 02:34ID:???
DirectoryIndex 該当するファイル名

example.(com|net|org) 使ってあげなさいよ。RFC 2606
0742nobodyさん03/05/25 04:34ID:???
SSI使えばいいじゃん。
074369903/05/25 06:54ID:???
http://afk.s31.xrea.com/
一応はこれです。ぜんぜんだめ?
0744nobodyさん03/05/25 10:40ID:hi9lch0f
アップローダの作り方おしえて
0745nobodyさん03/05/25 10:45ID:???
>>744
教えてできるものじゃありません。
0746nobodyさん03/05/25 11:20ID:j5yBhsq1
DirectoryIndex 該当するファイル名
って.htaccessに書くんだよね?その書いた.htaccessファイルってどこにうpすればいいんだっけ?
0747nobodyさん03/05/25 11:26ID:kaO8yXyX
ページを開こうとするとパスワードを入力せよと言うのがでて
正解か不正解によって2つのページに飛ぶ、といったようなものを
つくるにはどうしたらいいでしょうか
0748nobodyさん03/05/25 11:31ID:???
>>746
有効にしたいディレクトリ。

>>747
「どうしたらいいか」という言葉が、どの程度までの情報を求めているのか分からんので
答えようがない。もうちょっと詳細によろしく。
0749nobodyさん03/05/25 11:37ID:kaO8yXyX
cgiの全文、またはそれに相当するものが掲載されているサイトのURL
2時間くらい探したけれど見つからなかったので
075074603/05/25 11:43ID:j5yBhsq1
該当するファイル名は絶対パスでもいいんかな?
0751nobodyさん03/05/25 11:50ID:???
>>749
「つくる」って、CGIの設置のことかよ。
このスレでつくるっていったらコーディングとかアルゴリズムと思うじゃないか……

その手のCGIはけっこう配布されてるから、探せばすぐ見つかるぞ。
075274903/05/25 12:03ID:kaO8yXyX
>>751
探してみます
0753nobodyさん03/05/25 12:09ID:???
あれっ!昨日頼んだのにもう来てる本当に安かったのでびっくりしました


http://ime.nu/ime.nu/ime.nu/www.net-de-dvd.com/
0754nobodyさん03/05/25 12:12ID:???
>>750
例 DirectoryIndex index.cgi index.html index.htm

ファイル名をつけないURLでアクセスした場合、そのディレクトリの
中から上記の左から順に探して見つかったファイルを表示する。

つーか、もう答えを教わってるんだから書き方ぐらい調べれ。
0755nobodyさん03/05/25 12:14ID:Jgr8OJqO
アダルトDVDが800円〜!!
http://www.dvd-yuis.com/
最速発送!すぐ届く!!
http://www.dvd-yuis.com/
女性も安心!秘密厳守!!
http://www.dvd-yuis.com/
おっ!安い!買っちゃお!
http://www.dvd-yuis.com/
えっ!?もう届いたの?
http://www.dvd-yuis.com/
0756nobodyさん03/05/25 12:16ID:9EnXV42Y
終わった言語
0757nobodyさん03/05/25 13:01ID:???
>>756
俺もそう思う。CGIはすでに過去の言語。
CGIみたいな汚い言語は駆逐されて当然。
0758nobodyさん03/05/25 13:12ID:???
あの〜、CGIって言語じゃないんですが
0759nobodyさん03/05/25 13:17ID:???
>>758
釣られんなよ
07601003/05/25 13:39ID:???
得点ランキングを記述するデータを改造したいのですがおしえてください
●やりたいことは、全角(ひらがな、カタカナ)で記述した場合の文字化け対策
データを記述したときに更新をおしたら連続書き込みしてしまうのを連続書き込みしないように
したいのですがソースは下記にのせます。
初心者でもうしわけないのですがアドバイスお願いします
07611003/05/25 13:41ID:???
#!/usr/bin/perl

# CGIスクリプトから見たベースとなるディレクトリ
$base = "./ranking";

require 'cgi-lib.pl';
require 'jcode.pl';

$title = "ランキング";# ウィンドウタイトル
$data = "ranking.dat";# データベースファイル
$dispranking = 10;# 表示したい上位ランキング数

# ヘッダー出力
print "Content-type: text/html;charset=Shift_JIS\n\n<html><head><title>$title</title></head><body bgcolor=\"FFffFF\">\n";
# 入力データの解析
&ReadParse(*in);
$score = $in{'score'};
$name = $in{'name'};

&jcode'convert(*name, 'jis');
07621003/05/25 13:42ID:???
# ランキング抹消コマンド
if(@ARGV[0] eq "clear"){
open(FILE, "> $data");
print "\n";
close(FILE);
exit(0);
}

# データベースのデータを読み込む
open(FILE, "<$data") || &ferror();
while(<FILE>){
chop;
@v = split(/\t/);
$mscore[++$#mscore] = @v[0];
$mname[$#mscore] = @v[1];
}
close(FILE);
07631003/05/25 13:43ID:???
} else {
$index = -1;
}

# スコアをデータを表示
print "<center><h2><b>最新スコア</b></h2>";
print "<table border=1>\n";
open(FILE, "<$data");
$count = 1;
while(<FILE>){
# last if $count == $dispranking + 1; <- これを有効にすると上位5位のみ表示
# 順番を表示
print "<tr><td>$count</td>";
chop;
@v = split(/\t/);
if($count++ == $index){
# たった今入力されたスコアは色を変えて表示
print "<td><font color=red>@v[0]</font></td>";
print "<td><font color=red>@v[1]</font></td>";
} else {
print "<td>@v[0]</td><td>@v[1]</td>";
}
print "</tr>\n";
}
close(FILE);
print "</table></center>\n";
print "</body></html>\n";
07641003/05/25 13:44ID:???
# エラー表示して終了
sub ferror {
local($file) = @_;
print "<center><h1>$title<br>\n";
print "ファイルが開けません<br></h1></center>\n";
exit(0);
}
長くコピペして申し訳ありませんでした。
職人さま教えてください。お願いしますm(__)m
0765nobodyさん03/05/25 13:54ID:???
文字化けは コレじゃないかな。
&jcode'convert(*name, 'jis');
連投は面倒なので>>765がやってくれるはず
0766nobodyさん03/05/25 14:45ID:???
>>765
やってくれるのか。頼むわ。
07671003/05/25 14:56ID:???
>>765さんありがとうございます。
下記のようにかえてもやはり文字ばけするんですよね・・・。
&jcode'convert(*name, 'cue');
perl難しいです。
アドバイスありがとうございます。
得点ランキング完成させたいです。
0768_03/05/25 15:22ID:???
http://homepage.mac.com/hiroyuki43/jaz_b01.html
0769圧縮@初体験03/05/25 15:58ID:0niv9DMs
自分で使う掲示板を色々作ってるのですが
今回、始めて…今ごろになって圧縮を利用しようと
配布されている物を見たり検索してみたのてすが・・・

>>サーバ側の「gzipパス(この場合は/usr/bin/gzip)」にアクセスして圧縮を実行させ
>>「gzipパス」はプロバイダによって違うことがあるので、設置の際には調べておくこと

usr/bin/gzipを作成しろと言う事なのでしょうか?
サーバー(自サーバー)の場合の設定は必要なのでしょうか?
設定を確認してない場合、gzip圧縮をONにしても効果が無いのですか?
色々検索してみたのですが・・・

どうかご教授お願いします。

0770nobodyさん03/05/25 16:20ID:???
>>767
ヘッダでSJIS吐いてるのにJISに変換するの?
0771nobodyさん03/05/25 18:09ID:???
>>769
/usr/bin/gzip は gzip圧縮をする圧縮プログラム。
Windowsは知らないけどUnix系なら大体入ってるんじゃないかな。
0772nobodyさん03/05/25 20:00ID:???
CGIから
print "Location: ./test.html\n\n";
でジャンプするとき、フレームを指定すること出来ますか?
0773nobodyさん03/05/25 21:38ID:???
>>772
ワロタ。
0774nobodyさん 03/05/26 08:50ID:???
一つ識者の見解を伺いたく・・・

多くのcgi解説サイト等でuriエンコードで、半角スペースを+に変更するってのを記述してあるんだけど、
これって、RFC的に正しいのだろうか?

例えばform文のinput type="text" で、 パラメータに"+"を入力できないってことになるんだけど・・・
0775nobodyさん03/05/26 09:36ID:???
>>774
RFC 2396 かな?
まあ、規格は良く知らんが、"+"=>"%xx"、" "=>"+"って考えれば、問題ないと思うが。
0776nobodyさん03/05/26 16:04ID:???
>>774
ブラウザ上でフォームに入力された値や、HTML ファイルに
直書きされる値は URL エンコードされる「前」の状態。
submit 時にブラウザが application/x-www-form-urlencoded
形式にエンコードして (>>775 の変換を行って) サーバに送る。

HTML 的には input 要素の value 属性は CDATA だから
+ が含まれていても OK な筈 (自信なし)。
077777403/05/26 16:43ID:???
>>775-776どうもありがとう。
その見解であってる模様です。
こっちでも試してみました。
デコードの順番を
$value =~ s/\+/ /g;
$value =~ s/%([\da-f][\da-f])/pack('H2', $1)/egi;
この順番でやってるうちは問題ないっぽい。
0778nobodyさん03/05/26 16:57ID:???
>>777
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg;
こうだろう。
\dはいらないし、それじゃaa-ffしかデコードされない。
0779nobodyさん 03/05/26 17:00ID:???
>>778
\d が 0-9だし iで大文字小文字両方ともみるのであってると思うが?
処理効率は>>777の方がいいとは思うが・・・
078077703/05/26 17:06ID:???
>>779

s/777のほうがいい/778のほうがいい/

だったyo!
0781nobodyさん03/05/26 17:11ID:???
どっちでも大丈夫だけど効率って今まで考えたことなかったな
0782nobodyさん03/05/26 18:54ID:TSTriSzY
スレ違いだったらスマオ。
dionのメール送信CGIを使って、dionのホムペにある見本のタグ以外
(プルダウンメニューなど)のinputタグいれて動作できた香具師いたら、
どうやったか教えて下さい。
so-netのメール送信CGIは、formタグの最初だけ見本通りにすると、あとのinputタグはかなり自由に
できたのですが、dionはだめなのでつか?
おねがいしまつ。
0783bloom03/05/26 19:10ID:gUjk1KcM
http://homepage.mac.com/ayaya16/
078491403/05/26 19:18ID:tmRvurLY
http://pc2.2ch.net/test/read.cgi/hp/1051020507/l50
ここの927のもので、ここに誘導されたので再度質問します

たまに見る「今トップページを見ている人は**人です」っていうのはどうやってるんですか?
0785ヱッ’ノ03/05/26 19:36ID:zHcI20PH
質問させていただきます。
うちのサーバではゲームCGIを設置しているのですが
プラウザのボタンを押すと負担かかるんですよね・・・(涙
ってことでプラウザのボタンをなにかのイベントになるってことは出来ませんか?
例えば更新を押すとイベント発生!!○○にいって
「更新は押さないでください!」
みたいなのが表示されるって感じで、、、
何方かご指摘おねがいます。
0786_03/05/26 19:51ID:???
http://homepage.mac.com/hiroyuki43/hankaku09.html
0787nobodyさん03/05/26 20:50ID:???
>>782
DIONのメール送信CGIってなーにー?
世の中全ての人間がDION使ってるわけじゃないんだからさー。
URLくらい出せよ。
回答者がわざわざ調べないといけないような質問はすんなよ。
0788nobodyさん03/05/26 20:52ID:67MeoiMR
>>777
$value =~ s/%([a-fA-F\d]{2})/pack('H2',$1)/ge;
これはどうだろう
0789nobodyさん03/05/26 20:54ID:67MeoiMR
>>785
無理と思うよ
0790nobodyさん03/05/26 20:55ID:???
>>784
やり方は二つ思いつく。

一つはチャットCGIでよく使われる「現在の入室者数」と同様の方法だ。
ゆいチャットのソースでも見て研究しろ。

もう一つはセッションを使う方法だ。
セッションは通常有効無効のステータスがあるので、
有効になっているセッションをカウントすれば、
見ている人間になる。

なお、HTTPプロトコルの性質上、この数値には精度は求められない。
本来は「だいたい**人」としなければ嘘になる。
0791nobodyさん03/05/26 20:56ID:???
>>785
言ってる意味がわかんねー。
0792nobodyさん03/05/26 20:56ID:67MeoiMR
>>784
そういうCGIのコード見たら分かるのでは。
大体が、一定時間(例えば1分)以内にアクセスした人を
数えているのだと思う。
CGIの場合常に見張るのは無理だし。
JavaAppletとかなら確実な人数出せるだろうね。
0793nobodyさん03/05/26 22:45ID:???
>>785
プラウザって何?
新しい2ch用語ですか?
0794nobodyさん03/05/26 23:36ID:???
>>784
たまに見る所のURLを出せば一発で答えが出ると思うが、
たぶん CGIで一定期間(過去10秒とか)にカウントした人数を出しているだろうね。
htmlファイルに埋め込めるようにJSとセットになっているのも見たことある
079578203/05/26 23:44ID:EsFJ+WYr
>>787 レスつけてくれてありがとうでつ。
ttp://www.dion.ne.jp/support/hp/infocgi/case2/mail/index.html
DionのホームページサービスでつかえるメールデコードCGIのことです。
自作CGI不可なのはともかく、見本のタグ以外のinputタグも使いたいのですが、
うまくいきませんでした。(見本通りならオケーだった)
で、DIOnのサポセンでは、見本以外に自分でタグを追加して動作してる例もあるが、
当社として動作確認はしていないので、「上手く行く人もいるらしい」としか言えないといわれて。
なので、その「上手くいった人」がこちらにいないだろうか、
で、もしいたら、どうやったのか教えてもらえればと思ったのでした。
もし分かる人がいたら、よろしくお願いし松。
0796nobodyさん03/05/27 00:04ID:???
>>795
自分で試すのが一番早い。間違いない。

それに、そもそもここにいるのは自作する人間ばかりなので、
他人のCGI、それもソースが読めないようなものに興味はない人間が多い。

Web製作版にでも行ってみたらどうだ?
0797nobodyさん03/05/27 01:10ID:???
>>795
それCGIじゃなくて、HTMLのレベル。
0798nobodyさん03/05/27 02:03ID:???
>>795
CGI自体が見れないから、内部でどんな処理をしてるのかも分からないし、
「やってる人がいる」というのも、試行錯誤して偶然見つけたのかもしれない。
もはや「裏技」といったレベル。
そんなに知りたきゃ、DIONで同じフォーム使っていてそういう裏技を使ってる
ページを見つけてソース見るなり、直接聞くなりすればいい。
「そういうページ知りませんか」とここで聞いて待ってる暇があったら自分で調べれ。
0799nobodyさん03/05/27 02:09ID:???
>>795
Web制作板のほうのスレで解決したみたいだね。


ドキュメントをちゃんと読んでなかっただけかよ……
0800782=79503/05/27 02:10ID:JdPC8gL6
よくわからんで、こっちにお邪魔してしまってスミマセン。
796さんの誘導どおり、web制作板にいって、質問してみたら、
あっさり解決しました。dionのページの説明文が理解できてなかっただけで、
無事うまくいきました。いちおう、こっちにも書き込んでスレ汚ししてしまったので
解決した報告と、お礼のため書き込みにきました。
0801_03/05/27 02:21ID:???
http://homepage.mac.com/hiroyuki43/hankaku09.html
0802nobodyさん03/05/27 03:17ID:???
HTMLのFormを使ってCGIに対してPOSTすることを考えています.
ここでSubmitした後のページが更新される(CGIからの返り値が表示される)
と思いますが,この更新をなくしたいと思っています.

何か方法は無いでしょうか?
よろしくお願いします.
0803nobodyさん03/05/27 03:21ID:???
>>802
ページを吐き出すようにしなければいいでしょ
080480203/05/27 03:42ID:???
>>803
すみません,具体的にはどのように行えばよろしいのでしょうか?
よろしくお願いします.
0805nobodyさん03/05/27 03:53ID:???
>>802
Web制作板で同じような質問をしてた人がいるから
そっちを参考にするとよい。
0806nobodyさん03/05/27 06:39ID:???
どのようにって、CGI作ってるんならそれぐらい聞くまでもないはず。

誰かが作ったやつを設置だけしてHTMLで何とかしようとしてるのなら、(・∀・)カエレ!
0807nobodyさん03/05/27 11:00ID:???
質問の意図がわからんのだよな
「どんなページが表示されていて」
「どういうデータを送信して」
「なぜページ更新したくないのか」

更新しないようにしようという考え方自体が見当違いで、
もっと適切なやり方があるかもしれないし
0808nobodyさん03/05/27 11:05ID:???
Web製作板で質問を見た者なんだけど本当にここWebprog板なの?
Perlだったらこう1行書けばいいだけだろ。
print "Status: 204 No Response\n\n";
意図とか質問するのもいいけどまず技術的にできるんだからその
回答くらいは書いてやってよ。
0809nobodyさん03/05/27 11:26ID:???
No Contentじゃねーの?
0810nobodyさん03/05/27 12:07ID:???
>>808
それは質問に対する回答と全然違うだろ。分からないんだったらスッコンデロ
0811nobodyさん03/05/27 12:14ID:???
なるほど。そうやればいいのか。
って、それじゃ>>803とそんなに変わらんのでは……
0812nobodyさん03/05/27 12:52ID:???
まあまあ。 >>802 にどの回答を求めていたのか尋ねてみれば。
0813nobodyさん03/05/27 22:23ID:???
>>802は逃げたかな。
0814nobodyさん03/05/28 14:09ID:???
204返す方法をとるなら、status: じゃなくてHTTP/1.1〜で。
またヘッダ情報はブラウザの解釈に依存するところがあるで、
204お構いなしにデータ出力されたり、エラー画面に飛ばされ
ることがある。
とくに携帯相手のサイトをやってる場合おすすめできない。
0815山崎渉03/05/28 17:04ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0816nobodyさん03/05/29 05:39ID:G7vzbJ+L
板違いかも知れませんが、質問させてください。

とある本に、
system("$cgi $arg > /dev/null &");
と書いてあるんですが、
> /dev/null &
の部分がよく分かりません。
これはどういう意味なんでしょうか?
0817nobodyさん03/05/29 06:09ID:???
> system("$cgi $arg > /dev/null &");

$cgiを$argを引数としてバックグラウンドで(&)実行し、標準出力に書き出された内容を/dev/nullにリダイレクトする。つまり破棄する。
081881603/05/29 06:37ID:G7vzbJ+L
>>817
板違いにも関わらず、回答ありがとうございます。

度重なる質問で悪いのですが、
もし$cgi側で標準出力を使わなかったら、> /dev/nullはいらないんですよね?
0819nobodyさん03/05/29 12:01ID:G7vzbJ+L
aga
0820nobodyさん03/05/29 12:02ID:G7vzbJ+L
しくった。
0821nobodyさん03/05/29 19:01ID:???
>>818
逆だ。いらないからdev/nullに捨ててるんだろうに。
082281603/05/29 19:12ID:DM2XwmWX
>>821
?標準出力使わない場合なのに/dev/nullにリダイレクトですか?
ワケワカラン。
0823nobodyさん03/05/29 19:34ID:???
/dev/null が何なのか調べてみれ。
言語書いてないけど、phpだとリダイレクトしないとブラウザの画面が切り離せない。
082481603/05/29 19:38ID:kZGHbp0S
>>823
言語はperlです。
/dev/nullは、/デバイス/ヌルってことですよね。
0825nobodyさん03/05/29 21:33ID:???
>>822
微妙な解釈の違いだな。気にすんな。

>>818→標準出力に何も出力しない→標準出力を使わない→リダイレクト不要
>>821→標準出力に出てくるデータは不要→そういうのは捨てる→リダイレクト必要
082681603/05/29 23:14ID:Xobsjh92
>>825
スレor板違いにも関わらず適切な回答ありがとうございました。

なんとなく解決しますた。
082780203/05/30 01:07ID:???
>>805-814

申し訳ございません.
質問したっきりで消えたような感じになりまして.

具体的にはFlashでWebアプリケーションを作成しているのですが,
Flashからファイルをアップロードすることを考えています.
そこでローカルファイル自体はFlashでは選択ダイアログ等を出すことが出来ず,
HTMLのFORMを利用してファイル選択を行わせることを考えています.
その際FlashからはActionScriptを用いてJavaScriptの関数を呼び出します.
そしてファイルをアップロードする祭にSubmitをForm上で行わせます.
この際ページの更新が有りますと,Flashの現在表示している内容も
更新されてしまい不都合となります.

そこでページを更新せずにSubmitを行いたいと考えています.
ターゲットはIE6を考えています.
当方Webプログラムの経験が浅く,意味不明な点があるかと思いますが
よろしくお願いします.
204で返すことによってページが更新されないようなのでそれを試してみようと思います.
0828nobodyさん03/05/30 02:04ID:???
submitを別窓で。
0829nobodyさん03/05/30 05:17ID:???
>>828
色々調べたところ
FRAMEを用いて別窓でSubmitするという方法がありました.
実は,そちらを試していたところでした.
0830802==82903/05/30 05:30ID:???
print "Status: 204 No Response\n\n";

を試したところ,確かにページの更新がなくなりました.
実際この後送信が成功したかどうか(CGIの返り値)を知りたいのですが,
何か方法は無いでしょうか?

FRAMEを使った方法の場合はJavascriptで定期的に他のフレームを
監視しようと考えています.

よろしくお願いします.
0831nobodyさん03/05/30 08:29ID:???
>>830
贅沢な…それだったらformのtargetを別窓に指定して
そこに普通に値を返させその窓を監視するんじゃないの。
もちろん窓とはフレームであってもいい。
■ このスレッドは過去ログ倉庫に格納されています