CGI: Common Gateway Interface part 13
■ このスレッドは過去ログ倉庫に格納されています
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あたりに さて、そろそろ環境変数の環境を接続してきたクライアントの環境と
勘違いしてる奴の排除でも始めないか? 「CGIの運用に関する質問スレッド」ってスレタイでいいのでは? 質問です。
Perl内で、他のURLにあるデータを参照することはできますか?
具体的には、
open(WORK,"http://www.hogehoge.net/foo/baa.txt");
みたいな事です。 やはり過疎ったか。
スレタイ改悪した>>1氏ね
ってことで不定期age てかもうCGI≒Perlって事でよいと思うのだが。
Perl以外でCGI書いてる奴って自力でどうにかならね?
少なくともこの板ではそれで良いだろうし、
言語に寄らない実装の話題でかつhtaccesとかApacheとか追い出してったら何も残らんだろ。
てか逆に聞きたい。このスレに適切な話題とは? リクエストの時に、データが長すぎだったら Status: 413 を返してもいいのか?とか。
PATH_INFOが使えないサーバが存在してるのか?とか。
今時AmigaDOSなんて誰もつかってねーよとか。 オライリーのネズミ本「CGIプログラミング第2版」の25ページに
URLエンコードのPerlサブルーチンがのっているのですが、そこで
$text =~ s/([^a-z0-9_.!~*'\(\) - -])/sprintf "%%%02X", ord($1)/egi;
というコードがあります。だいたいの意味はいいのですが、サーチパターンの
文字クラスの最後の部分が' - -]'となっていますよね。最後の'-'はハイフン
自体を現すとして、その前のスペース・ハイフン・スペースって何を意味して
るのかわかりますか?これだとスペースからスペースの範囲指定みたいに
思えるのですが・・・。 と思ったら、ここはCGIプログラミングのスレではないようですね。
失礼しました・・・。 単なる誤植だと思われ
CGIプログラミング第2版は読んだことないけど
URLエンコードならその正規表現の直後にtrでスペースはを+にしてるんでしょ?
こんな感じで
$text =~ s/([^a-z0-9_.!~*'\(\) -])/sprintf "%%%02X", ord($1)/egi;
$text =~ tr/ /+/;
>>29
すんません、スレ違いっぽいのに回答いただき。
ビンゴです。そのような処理がなされています。
ということは1つのスペースと1つのハイフンが
余分についてるということですかね。
ありがとうございました。 http://www.kent-web.com/lesson.html
テラワロスwwwww
どんなやつがいくのか見てみたいがネタにするには高すぎる よく、「当サイトを訪問されているは、現在28名です」というサイトを見るのですが、
これはどのようにして人数を数えているのでしょうか? >>33
適当に計算してるだけ
過去1分間のアクセス数とか >>31
参加して、sendmailでスパム送る方法を教えてもらってきてくれ。 perl oopで作成するCGIスクリプトの特長ってなんですか? perl oop でも、巧く構築すればかなりスリムで無駄のないものになるからいいよね >>3が関連スレの一覧じゃなくて誘導先になってるなw すんません。質問なんですが。
perlでau機に304 Not Modifiedを出力したいんですが、ブラウザがどうにも500エラーとかのたまいます。
出力している内容は、
Content-Type: text/html
Status: 304 Not Modified
(空行)
です。んで、FireFoxだと理解してキャッシュを表示してくれるのに、au機は500エラーというのです…もうわけわかめ。
間違っているんでしょうか?どういうヘッダーを吐き出せばいいんでしょうか… >>50
Openwaveの場合、同じURLをアクセスするとデフォルトでローカルキャッシュを読みにいくため
304 Not Modifiedの制御は意味を持たないのではないかと思う。
というか携帯のテストをFirefoxでやるというのが意味不明。普通はシミュレーターか実機を使ってやるだろ。
>>51
ありがとうございます。解決しました。
最後に空行を出すには\n\nを出さないといけなかったらすぃ…\n\nだと2行空行が入ると思ってたよorz
キャッシュに関しては、Cache-Control: no-cacheを吐いてるんで、OPENWAVEでもきっちり見に来てくれます。
FFでStatus: 304が正常に働いたのは、FFが良心的に解釈してくれたからの模様… perlで、サイト内検索スクリプトでand/or検索のプログラムを書きたいんですが
解説などのオススメのサイトとか知っている方いませんか? >>54
>>4のリンク先でも見て勉強するがよろし CGIの運用に関する質問スレッドです。
スレタイが紛らわしくてすんまそん。
>1を怨んでくり このスレの>>1は
自分が見やすいと思って書き直したコードが、
誰も読めないスパゲティにしてしまうタイプと見た。 何事にも来歴や理由がある
視力だけではコードは読めないよ part10から12の流れを知ってる奴はどれぐらい居るのやら。 Perl (mod_perl)
Perl (mod_perlなし)
PHP (mod_php)
C++
どれが一番CGIとして高速に動作しますか? mod_perlやmod_phpはもはやCGIではないのだが。
C++ (Apache モジュール)>C++(FastCGI)>>Perl (mod_perl)>PHP (mod_php)>>>>C++(CGI)>>Perl (CGI) C++ (Apache モジュール)とはmod_cgidsoモジュールですか?
workerでも動作するようで、使用してみたいですね >>63
Perl (mod_perl)>PHP (mod_php)
↑根拠ナシ夫ちゃん >>67
そんな恥ずかしいことを書けるあなたに感動した! スレタイ激しく元に戻したい。
改悪した香具師出て来い! CGIってウェブアプリケーションサーバって言って良い? FastCGI,SpeedyCGI,mod_perlの使用を検討しています。
Apacheに組み込もうと思っているのですが、どれが一番高速に動作するのでしょうか?(@Perl) ∧_∧
( ・∀・)
(( ( ヽ ノ )
ノ\(○´ ゴッ
(_ノ(_\ ∧
= ()二) < >_∧∩
V`Д´)/ ←>>78
/ まずルパンのタイトルフラッシュのような、
簡単な「文字入力→フォーム送信→受け取って出力」の流れを作れるようになることを目標に、
『基礎から学ぶCGIプログラミング』って本を買った
サッパリわからん
っていうか、書いてない
「perlでのプログラミングを経験したことがある人を対象にしています」ってそこが基礎じゃねぇのかよ
まず動作確認が動作しないんだよ
基礎以前の基礎はどこで実につけりゃいいんだよ
ローカルでCGI動かす方法書いてくれよ
Hello worldから説明してくれよ
オウム社ってなんだよくそ 挫折するぞ 1ページくらい見てから買おうよ(´・ω・`)
いい本探してるなら>>3の書籍スレで聞いてみるとか。 いやあ
40ページに書いてあるんだ
基礎以前の基礎って、他の「初心者のための」的な本には書いてあるんかなぁ
「この本よかったよー」って言ってる人が、元々どの程度の知識の持ち主かわからないし
まあこれは本屋行けって話ですよね
平然とCGIの話をするキミタチはすごい。うらやましい
一体何からどうやって始めたんだろう
まあすぐ追いつきますがね 今日覚えたこと・・・コマンドプロンプトは「cmd」で出す (´υ`)
この壁は高かった。HelloWorldできたわー
ただ どうやってブラウザで見るんだ?これ・・・
さあ、あんまりこんな低レベルな話されても迷惑だよな
独り言もこのあたりにしとくわ 超簡単な掲示板できたわ〜
日々成長しとるわ〜
あんな本いらんかった ── =≡∧_∧ =!!
── =≡( ・∀・) ≡ ガッ ∧_∧
─ =≡○_ ⊂)_=_ \ 从/-=≡ r( )
── =≡ > __ ノ ))< > -= 〉# つ
─ =≡ ( / ≡ /VV\-=≡⊂ 、>>87
── .=≡( ノ =≡ -= し'
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
|
|
| 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
| 東 京 湾 他のスレから来ました。
Perlで他のサイトを取得して表示したいと思っています。
(著作権侵害とかそういうことをしたいのではないです)
お時間のある方にお願いしますが、次のコードで@niftyのトップページを取得してみたら
どうなるか教えていただけませんでしょうか?
print "Content-Type: text/html\n";
print "\n";
use LWP::Simple;
print get( 'http://www.nifty.com/' );
私のところだと、ブラウザ上での表示がぐちゃぐちゃになるんですが…。 誘導していただいたのでこちらにて質問させてください。
HTTPレスポンスヘッダに206を指定しファイルをCGI経由でDL
させようとすると、500エラーが出てしまいます。
具体的には下記のようにしております。
print "HTTP/1.1 206 Partial Content\n";
print "Last-Modified: Wed, 24 May 2006 18:41:30 GMT\n";
print "Pragma: no-cache\n";
print "Accept-Ranges: bytes\n";
my $range = $ENV{'HTTP_RANGE'};
if($range =~ m/^bytes=(\d+)\-(\d+)$/){
my $offset = $1;
my $end = $2;
my $len = $end - $offset + 1;
print "Content-Range: bytes $offset-$end/$len\n";
$filesize = $len;
}
print "Content-Length: " . $filesize . "\n";
print "Content-Type: $content_type\n\n";
print while(<IMG>);
close(IMG);
エラー内容は「Bad header=HTTP/1.1 206 Partial Content」ですので
これを外せばエラーは出ないのですが、206を返す手段があれば
ご教示いただきたく思っております。 宜しくお願いいたします。 Status: 206
は?
詳しくはrfc3875を読むべし。 >>97
NPH (Non Parsed Header) 最近、ウェブ系の仕事を始めたものなのですが
CGIの負荷軽減テクニックみたいなのをまとめたページとか書籍などで
これぐらいは読んでおけ、とかいうのがあったら教えてください perlのコーディングスレが1000超えたまま次スレが見つかりませんでしたので
ちょっとこちらでお願いできませんでしょうか?
ダメでしたら誘導お願いします。
よければ回答お願いします。
perlの話です。
hoge.csvのファイルサイズが一定以下なら処理を中断してエラーメッセージを出したいのですが、
open FH,"hoge.csv";
print length <FH>;
これで一行目のはわかります。ループ処理すれば全行分もわかります。
でももっと一発でいける記述はないのでしょうか?
宜しくお願いします。 >>105
新スレ立ててそこで質問してくれ。
ちなみに、私は立てられなかった。 >>105
$size = (stat "hoge.csv")[7]; >>108
statなんていう関数があったんですね。
物凄いありがっとぐ。 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にしても同様のエラーがでるようです。
その会社は、サイト製作したクライアントのお得意様で、
本来ならその会社の人と詳しく調べるべきなのでしょうが
自分とはほとんど面識の無いのです。
こちらとしてはできる限りのことをあらかじめしておくくらいしかなく
困った状態なのですが、そのプロキシサーバのログ等がわからない状態で
やれることはありませんでしょうか。
そのプロキシサーバの設定によっちゃどうやっても
無理な可能性もあるわけで、無茶な注文なんですが、
クライアントに作り手が悪いと思われているので
できる限りのことはしたいのです。
どなた様かお力を・・・
オラに力を print "Content-Type text/xml;charset=UTF-8\n";
は
print "Content-Type: text/xml;charset=UTF-8\n";
じゃなくて?
あと、ヘッダの改行は \n より \r\n の方が仕様に準拠しているそうですが...。
関係あるかな? そう言えば改行の個数をcontent-lengthに足してるのも怪しいな。
bimode STDOUT;して改行コードがいじられないようにするとか。 串通してる時点で、サポート外だって言えばいいだけなような。 スレ違いだったので移動してきました。
とあるアップローダーを無料サーバーで運営しています。
認証しないとダウンできないようにCGIを介してダウンロードさせる
仕組みなのですが無料サーバーゆえに30秒以上たつとプロセスが自動で
終わってしまうのです。低速の方が10MBのデータをダウンするのに
10分かかるとした場合に
CGIが出力したデータはサーバー側のバッファに溜まり普通に終了すると思ったのですが
どうなのでしょうか?
CGIはだだ ファイルを少し読み込んで出力のくりかえしです。
上に関連して
http://x-beat.com/spec.shtm
でアップローダーやってるのですが
■負荷対応
・実行時間が30秒を越えるタスク(通常は1秒以内)、CPU使用率が15%を越えるタスク(通常は0.5%以内)は、強制終了されます。
自分は低速なのでupするのに 3分かかるのですがアップロードできます。
データを送信してる最中はcgiは実行されてないのでしょうか?
ダウンに10分かかるならCGIはずっと実行中
アップローダーでCPU使用率15%超えるようなものは捨てたほうがいいよ
アップに3分かかるならその間はCGI実行される前だ
CGI実行の始めと終わりで時間差出せば簡単に確認できるやろ どうもです。確認してみます。
>アップローダーでCPU使用率15%超えるようなものは捨てたほうがいいよ
これは別の方法かもしくは低速は無視するということですか?
どうしても無視したくないならRangeヘッダに対応するとかすりゃいいんじゃないの? ま、それ以外だとデカいファイルだったら小分けにするとかいろいろあるやろ PerlでCGIを作成しています。
HTMLのformタグでaction="○○○.cgi?mode=○○○"とすると、CGI側が上手く値を取得出来ません。
これは仕様ですか? $ENV{QUERY_STRING}から取得できなければwwwサーバが環境変数を正しくセットできてないか
ブラウザのバグ STDINとQUERYで上手く棲み分け出来てないだけだと思う。
httpdやブラウザを疑うよりは128の頭を疑う方が適切。
自分の無知を棚に上げて「〜〜だけどバグか?」と言い出すタイプ。 はじめまして。
仲間内で使えるアップローダを作ろうと思っています。
大量のファイル(デジカメの画像)を一発アップロードすることはできませんか?
たとえば <INPUT TYPE="file" ・・・>
だと、1つずつファイルを選択しないといけませんのでちょっと手間がかかるので。 WebProg板の範囲で何とかするなら、1つずつ手間かけて
ファイルを選択してもらうしかないんじゃね? 132です、どうもありがとうございます。
PCに詳しくない人もいるのでftpはちょっときついかなとも思いますので、
しばらくは133さんに書いていただいた通り1ファイルずつということにしたいと思います。 それか、複数ファイルを1つの書庫にしてもらい、それをアップしてもらって、鯖側で解凍、とかもできるね。 132です。>>136さん、どうもありがとうございます。
zipだとwinXP標準になりましたし、多少説明をいれれば誰でも使えるかもしれませんね、、
どちらにするかもう少し考えて見ます、ありがとうございます。 JavaScriptを使ったらできるものなのでしょうか?
JavaScriptは詳しくないので分からないのですが・・・ http://ryzo.ddo.jp/main/
どうもコーディングモチベーションが沸かないのでひとつ感想でもくれ。
一応自作CGIだ。
>>141
どういうタイプのCGIか(BBSとかSNSとかその他もろもろ)説明してくんなきゃ、
アクセスすらしたくない。 HTMLテンプレート仕様を実装しようと思ってます。
PHPではSmartyを使ってましたが、Perlでは好みのテンプレートエンジンがありませんので作ろうと思っています。
ここで質問ですが、変数はどのような記述にしたほうが良い(効率、見栄えなど)ですか?
例:Smarty / {$var ... }
例:HTML::Template / <TMPL_VAR NAME=" ... >
みなさんのご意見をお聞かせ下さい。 自分が使うんだから自分がしっくりくるものにすれば
それすらも決められないの? template-toolkitじゃ駄目なの?
smartyとそれほど変わらず使えるよ。
ttの方が高機能だし。 PerlでCGIを作成しているのですが、POSTでmodeを送信してCGI側で処理を振り分ける際に、HTMLのソースがそのまま出力されてしまいます。
ソースがそのまま表示されて、手動で更新ボタンを押すとちゃんとWebページとして表示されるのですが・・・
何故でしょうか? 事故解決しました。。。
クッキー書き込み&削除の際に\nが出力されておらず、Content-Typeが出力されていなかったようです/(^o^)\オワタ cgiの質問ってここでいいのかな?
任意のURLをダウンロードするにはどうしたら良いのですか?
うーむ、説明しにくい…
WikipediaのURLを入力すると、余計なタグを消して携帯用に整形 みたいな事をしたいんですが
検索しようにも、検索キーワードすら分かりません
命令名だけでもお願いします
FC2でCGIを使った掲示板を作っているのですが
index.htmlがトップページで
index.htmlとpublic_htmlの位置関係がわかりません。
掲示板の場所はpublic_html/cgi-bin/○○.cgiなんですが
index.htmlはどの部分に持ってきたらいいのでしょうか? >>149
つ locationヘッダ
>>150
つ 絶対参照 >>151
おお、ありがとうございます
が、locationヘッダはリダイレクトに使うみたいな機能のようで…
そうじゃなくて、ユーザーが指定したURLを、サーバーにダウンロード >>151
おお、ありがとうございます
が、locationヘッダはリダイレクトに使うみたいな機能のようで…
そうじゃなくて、ユーザーが指定したURLを、サーバーにダウンロードするにはどうしたら?
って感じです
Wikipediaの例で言うと、
ユーザーがWikipediaのURLを指定
サーバーのcgiがWikipediaから指定されたURLをサーバーにダウンロード★
cgiがダウンロードしたソースを整形
整形したソースをユーザーに送る
の、★の部分の命令です
連投になっちまった >>153
言語が書かれてないけど
perlならLWP
PHPならそのURLでopen >>154
バッチリこれです
ありがとうございましたっ! 偉大なる先輩方に質問です。
二項分布の計算で
$x = ((1/$a)**$z * (1-1/$a)**($zz-$z));
$a=6
$z=400
$zz=3000
とかにすると、オーバーフローで結果だません。
出来れば、
$zは2000ぐらい、$zzは10000ぐらいまでは対応できるようにしたいのですが
どう対策すればいいんでしょうか?
自作のCMS(DBから文書読み出してテンプレート適用して出力)で
ETagヘッダを出力しようかと思ってるんだけど
ETagの値はどう設定するのがいいかな?
Apacheに倣って「inode-size-mtime」の十六進にするのが無難なんだろうけど
DBだとinodeとか無いし
Content-MD5ヘッダと同じでいいじゃんとか思っているんだけど問題有るかな WikiってCGI-perlでなんとかできるの?
Wikiと掲示板を繋げて共同ワークスペースみたくしたいのだが。 CGI のテストに便利なミニ HTTP サーバって何?
てか,むしろアプリに Web インターフェイスでの
設定機能を組み込みたいのでそういうライブラリでも
いいんだけど・・・ 画像が3枚くらい添付できる無料メールフォームを探してます。
商用利用したいです。
罵られても構いません。
でも欲しいです。
ちなみに無料で無かったら、5000円ぐらいまでなら払えます。 >>165
つgoogle先生
ttp://www.best--web.com/cgi/vicarious/tenpmail.html
\5,250- 著作権表示なし版\10,500-
ttp://www.futomi.com/library/mpmailp.html
\3,675- 質問させてください。 使用言語は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 &"); )でやってみたりしたのですが
やっぱりうまくいきません。
どうやればうまくいきますでしょうか?
>>167
スレ違い。
だけど、とりあえず、cronで定期的にたたくとか、javascript使うとか。
そういうんじゃない。
とりあえず、
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/ オライリーの「CGIプログラミング」第二版って本、
cgiの知識は0でも、perlが少し分かればcgiを勉強したいならコレで大丈夫ですかね?
他にいい本が見当たらなかったんですが、発行年月日が気になります… >>169
本屋に行っても少し新しい発行日の参考書勝ったほうがよくね?
CGIの基礎はそれでわかるはずだが、7年前と今じゃネットの事情が
だいぶ違うから PHPでカレントディレクトリ名の取得に
フルパスの{%DIR}やディレクトリ名だけの{%WWW_DIR}が
ありますが、これをPythonとPerlで取得するには
どのように書けばいいですか?
PWDからフルパスを取得して不要なな部分をカットするしか方法無い? 質問させてください。
htmlに以下のようにラジオボックスとSubmitボタンを設置しています。
[・]Aさん(変数$A)
[・]Bさん(変数$B)
[Submit]
Aさんを選択してSubmitを押すと、http://tekito.com/A/index.html
Bさんを選択してSubmitを押すと、http://tekito.com/B/index.html
といった感じで、選択したラジオボックスでジャンプ先URLが
変化するようにするにはどうしたら良いでしょうか? どなたか知っていたら教えてください。
CGIは、perlのパスが異なっていたら、実行されません。たとえば、"#!/usr/bin/perl"というパスを指定しているときに、"/usr/local/bin/perl"にしかperlの実行モジュールがないときに動作しない。
これをどちらのパスでも書くやり方があったような気がするのですが、どうしても思い出せない&ググってもでてこないです。
かすかな記憶ではwhichを使うようなやり方だったと思うんですが、"#!/usr/bin/which perl"でもNGです。
どなたかえらいひと、教えてー。 > ln -s /usr/local/bin/perl /usr/bin/perl >>176
返事ありがとう。
でも、違うんです。symbolic linkじゃなくて、#!の1行で表現する方法があったはず・・・。 じゃあ知らんなぁ。。
#!をだます方法なららくだ本にあったと思うが・・ >>177
/bin/env を使うとかいうのでもない?
>>179
おー!それだ!なんでwhichと勘違いしてたんだろう。
ありがとう!
【重要なお知らせ】
Perlで書かれたCGIに関してはプログラム板のPerlスレッドで受け付けることになりました。
以後誘導願います。 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
7KS5PUA8RN ■ このスレッドは過去ログ倉庫に格納されています