トップページ⇒php
182コメント51KB

CGI: Common Gateway Interface part 13

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@そうだ選挙に行こう2005/09/11(日) 19:59:21ID:2LNvgPc/
CGIの運用に関する質問スレッドです。

※ CGIはウェブサーバ上でユーザプログラムを動作させるための仕組みであり、
Perl等特定の言語に依存するものではありません。


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

CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
△▲ WebProg 初心者の質問 Part12 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1125215604/


過去ログ・関連スレッドは>>2-10あたりに
0102nobodyさん2006/06/08(木) 04:01:18ID:???
>>101
CGIは使うな
0103nobodyさん2006/07/13(木) 05:52:24ID:W+LiZmFW
sage
0104nobodyさん2006/07/27(木) 11:56:01ID:g7jO7iq/
保守
0105nobodyさん2006/07/27(木) 16:12:33ID:1uzwaimq
perlのコーディングスレが1000超えたまま次スレが見つかりませんでしたので
ちょっとこちらでお願いできませんでしょうか?

ダメでしたら誘導お願いします。
よければ回答お願いします。

perlの話です。
hoge.csvのファイルサイズが一定以下なら処理を中断してエラーメッセージを出したいのですが、
open FH,"hoge.csv";
print length <FH>;

これで一行目のはわかります。ループ処理すれば全行分もわかります。
でももっと一発でいける記述はないのでしょうか?
宜しくお願いします。
0106nobodyさん2006/07/27(木) 16:24:17ID:???
>>105
新スレ立ててそこで質問してくれ。
ちなみに、私は立てられなかった。
0107nobodyさん2006/07/27(木) 17:08:40ID:???
>>105
ファイルサイズを見ればいい
0108nobodyさん2006/07/27(木) 17:13:48ID:???
>>105
$size = (stat "hoge.csv")[7];
0109nobodyさん2006/07/27(木) 17:35:44ID:???
-s でもよくね?
01101052006/07/27(木) 19:52:08ID:1uzwaimq
>>108
statなんていう関数があったんですね。
物凄いありがっとぐ。
0111nobodyさん2006/08/03(木) 20:35:54ID:???
保守ヤメレ
0112nobodyさん2006/08/11(金) 11:58:00ID:nbBuAcLl
http://xx.jp/xx.cgi
というURLで、

print "Content-Type text/xml;charset=UTF-8\n";
print "Content-Length: ", length($data) + $data =~ s/\n/\n/g ,"\n\n";
print $data;

と返すように出力させています。(言語はPerlです)
$dataは
"<data no='1' />"
のような簡単なXMLを記述しています。

これに、とある会社がプロキシサーバを通してアクセスすると、
502を返してエラーになるみたいなのです。
プロキシなしで直でアクセスすれば<data no='1' />と
見れるようです。
恐らく、ヘッダ情報が不正とかそんな理由で弾かれているのだと思うのですが、
なにが足りないのかわかりません。
Content-Typeをapplication/xmlにしても同様のエラーがでるようです。

その会社は、サイト製作したクライアントのお得意様で、
本来ならその会社の人と詳しく調べるべきなのでしょうが
自分とはほとんど面識の無いのです。
こちらとしてはできる限りのことをあらかじめしておくくらいしかなく
困った状態なのですが、そのプロキシサーバのログ等がわからない状態で
やれることはありませんでしょうか。
01131122006/08/11(金) 12:01:40ID:nbBuAcLl
そのプロキシサーバの設定によっちゃどうやっても
無理な可能性もあるわけで、無茶な注文なんですが、
クライアントに作り手が悪いと思われているので
できる限りのことはしたいのです。
どなた様かお力を・・・

オラに力を
0114nobodyさん2006/08/13(日) 00:54:08ID:???
print "Content-Type text/xml;charset=UTF-8\n";
は
print "Content-Type: text/xml;charset=UTF-8\n";
じゃなくて?

あと、ヘッダの改行は \n より \r\n の方が仕様に準拠しているそうですが...。
関係あるかな?
0115nobodyさん2006/08/13(日) 01:17:38ID:???
そう言えば改行の個数をcontent-lengthに足してるのも怪しいな。
bimode STDOUT;して改行コードがいじられないようにするとか。
0116nobodyさん2006/08/14(月) 19:59:29ID:???
串通してる時点で、サポート外だって言えばいいだけなような。
0117nobodyさん2006/09/30(土) 17:19:05ID:wXHf+VTZ
定期age
0118nobodyさん2006/10/10(火) 09:02:20ID:p77Yt6GB
定期sage
0119nobodyさん2006/11/01(水) 09:21:57ID:L/Bbrvk1
スレ違いだったので移動してきました。

とあるアップローダーを無料サーバーで運営しています。
認証しないとダウンできないようにCGIを介してダウンロードさせる
仕組みなのですが無料サーバーゆえに30秒以上たつとプロセスが自動で
終わってしまうのです。低速の方が10MBのデータをダウンするのに
10分かかるとした場合に
CGIが出力したデータはサーバー側のバッファに溜まり普通に終了すると思ったのですが
どうなのでしょうか?
CGIはだだ ファイルを少し読み込んで出力のくりかえしです。

0120nobodyさん2006/11/01(水) 13:51:29ID:L/Bbrvk1
上に関連して
http://x-beat.com/spec.shtm
でアップローダーやってるのですが

■負荷対応
・実行時間が30秒を越えるタスク(通常は1秒以内)、CPU使用率が15%を越えるタスク(通常は0.5%以内)は、強制終了されます。

自分は低速なのでupするのに 3分かかるのですがアップロードできます。
データを送信してる最中はcgiは実行されてないのでしょうか?
0121nobodyさん2006/11/01(水) 14:17:40ID:???
ダウンに10分かかるならCGIはずっと実行中

アップローダーでCPU使用率15%超えるようなものは捨てたほうがいいよ

アップに3分かかるならその間はCGI実行される前だ
CGI実行の始めと終わりで時間差出せば簡単に確認できるやろ
0122nobodyさん2006/11/01(水) 14:22:55ID:L/Bbrvk1
どうもです。確認してみます。
>アップローダーでCPU使用率15%超えるようなものは捨てたほうがいいよ
これは別の方法かもしくは低速は無視するということですか?
01231212006/11/01(水) 14:25:55ID:???
どうしても無視したくないならRangeヘッダに対応するとかすりゃいいんじゃないの?
01241212006/11/01(水) 14:31:30ID:???
ま、それ以外だとデカいファイルだったら小分けにするとかいろいろあるやろ
0125nobodyさん2006/11/01(水) 14:36:50ID:???
なるほど考えて見ますありがとうこざいました。
0126nobodyさん2006/11/04(土) 22:42:49ID:???
30秒というのはCPU時間のことなんだが。
0127nobodyさん2006/11/09(木) 00:44:58ID:???
mod_fast_bbs
0128nobodyさん2006/12/02(土) 10:39:48ID:HKfE7B2v
PerlでCGIを作成しています。
HTMLのformタグでaction="○○○.cgi?mode=○○○"とすると、CGI側が上手く値を取得出来ません。

これは仕様ですか?
0129nobodyさん2006/12/02(土) 15:38:24ID:???
$ENV{QUERY_STRING}から取得できなければwwwサーバが環境変数を正しくセットできてないか
ブラウザのバグ
0130nobodyさん2006/12/03(日) 10:33:19ID:???
STDINとQUERYで上手く棲み分け出来てないだけだと思う。
httpdやブラウザを疑うよりは128の頭を疑う方が適切。
自分の無知を棚に上げて「〜〜だけどバグか?」と言い出すタイプ。
0131nobodyさん2006/12/03(日) 15:31:56ID:???
つ CGI.pm
0132nobodyさん2006/12/03(日) 19:10:24ID:/6jBKu8b
はじめまして。
仲間内で使えるアップローダを作ろうと思っています。
大量のファイル(デジカメの画像)を一発アップロードすることはできませんか?
たとえば <INPUT TYPE="file" ・・・>
だと、1つずつファイルを選択しないといけませんのでちょっと手間がかかるので。
0133nobodyさん2006/12/03(日) 19:13:58ID:???
WebProg板の範囲で何とかするなら、1つずつ手間かけて
ファイルを選択してもらうしかないんじゃね?
0134nobodyさん2006/12/03(日) 20:22:58ID:???
>132
FTPってのを使うといいよ
0135nobodyさん2006/12/03(日) 20:25:45ID:/6jBKu8b
132です、どうもありがとうございます。
PCに詳しくない人もいるのでftpはちょっときついかなとも思いますので、
しばらくは133さんに書いていただいた通り1ファイルずつということにしたいと思います。
0136nobodyさん2006/12/03(日) 21:23:49ID:???
それか、複数ファイルを1つの書庫にしてもらい、それをアップしてもらって、鯖側で解凍、とかもできるね。
0137nobodyさん2006/12/03(日) 23:21:24ID:/6jBKu8b
132です。>>136さん、どうもありがとうございます。
zipだとwinXP標準になりましたし、多少説明をいれれば誰でも使えるかもしれませんね、、
どちらにするかもう少し考えて見ます、ありがとうございます。
0138nobodyさん2006/12/03(日) 23:43:27ID:????BRZ(5466)
js使えよ
01391322006/12/04(月) 00:00:05ID:???
JavaScriptを使ったらできるものなのでしょうか?
JavaScriptは詳しくないので分からないのですが・・・
0140nobodyさん2006/12/04(月) 00:28:28ID:???
サンドボックス
0141nobodyさん2006/12/05(火) 21:42:18ID:jPnOowzY
http://ryzo.ddo.jp/main/

どうもコーディングモチベーションが沸かないのでひとつ感想でもくれ。
一応自作CGIだ。

0142nobodyさん2006/12/07(木) 15:28:36ID:???
>>141
どういうタイプのCGIか(BBSとかSNSとかその他もろもろ)説明してくんなきゃ、
アクセスすらしたくない。
0143nobodyさん2006/12/07(木) 23:25:13ID:1rivuzCe
説明するの面倒くさいので
そんじゃ。
0144nobodyさん2006/12/12(火) 17:23:37ID:G/IH0bRf
HTMLテンプレート仕様を実装しようと思ってます。
PHPではSmartyを使ってましたが、Perlでは好みのテンプレートエンジンがありませんので作ろうと思っています。

ここで質問ですが、変数はどのような記述にしたほうが良い(効率、見栄えなど)ですか?

例:Smarty / {$var ... }
例:HTML::Template / <TMPL_VAR NAME=" ... >

みなさんのご意見をお聞かせ下さい。
0145nobodyさん2006/12/12(火) 17:49:18ID:???
自分が使うんだから自分がしっくりくるものにすれば
それすらも決められないの?
0146nobodyさん2006/12/13(水) 10:12:16ID:???
template-toolkitじゃ駄目なの?
smartyとそれほど変わらず使えるよ。
ttの方が高機能だし。
0147nobodyさん2006/12/23(土) 14:55:04ID:PYbXEm5D
PerlでCGIを作成しているのですが、POSTでmodeを送信してCGI側で処理を振り分ける際に、HTMLのソースがそのまま出力されてしまいます。
ソースがそのまま表示されて、手動で更新ボタンを押すとちゃんとWebページとして表示されるのですが・・・

何故でしょうか?
0148nobodyさん2006/12/23(土) 14:58:42ID:PYbXEm5D
事故解決しました。。。

クッキー書き込み&削除の際に\nが出力されておらず、Content-Typeが出力されていなかったようです/(^o^)\オワタ
0149nobodyさん2007/01/28(日) 03:10:26ID:???
cgiの質問ってここでいいのかな?
任意のURLをダウンロードするにはどうしたら良いのですか?

うーむ、説明しにくい…
WikipediaのURLを入力すると、余計なタグを消して携帯用に整形 みたいな事をしたいんですが

検索しようにも、検索キーワードすら分かりません
命令名だけでもお願いします
0150nobodyさん2007/02/01(木) 00:26:48ID:Cze5DYpz
FC2でCGIを使った掲示板を作っているのですが
index.htmlがトップページで
index.htmlとpublic_htmlの位置関係がわかりません。
掲示板の場所はpublic_html/cgi-bin/○○.cgiなんですが
index.htmlはどの部分に持ってきたらいいのでしょうか?
0151nobodyさん2007/02/01(木) 02:20:01ID:???
>>149
つ locationヘッダ
>>150
つ 絶対参照
01521492007/02/01(木) 03:08:51ID:????2BP(20)
>>151
おお、ありがとうございます
が、locationヘッダはリダイレクトに使うみたいな機能のようで…

そうじゃなくて、ユーザーが指定したURLを、サーバーにダウンロード
01531492007/02/01(木) 03:12:19ID:???
>>151
おお、ありがとうございます
が、locationヘッダはリダイレクトに使うみたいな機能のようで…
そうじゃなくて、ユーザーが指定したURLを、サーバーにダウンロードするにはどうしたら?
って感じです

Wikipediaの例で言うと、
ユーザーがWikipediaのURLを指定
サーバーのcgiがWikipediaから指定されたURLをサーバーにダウンロード★
cgiがダウンロードしたソースを整形
整形したソースをユーザーに送る
の、★の部分の命令です


連投になっちまった
0154nobodyさん2007/02/01(木) 06:14:13ID:???
>>153
言語が書かれてないけど
perlならLWP
PHPならそのURLでopen
01551492007/02/01(木) 14:41:03ID:???
>>154
バッチリこれです
ありがとうございましたっ!
0156nobodyさん2007/02/14(水) 18:01:11ID:ppCk4pJ4
偉大なる先輩方に質問です。
二項分布の計算で
$x = ((1/$a)**$z * (1-1/$a)**($zz-$z));

$a=6
$z=400
$zz=3000
とかにすると、オーバーフローで結果だません。
出来れば、
$zは2000ぐらい、$zzは10000ぐらいまでは対応できるようにしたいのですが
どう対策すればいいんでしょうか?

0157nobodyさん2007/02/15(木) 01:49:27ID:???
マルチ乙
0158nobodyさん2007/03/18(日) 16:42:56ID:WzkWKyHv
age
0159nobodyさん2007/04/22(日) 11:57:18ID:a6lsLKbE
自作のCMS(DBから文書読み出してテンプレート適用して出力)で
ETagヘッダを出力しようかと思ってるんだけど
ETagの値はどう設定するのがいいかな?
Apacheに倣って「inode-size-mtime」の十六進にするのが無難なんだろうけど
DBだとinodeとか無いし

Content-MD5ヘッダと同じでいいじゃんとか思っているんだけど問題有るかな
0160nobodyさん2007/04/22(日) 12:44:36ID:???
DBならOIDあるじゃん
01611592007/04/22(日) 13:04:27ID:???
>>160
あ、そうか… thx
0162nobodyさん2007/05/05(土) 13:25:53ID:???
WikiってCGI-perlでなんとかできるの?

Wikiと掲示板を繋げて共同ワークスペースみたくしたいのだが。
0163nobodyさん2007/12/17(月) 16:39:39ID:???
CGI のテストに便利なミニ HTTP サーバって何?
てか,むしろアプリに Web インターフェイスでの
設定機能を組み込みたいのでそういうライブラリでも
いいんだけど・・・
0164nobodyさん2007/12/17(月) 22:00:42ID:???
>>163
そのアプリを書いてる言語でHTTPサーバを書けばいいんじゃね?

Perlなら
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
http://search.cpan.org/search?m=all&q=HTTP&s=1&n=100
0165nobodyさん2008/05/12(月) 01:47:12ID:/jfGDqjv
画像が3枚くらい添付できる無料メールフォームを探してます。
商用利用したいです。

罵られても構いません。
でも欲しいです。
ちなみに無料で無かったら、5000円ぐらいまでなら払えます。
0166nobodyさん2008/05/13(火) 00:56:04ID:7uPi/nf3
>>165
つgoogle先生

ttp://www.best--web.com/cgi/vicarious/tenpmail.html
\5,250- 著作権表示なし版\10,500-

ttp://www.futomi.com/library/mpmailp.html
\3,675-
0167質問2008/06/24(火) 19:38:33ID:ACRIEaOH
質問させてください。 使用言語はperlです。

ボタンを押すとA.cgiを動かすようにしています
<form action="A.cgi" target="別フレーム">

このA.cgiは、
(1)Bファイルを読み込んでprint文によりHTML形式で別フレームへ出力させるようにしています。
(2)また、同時にC.plを実行させています。
   このC.plはC.pl内でsleep 30;としてデータを30秒ごとに取得させています。
この場合、A.cgiを実行させるとC.plが終了していないせいか、(1)の出力結果が別フレーム
に出てくれません。(当然c.plをわざと終了させると問題なく出力されます)

c.plをバックグランド ( system("C.pl &"); )でやってみたりしたのですが
やっぱりうまくいきません。
どうやればうまくいきますでしょうか?
0168nobodyさん2008/06/25(水) 01:41:01ID:???
>>167
スレ違い。
だけど、とりあえず、cronで定期的にたたくとか、javascript使うとか。
そういうんじゃない。

とりあえず、
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
0169nobodyさん2008/08/06(水) 15:27:22ID:???
オライリーの「CGIプログラミング」第二版って本、
cgiの知識は0でも、perlが少し分かればcgiを勉強したいならコレで大丈夫ですかね?
他にいい本が見当たらなかったんですが、発行年月日が気になります…
0170nobodyさん2008/08/19(火) 12:00:26ID:???
>>169
本屋に行っても少し新しい発行日の参考書勝ったほうがよくね?
CGIの基礎はそれでわかるはずだが、7年前と今じゃネットの事情が
だいぶ違うから
0171 2008/11/28(金) 08:28:48ID:???
PHPでカレントディレクトリ名の取得に
フルパスの{%DIR}やディレクトリ名だけの{%WWW_DIR}が
ありますが、これをPythonとPerlで取得するには
どのように書けばいいですか?
PWDからフルパスを取得して不要なな部分をカットするしか方法無い?
01721712008/11/28(金) 09:30:14ID:???
無かった事にしてください orz
0173nobodyさん2008/12/15(月) 12:58:36ID:???
質問させてください。
htmlに以下のようにラジオボックスとSubmitボタンを設置しています。
[・]Aさん(変数$A)
[・]Bさん(変数$B)
[Submit]

Aさんを選択してSubmitを押すと、http://tekito.com/A/index.html
Bさんを選択してSubmitを押すと、http://tekito.com/B/index.html
といった感じで、選択したラジオボックスでジャンプ先URLが
変化するようにするにはどうしたら良いでしょうか?
0174nobodyさん2008/12/15(月) 19:24:31ID:???
>>173
+ JavaScript の質問用スレッド vol.67 +
http://pc11.2ch.net/test/read.cgi/hp/1223618153/
0175nobodyさん2009/01/02(金) 00:55:04ID:BSezfA/d
どなたか知っていたら教えてください。

CGIは、perlのパスが異なっていたら、実行されません。たとえば、"#!/usr/bin/perl"というパスを指定しているときに、"/usr/local/bin/perl"にしかperlの実行モジュールがないときに動作しない。

これをどちらのパスでも書くやり方があったような気がするのですが、どうしても思い出せない&ググってもでてこないです。

かすかな記憶ではwhichを使うようなやり方だったと思うんですが、"#!/usr/bin/which perl"でもNGです。

どなたかえらいひと、教えてー。
0176nobodyさん2009/01/02(金) 01:01:58ID:???
> ln -s /usr/local/bin/perl /usr/bin/perl
0177nobodyさん2009/01/02(金) 01:06:52ID:BSezfA/d
>>176

返事ありがとう。

でも、違うんです。symbolic linkじゃなくて、#!の1行で表現する方法があったはず・・・。
0178nobodyさん2009/01/02(金) 02:09:44ID:???
じゃあ知らんなぁ。。
#!をだます方法なららくだ本にあったと思うが・・
0179nobodyさん2009/01/02(金) 02:17:38ID:???
>>177

/bin/env を使うとかいうのでもない?
0180nobodyさん2009/01/02(金) 16:37:18ID:BSezfA/d
>>179

おー!それだ!なんでwhichと勘違いしてたんだろう。

ありがとう!
0181 【東電 72.1 %】 【31m】 電脳プリオン ◆GDSZsj1GHk 2012/04/28(土) 01:06:31.57ID:????PLT(12079)
14はなさそうだな
0182nobodyさん2012/06/30(土) 16:57:18.47ID:???
【重要なお知らせ】
Perlで書かれたCGIに関してはプログラム板のPerlスレッドで受け付けることになりました。
以後誘導願います。
■ このスレッドは過去ログ倉庫に格納されています