トップページ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 あたりに
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を別窓に指定して
そこに普通に値を返させその窓を監視するんじゃないの。
もちろん窓とはフレームであってもいい。
0832nobodyさん03/05/30 09:35ID:AmXGY95O
おーい、cgiで指定した任意の名前で
ファイル(*.html)をダウソさせることって出来ますノン?

これ見て拡張子を指定できるのはわかったノンですが
ファイル名も指定したいノン。
tp://tohoho.wakusei.ne.jp/lng/199903/99030041.htm

よろしくお願いしますノン。
0833nobodyさん03/05/30 10:43ID:???
>>832
・・・理解に苦しむ文章・・・

とりあえず、テキストフィールドにファイル名を入れると・・・と、あるが?
083483203/05/30 11:47ID:AmXGY95O
>>833
ふざけた書き方してすまんかった。

要は、cgiを使ってファイルをダウンロードさせたいんです。
また、その時ファイル名を指定してダウソさせたい。
例えば、テキストフィールドでtest.htmlを指定したら、
そのファイル名でダウンロードさせられないかと・・・。

試したところ、MIMEタイプをapplication/octet-streamにすると
ファイルはダウンロードさせられるが、
ファイル名がcgiのファイル名(例:downloader.cgi)になってしまいす。
.htaccessを併用すると拡張子までは指定できるが、
ファイル名の指定が出来ない・・・。

どうにかこれを実現する方法はないでしょうか?

もしかして、漏れ素っ頓狂なこと言ってるのかな・・・?
0835nobodyさん03/05/30 11:49ID:bJuQNR3f
みてね♪
http://s-rf9.free-city.net/page003.html
0836nobodyさん03/05/30 12:59ID:???
>>834
Content-Disposition
ブラウザの種類やバージョンによって挙動が変わるらしい。
0837nobodyさん03/05/30 13:29ID:???
>>834
俺も、いろいろ試した・・・
・・で、結果はパスを使う。

例 http://***.***.***/downloader.cgi/test.html

この方法だと、test.htmlって名前で落とせる。
083883703/05/30 13:55ID:???
うぉおお!
言い忘れてたけど、この方法は実に危険で、
セキュリティに穴開ける可能性あるぞ!
取り扱いに気をつけること!!
0839nobodyさん03/05/30 14:59ID:GJ3EZgkY
NewsProってゆうスクリプトがあるらしいのだが、
今でも配布してるのだろうか?
0840nobodyさん03/05/30 15:04ID:???
>>839
スレ違い
http://pc2.2ch.net/test/read.cgi/php/1051456859/
0841直リン03/05/30 15:10ID:KvuUHxNV
http://homepage.mac.com/yuuka20/
084283203/05/30 15:37ID:???
>>836
以下のように出力したらでけますた!ありがっつです!

>>837 の方法は漏れには何がどうなってるやらわからないです。
せっかく教えていただいたのに理解できなくて、すんまそん。
厨房は使っちゃいけない魔法だとおもいますた。でも、ありがとです!

テストの内容と結果:
cgiからの出力:
----
Content-type: application/octet-stream
Content-Disposition: attachment; filename=test.html

〜ファイルの中身〜
----

結果:
 ブラウザ    ダウンロード  ファイル名
IE    v6      OK        OK(test.html)
Opera  v7.01  .  NG        N/A   // 普通にページが開かれちゃた('A`)   ギシギシ> |
Mozilla v1.4b     OK        NG(test.html.cgi)

バランバランの結果にはなりましたが
IE、Mozillaで成功してるので問題なさげでした。

あと、教えていただいたことを検索して出てきた参考データ:
tp://tohoho.wakusei.ne.jp/lng/199903/99030058.htm

以上。
お礼とご報告でした。助かたYO!貴様らに幸あれ!
0843nobodyさん03/05/30 16:48ID:r7RRScOt
>>834
Content-disposition: attachment; filename=XXX
084483203/05/30 20:52ID:???
Opera V7.01(EN) & V7.03(JP) (on win2k sp3)
に勝利しますた。

Content-type: application/x-msdownload

強制ダウンロード作戦成功なり・・・。
0845nobodyさん03/05/30 21:01ID:???
Macで試した?
084683203/05/30 21:05ID:???
>>845
mac は持ってないので試してないです。
誰かに試してもらえるとうれしいかもです。
0847nobodyさん03/05/30 22:00ID:bW877X68
うへ〜ん。
FTPのパスワード忘れちゃったよ…
どうやってCGIデータをダウンロードすればいいんだ。
せっかくエクセルデータにしようとしたのに・・・
アクセスしても


Forbidden
You don't have permission to access /cgi/logo/bkup.cgi on this server.


--------------------------------------------------------------------------------

Apache/1.3.20 Server at www.教えないよ!.com Port 80

何かいい方法ありますか?
0848nobodyさん03/05/30 22:02ID:???
>847
身分証もって管理者の座敷に上がりこめ。
0849nobodyさん03/05/31 01:08ID:???
httpでアクセスしてるようにしか見えない。
>847
0850nobodyさん03/05/31 01:15ID:???
FTPが無理だったのでデータファイル(bkup.cgi)をブラウザで呼び出そうとしたんじゃないかな?
パスワードを教えてくれるサービスが無ければ、>>848が真っ当なやり方かと。
0851nobodyさん03/05/31 03:51ID:???
ブラウザから表示できるディレクトリにログファイルを置いてるの?
頭おかしいんじゃねーの。

というか、「FTPのパスワード忘れちゃった」といってコピペしてきたのが
ブラウザのエラー画面(しかもftp://でアクセスしたとは思えないもの)で、
どうしろと言って欲しいワケ?

ディレクトリ指定が "logo" になってるのはtypoですか、とか言って欲しいの?
0852nobodyさん03/05/31 04:24ID:???
実は他人のサイトだったりして
085380203/05/31 04:44ID:???
Flashでファイルアップロードを作っております.

ページの更新をフレームで実装しました.
FRAME1にはFlashを
FRAME2にはFormをおきました.
これにより
FRAME1からみて
parent.frames[1].document.form1. ...
にJavascriptを介してアクセスしてSubmitを行うことが出来ました.
この送信を行った後にFRAME2は更新されます.
(更新されたページには更新前同様にFormがそんざいします.

そこで,次に更新をしたページの値を取得しようと
parent.frames[1].document.form1. ...
にアクセスしたら「アクセスできない」
といわれてしまいました.
これはページの更新によるものなのでしょうか?

これを回避して再度Formにアクセスする方法は無いでしょうか?
ご教示願います.

環境はIE6です
0854nobodyさん03/05/31 05:41ID:???
>>853
板違い
クライアントサイドの話はWeb制作板で
0855nobodyさん03/05/31 13:13ID:SOHJfLax
2ch型掲示板の英語版CGIってどっかで配っているかにゃ?
0856_03/05/31 13:32ID:???
http://homepage.mac.com/hiroyuki43/hankaku06.html
0857nobodyさん03/05/31 14:20ID:OdjsmUrQ
↓無料ゲーム
http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/281853/pack/win95/game/table/pachinko/SUTING.LZH

http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/286201/pack/win95/game/avg/love/yume-tai.lzh
0858nobodyさん03/06/01 01:10ID:???
>>855
日本語版CGIを英語版CGIに改造すれ。
つーか、機能削減くさいから自分でできるだろ。
0859nobodyさん03/06/01 06:13ID:???
日本語メッセージをぜんぶ英語に書き換えるだけだな。
日本語関連のコード指定とかも削除すれば完璧だ。
0860nobodyさん03/06/01 12:52ID:???
age
0861動画直リン03/06/01 13:10ID:FDrVWEME
http://homepage.mac.com/hitomi18/
0862nobodyさん03/06/01 13:18ID:???
日本語で書きこむ

英語に翻訳されて表示される

(゚Д゚)ウマー

ではないのか。そかー。
0863nobodyさん03/06/01 13:35ID:???
2ちゃんねる用語の英訳ってどっかにまとまったのある?
逝ってよし→You can go. てなわけには逝かないよな。
0864nobodyさん03/06/01 13:56ID:???
日本語が使われてるとこってレス書き込みの部分ぐらいだな。
後、エラーメッセージがあるか。
外人さんてアバウトだから適当に
SorryとかOopsとか書いておくとか。
0865nobodyさん03/06/02 02:10ID:Ski1sS48
うんこちゃんな質問で悪いんですが、
ブラウザ側でCookieをOffにしてるとき、
環境変数からHTTP_COOKIEを取得した時って、
やっぱり中身はnull?

ど う な ん だ Y O !
0866nobodyさん03/06/02 02:20ID:???
>>865
試せよ馬鹿
0867nobodyさん03/06/02 02:27ID:YkiHze2n
>>866
教えろよ馬鹿
0868nobodyさん03/06/02 06:23ID:???
なんか、有り得ない。
086981603/06/02 15:28ID:???
またまた、疑問発生。

system($cgi > /dev/null)としたときSTDERRで出力されたのも捨てるんですか?
0870nobodyさん03/06/02 15:29ID:???
>>869
あたりまえでしょうが
0871nobodyさん03/06/02 15:35ID:???
>>870
違うんじゃない?
shなら 2>/dev/null ってしないとダメでは?
0872nobodyさん03/06/02 22:02ID:???
何度も同じような質問してないで、UNIX系のshellの本でも読めよ>869
■ このスレッドは過去ログ倉庫に格納されています