CGI: Common Gateway Interface part 11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/14 22:26ID:F9qlqHNx※CGIは特定の言語に依存するものではありません。
Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/
CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/
過去ログ・関連スレッドは >>2-5 あたりに
0160158
03/07/17 16:17ID:???_| ̄|○ 吊に逝てきまつ
0161154
03/07/18 00:09ID:???他人がつくったcgiを改修せなあかんのですが、
そのcgiの中に、print "Location: ../file/thanks.html\n\n";
があったもんで・・・。
なもんで、改修中なのでさらせませんあしからず。
>>157
ありがとうございます。
理解しますた。
0162nobodyさん
03/07/19 11:31ID:7HceImjZ使ってる言語がperlである可能性って、
何%くらいだと思います?
-------------------------------------------------------------
(以下、事情というか、蛇足ですが)
というのも、うちの会社がレンタルサーバ屋さんをやってて、
うちのサーバではperlしか使えない(php、asp、jsp使えない)んですわ。、
(ちなみにおれは、その会社のウェブ制作事業部で、perlのプログラム組んでる)
で、サーバ営業の人が
「他のサーバからうちのサーバへ移行しましょうよ〜」と言うとき、
お客さんのサイトで使ってる言語が、わからないときがあるので。
拡張子がphpなら、移行無理ってわかるんですけど、
拡張子がcgiの場合、どうなんだろうと思いまして。
0164nobodyさん
03/07/19 18:30ID:???0165nobodyさん
03/07/19 18:42ID:???レンタルサーバーなら、実際のところ9割方perlなんじゃねーの?
ただ、>>164の言うとおり、dbやら、cronとかメールまわりとか、他にも障壁は山積みだが、
営業のとっかかりとしては拡張子cgiで判断してもいいんじゃねーの。
0166nobodyさん
03/07/19 19:00ID:???と、言うか、
>うちのサーバではperlしか使えない(php、asp、jsp使えない)んですわ。、
明らかに自社システムに魅力が無いのを何とかした方が良いんではないだろうか。
0167nobodyさん
03/07/19 21:00ID:???0168162
03/07/19 22:12ID:xa8aez3Tはげしくどうい
>>164
うち、DB使えません(泣)
>>165
crinなんて、たぶん営業の人は聞いたこともないだろー。
>>166
そうなんですよねー。
でも、もっと何かをつけたとして、はたしてカスタマーサポートできるのかどうか・・・
>>167
マジです。でも、rubyは使えるよw
0170あぼーん
NGNG0171nobodyさん
03/07/25 23:16ID:gaEpK534ヘッダは同じだし、吐き出されたHTMLをhtmlファイルとしてupするとちゃんとjavascriptをかみます。
特にエラーはでてきません。無視されますが。
IEでは「書き込みできません」というエラーがでます。
お心当たりある方はレスおねがいします。
0172あぼーん
NGNG0173nobodyさん
03/07/26 02:05ID:MRZ/abmL困っています。同じフォーマットのHTMLファイルを作成して見る分には、
MacとWindowsの環境では違いはないので、タグの問題ではないと思います。
現象としては確認していないのですが、スペースで区切った部分がズレたり、
文字化けを起こしているようです。
原因に心当たりのある方はいらっしゃるでしょうか?
もしわかる方がいましたら、教えてください。よろしくお願いします。
0174nobodyさん
03/07/26 02:29ID:???「テキストファイルをHTML出力する際」ってどゆこと?
htmlなの? plaintext ファイルなの?
.txtとかをサーバにアップロードして、htmlファイルからリンクして表示するときのことだとすると、
.txt の Content-type が何になってるか、Content-type と一緒に吐く charset と
ファイルの文字コードが食い違ってないかとか確認したらいいと思うけど。
まずは現象を確認して、現象を再現できるようにしないと対応は難しいんじゃないかな。
0175あぼーん
NGNG0176nobodyさん
03/07/26 03:11ID:MRZ/abmLレスありがとうございます。
正確には
1. テキストファイルをサーバにアップ
2. cgiでテキストファイルをもとに、データファイルを作成
3. 同じくcgiでデータファイルをもとにprintでHTML出力
という流れで処理しています。
このcgi出力で表示しているものとは別に、
同じフォーマットのHTMLファイルもあるのですが、
それだときちんと表示されています。
この違いがどこからくるのかわからなくて…。
現象の再現は、Macを持っていないので、ちょっと難しいのです。
0177nobodyさん
03/07/26 03:25ID:???出力が同じで見た目が違うということは
HTTP Response Headerが違うということ。
>>174さんの言う通り
>.txt の Content-type が何になってるか、Content-type と一緒に吐く charset と
>ファイルの文字コードが食い違ってないかとか確認したらいいと思うけど。
です。
0178nobodyさん
03/07/26 03:28ID:???GET /***/hoge.html HTTP/1.0
の出力結果と
>telnet www.***.com 80
GET /***/hoge.cgi HTTP/1.0
の出力結果で食い違う部分を貼ってごらん。
0179nobodyさん
03/07/26 04:18ID:???レスありがとうございます。やっと意味がわかりました。
つまり、例えば2.のデータファイルはeucコードなのに、
3.でS-JISとして表示していないか、ということなのですね。
お恥ずかしい話なのですが、
無料サーバなので、telnetが使えないのです。
環境を再現する方向で、なんとか対応してみたいと思います。
こんな夜中にありがとうございました。
0180nobodyさん
03/07/26 05:13ID:???>無料サーバなので、telnetが使えないのです。
んなわきゃない。80番ポートにつなげられなかったらブラウザからでも見えなくなってしまうぞ。
0181nobodyさん
03/07/26 06:00ID:???念のため確認してみましたが、やはり切断されてしまいました。
ダメみたいです。
0182nobodyさん
03/07/26 06:40ID:???まさか
>telnet www.***.com 80
ってそのまま書いたんじゃないだろうな。
ttp://ash.jp/net/telnet_http.htm
そうでなければプロキシ使ってるんだろう。
>telnet プロキシ 8080(とは限らない)
GET http://www.***.com/hoge.html HTTP/1.0
とやるとか。
正直こっちの言ってることが分からないんだったら、
ヘッダを見るツールを使えばいい。
0183nobodyさん
03/07/26 06:50ID:???サーバがそれを無視する設定になってることもあるから、
ちゃんと確認するにはヘッダを見るしかない。
0184nobodyさん
03/07/26 07:02ID:???プロキシを使っているのかはわかりませんが、
やはり
>telnet サーバ 80
で、ダメでした。
ヘッダを見るツールですが、「httpReq」でいいのでしょうか?
DLして使える状態にしました。
0185nobodyさん
03/07/26 08:17ID:???charsetが出ていなかったので、「webmekuri」でやってみました。
これでなにかわかるでしょうか?
お手数をかけて申し訳ないです。よろしくお願いいたします。
・perl
HTTP/1.1 400 Bad Request
Date: Fri, 25 Jul 2003 23:03:26 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.2 mod_gzip/1.3.26.1a mod_layout/3.2
Connection: close
Content-Type: text/html; charset=iso-8859-1
・text
HTTP/1.1 400 Bad Request
Date: Fri, 25 Jul 2003 23:04:30 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.2 mod_gzip/1.3.26.1a mod_layout/3.2
Connection: close
Content-Type: text/html; charset=iso-8859-1
0186nobodyさん
03/07/26 11:57ID:???0187nobodyさん
03/07/26 13:15ID:???HTTP/1.1 400 Bad Request
はおかしいだろ。
perl(CGI?)の方はまだしもtext(HTML?)の方が400なのは変だ。
ブラウザでちゃんと見えてるのか?webmekuriのマニュアル嫁。
HTTP/1.1 200 OKになるまで帰ってくるな。
0188nobodyさん
03/07/26 13:20ID:???0190nobodyさん
03/07/26 13:33ID:???別にそんなに面倒じゃないよ。
多分彼はツールの使い方を間違ってるんだよ。
もう説明するの面倒くさいからアドレス晒してくれた方が楽。
0191あぼーん
NGNG0192nobodyさん
03/08/01 14:39ID:gYU9QUBu=%3E%3E1%0D%0A%81@%81@%81@%81@+%81@%81@%81R%2
8%A5%83%D6%A5%29%2F%81@+%81@%BD%DE%BA%B0%0D%0A%81@%81@%81@%81@+%81@%81_%28.%81_+%83m
こういう文字列にブラウザが変換してWEBサーバーに送りますよね
この変換機能をつかえるモジュールや関数ってないのでしょうか
単なる2バイトの漢字コードとおもってたんですが+とかxとかの意味がよくわかりません
解説しているページがあったらお教え願います
0193あぼーん
NGNG0194nobodyさん
03/08/01 14:57ID:???0195192
03/08/01 15:18ID:???謝謝
0196あぼーん
NGNG0197あぼーん
NGNG0198あぼーん
NGNG0199192
03/08/01 18:41ID:dlG1lsZs漢字コードの変換の解説しか出ないんですけど
+ とか xがなんでててくるのかがわかりません
0200ponpon
03/08/01 19:02ID:???CGIの設定をしてあるので、Webからアクセスして、新規MLを作成すると以下のエラーがでてしまします。
WARN: cannot open /.qmail-Lnux:unet:co:jp-ka from main /usr/local/fml/makefml 3593
WARN: cannot open /.qmail-Lnux:unet:co:jp-ka-ctl from main /usr/local/fml/makefml 3594
WARN: cannot open /.qmail-Lnux:unet:co:jp-ka-default from main /usr/local/fml/makefml 3595
ちなみにコマンドでmakefml newmlの場合はエラーなく作成できました。
どなたか、わかる方教えてもらえないでしょうか?お願いします。
0201nobodyさん
03/08/01 22:33ID:???いや、書いてあるだろう……
ぐぐったんなら複数のページを参考にしてみれ。
ちなみに + は半角スペースを置換したもの。
xは特に意味はない。(そのままxという文字。おそらくシフトJISの2バイト目だろう)
0202nobodyさん
03/08/01 23:54ID:???UNIX板に全く同じ質問をしている人がいるので参考にすると良い。
http://pc.2ch.net/test/read.cgi/unix/1058708085/334
0203nobodyさん
03/08/02 00:06ID:???0205山崎 渉
03/08/02 02:21ID:???( ^^ )< ぬるぽ(^^)
0206ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:49ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0207nobodyさん
03/08/02 10:28ID:fI9uzQF/すいません、UNIX板に質問しているのま私なのです。(。。)
0208nobodyさん
03/08/02 10:33ID:???0210nobodyさん
03/08/02 14:38ID:???Linux板に似たような質問をしている人がいるので参考にすると良い。
http://pc.2ch.net/test/read.cgi/linux/1059545839/217
0211nobodyさん
03/08/02 14:43ID:???放置するのはどうだろう。
だからマルチは嫌われるのだが。
0212nobodyさん
03/08/02 15:10ID:???LAN内のXPマシンにApacheを入れて、テスト環境を作りました。
以前に借りていたWebサーバーで使っていたPerlを動かしてみたところ、
open(IN, $filename)
$buff = <IN>;
とすると、テキストファイルの最後まで一気に読みこまれてしまいます。
以前の環境では改行までを読み込んでいました。
これは、どうしてなのでしょうか?
改行までを読み込むコードにするには、どうしたらいいのでしょうか。
0214nobodyさん
03/08/02 16:29ID:???また、来たよ…。>>1 も言語も書いてないオヴァカ質問者
まぁ、それは perl だから、答えると
> とすると、テキストファイルの最後まで一気に読みこまれてしまいます。
当たり前だろ。perl 知らないのか?
$buff には最初の行が入るだけで後は空読みして全部捨てられる。
スカラとかリストの事よく解ってないね
0216nobodyさん
03/08/02 17:55ID:???その通りでした。
テストで使っていたファイルだけ、たまたま[LF] になっていました。
[CRLF]の改行のファイルでやったらうまく行きました。
ありがとうございます。[LF]ではないと、思いこんでいました。
>214
さすがに、そのくらいはわかります(笑)。
0217nobodyさん
03/08/02 18:42ID:???0219nobodyさん
03/08/02 21:53ID:???>
> とすると、テキストファイルの最後まで一気に読みこまれてしまいます。
> さすがに、そのくらいはわかります(笑)。
( ´,_ゝ`)プッ
0220nobodyさん
03/08/04 13:54ID:???方法、可能かどうかについて書かれたサイト、参考書が見当たらず困っております。。
Set xmlHTTP = CreateObject("Msxml2.ServerXMLHTTP")
xmlHTTP.Open "POST", "送信先URL", False
xmlHTTP.send xmlDoc
resXML = xmlHTTP.responseXML.xml
ASPでは、上記方法でらくらくといけるのですが、
Perlで同じことをする方法ってあるのでしょうか?
0221nobodyさん
03/08/04 14:00ID:IgxIVir7ユーザから、
「あるcgiにアクセスしようとしたら、
403 のステータスコードが返された」といわれました。
でも、同じ作業を自分でやっても、再現性がとれません。(正常動作する)
これって、何が考えられるんでしょうか?
0224nobodyさん
03/08/04 16:46ID:CNOu+lh/sub form { #(1)
# いろいろなFORMに入力させsubmitさせる。
# <input type="file">もある。
}
sub reconfirm{ #(2)
# 画像込みで仮表示し内容を再確認させてsubmitさせる。
# FORMからのデータは<input type="hidden"〜>で持ち回る。
}
sub data_input{ #(3)
# ユニークなdata_idを決めてデータを格納する
# 画像データはdata_idを元にユニークなファイル名を付けてupload処理(CGI.pmで)を行う。
}
こんな流れの処理です。
※次に続く
0225224
03/08/04 16:47ID:CNOu+lh/元は受け入れデータがテキストのみで画像はなかったので、
これで上手くいっていたのですが、画像アップロード機能を付加した所
(2)を経由させると<input type="hidden"〜>では画像データを持ちまわって来ないので
とりあえず(1)→(3)として運用していますが、やはりこのままだと
ちょっとしたEnterキーの誤入力などでいきなり書き込みされてしまうので
どうしても(2)を介在させたいと思います。
(2)で再編集必要な場合、あるいは画像の選びなおしの場合に(1)に戻るのは
ブラウザの「戻る」ボタンを使わせます。
でもし画像込みで(2)の介在が可能ならば、(2)ではその画像も仮表示させたい、
と思っていますが、これを実現するには
A:(1)→(2)の段階でテンポラリーファイルにupload処理上で仮表示させ、
(3)で正式なファイル名称にrenameする。
あるいは
B:(1)→(2)では画像ファイルを変数に格納した上で仮表示し、
(3)で正式なファイル名称にした上、ディスクに格納する。
どんなふうにするのが当たり前、現実的でしょうか。
画像ファイルはJPEG又はGIFで二点ほどで、
$ENV{CONTENT_LENGTH}は200kで制限かけてます。
僕としては仮表示(正式にuploadするかどうかわからない)時点で
ディスクに書き込むよりはできれば変数に仮に格納するBにしたいのですが、
その方法がよくわかりません。
そもそも可能でしょうか。
0226224
03/08/04 16:49ID:CNOu+lh/0227nobodyさん
03/08/04 17:17ID:???Perl のみでは不可能。
削除できるんなら別にいらない機能かと思われ。
(ようするに誤送信する香具師が悪い)
あとなんでもいぃからアップローダのスクリプトを眺めて処理の流れを嫁。
0228224
03/08/04 17:44ID:CNOu+lh/ども、ありがとうございます。
そうですか、perlだけではだめですか…
アップロード処理自体は問題なくできてます。
つまりFORMで受け取ってそれをディスクに格納、はできてます。
そのあいだに再確認の手順を挟みこめないかな、と、
で、その再確認で送ろうとする画像も表示したい。
とはいえもちろんまだローカルにしかないファイルを表示はできませんから、
この時点でサーバが受け取ってなくては無理なわけですが、
できればそれをテンポラリーであれディスクに書き込まないで
できないかな、と思った次第です。
やっぱりこの機能をあきらめるか、あるいはこの時点でとりあえず仮であれ
なんであれディスクに書き込む必要がある、って事ですね。
0229nobodyさん
03/08/04 17:47ID:???メールの添付ファイルをperlを使ってbase64デコードすると、
32KBのところで切れてしまいます。
perlのソースは下記の通りです。
# ===================================================================
# mime_dec_base64 … base64デコード
# Usage : &mime_dec_base64( $input )
# 引数 : 被デコードデータ
# 戻り値 : デコード済バイナリ
# 外部参照: なし
# ===================================================================
sub mime_dec_base64 {
$_ = @_[0];
# --- 非base64キャラクターと'='を除去
tr!A-Za-z0-9+/!!cd;
# --- 底を変換する
tr!A-Za-z0-9+/!\x00-\x3f!;
# --- 6ビット揃えして、戻す
$_ = unpack('B*', $_);
s/(..)(......)/$2/g;
s/((........)*)(.*)/$1/;
$_ = pack('B*', $_);
return( $_ );
}
よろしくお願いします。
0231229
03/08/04 20:18ID:???もともとbase64エンコードって、サイズの限界が32KBなんですね。
・・・ってことで、添付ファイルを分割後エンコード→結合って方法で
解決しました。
0232224
03/08/04 20:47ID:CNOu+lh/while ( read( $fh, $buffer, $baffer_size) ) {
print "$buffer";
}
ってやったら文字化けずらずら出てきました。
なんか実現に近づいているような期待しているんですが、
勘違いですか?
0233nobodyさん
03/08/04 20:52ID:???試しにその内容を .jpg とか .gif ファイルに保存して見れば?
0234224
03/08/04 20:54ID:CNOu+lh/はい、画像ファイルです。JPEGです。
でファイルに保存したら見られます。
やりたいのはファイルに保存しないでHTMLファイルの
一部として表示しちゃいたいんです。
できませんでしょうか。
0236224
03/08/04 21:34ID:CNOu+lh/GDとか使うとメモリ内のデータを画像として表示しますよね。
その辺の応用でできないもんかな、とか思って。
いろいろやってみてるんですが上手く行かないですけど。
0237235じゃないが・・・
03/08/04 21:43ID:???>GDとか使うとメモリ内のデータを画像として表示しますよね。
htmlでの画像表示法知ってるかい
urlでファイル名を指定するんだよ。
0238nobodyさん
03/08/04 21:50ID:???0239224
03/08/04 21:54ID:CNOu+lh/はい、知ってます。
今はそれでやってますから。
FORMから受け取ったものをディスクに格納し、
表示はそのファイルを<IMG src="..."> で表示させてます。
で、FORMから受け取ったものをディスクに格納する前に、
表示する方法がないかな、といろいろやってみているわけで、
無駄な努力をしちょる、という事なんでしょうね、
きっと。
0240nobodyさん
03/08/04 22:02ID:???multipart/mixed なんてものもあるが、まともに実装されている
ブラウザが存在するのか疑問。素直に一旦ファイルに吐く方が
いいと思う。
0241nobodyさん
03/08/04 22:02ID:???>GDとか使うとメモリ内のデータを画像として表示しますよね。
表示するのは画像のみだけどね。
htmlで表示するには結局ファイルに保存しないとだめでしょ。
formで受け取ったjpeg画像もContent-type:image/jpegヘッダーの後に出力すれば
画像のみなら表示できる。
0242224
03/08/04 22:05ID:???reconfirm で一旦テンポラリーファイルに保存→表示
data_input でrenameして正式格納、って事で進めます。
ありがとうございました。
0245nobodyさん
03/08/04 23:18ID:???>画像の生データをHTMLの途中に流し込んで、って言うのが
無茶もいいところ。
GDだって「HTMLの途中に流し込」むなんてできんだろ。
というかHTMLを0から勉強した方がよさげ。
0246nobodyさん
03/08/04 23:20ID:???>というかHTMLを0から勉強した方がよさげ。
というかHTMLとHTTPを0から勉強した方がよさげ。
0247224
03/08/04 23:50ID:???画像吐き出すスクリプトを別にするなり再帰なり、何しろ別のプロセス
から吐き出して<IMG src=""〜>で呼ぶってのならできるんでしょうが、
まあ、言われなくてもいろいろ勉強中ですわ。
ほんじゃ
0248nobodyさん
03/08/05 00:56ID:???0249nobodyさん
03/08/05 01:08ID:???0250nobodyさん
03/08/05 01:18ID:???JavaScriptでローカルファイルを表示させる方法もあるのだが
教えるのは辞めておこう。
0251nobodyさん
03/08/05 01:26ID:???バイナリ埋めこんでそれを実行しようとしているようなもんだな
0252224
03/08/05 02:03ID:???GDができないんじゃなくて、HTMLをそうできないようにしてるから
できなんだと思います。
GDの出力をWEBページの一部として表示することは、
ホントにできませんか?
>>248
いえいえ、お相手ありがとうございました。
>>249
そうよばれたのは初めてです。ちゅうか、その方とは違うと思います。
>>250
いや、どうも伝わってないようですが、ローカルファイルを表示
したいわけじゃないんです。
>>251
いえ、テキストファイルじゃなくて画像ファイルって言ってるんですが、
どうも誤解させたようで、申し訳ありませんでした。
皆様に幸あれ。
0253nobodyさん
03/08/05 02:31ID:???ちゃんとレス嫁馬鹿者。
>>251が言ってる
>コイツの言っている事は、テキストファイル中に実行可能ファイルの
>バイナリ埋めこんでそれを実行しようとしているようなもんだな
は合ってるだろ。
>いえ、テキストファイルじゃなくて画像ファイルって言ってるんですが、
ほんっっっとに馬鹿だな。日本語勉強しろ。
お前はHTML(テキストファイル)の中に画像(バイナリ)を埋め込みたいと言ってる。
そりゃ実行できるわけないだろ。(まあ見えなくは無いが文字化けみたいになるわな)
ついでに
>GDができないんじゃなくて、HTMLをそうできないようにしてるから
>できなんだと思います。
どうすればHTMLにバイナリを埋め込んで表示できるんだ。
>GDの出力をWEBページの一部として表示することは、
>ホントにできませんか?
だから<img src="〜">ならできるっつってんだろ。
その時のresponse headerはContent-Type: text/htmlじゃなくてContent-Type: image/(jpeg|gif|etc.)で
message-bodyはその画像のみだ。
HTMLとHTTPを0から勉強しなおせ。
というか、人の話を聞かないようならプログラムやめろ。マジで。
0255nobodyさん
03/08/05 03:37ID:???ただ、画像サイズがデカくなると、htmlのサイズ自体も脹れ上がるからお薦めはせんし実装しようとも思わんけどな・・・
というか、GDやらしってて、この程度の発想がでてこんのが不思議であるわけだが・・・
0256nobodyさん
03/08/05 10:21ID:???0258nobodyさん
03/08/05 13:34ID:???while($a eq $b || $a eq $c || $b eq $c){
$a = int rand 10 ;
$b = int rand 10 ;
$c = int rand 10 ;
}
これでいいの?
他になんかスマートな書き方ある?
■ このスレッドは過去ログ倉庫に格納されています