CGIだけど、なんか質問ある? Part 9
■ このスレッドは過去ログ倉庫に格納されています
0001ななし ◆E6qQ.htN7o
03/01/03 02:56ID:H5ub4PWW※CGIは特定の言語に依存するものではありません。
※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
↓
【Perl】初心者コーナー Part18
http://pc.2ch.net/test/read.cgi/php/1037797479/l50
過去ログ・関連スレッドは >>2-5 あたりに
0155nobodyさん
03/01/27 00:50ID:???参照元
ttp://najo.cc.sakura.ne.jp/~alimika/satomican/doc/natsumican.html
0156144
03/01/27 15:35ID:???言葉足らずですみません。
はじめ後者でやって、メモリの負担のことを配慮にいれて
前者の方法に切り替えたんですが、HTMLが表示されるのが
遅くなったようなので、どうなってるんだろうと思った
のです。
メモリ重視なら前者、速度重視なら後者ということですね。
0158nobodyさん
03/01/28 09:31ID:ysKV21Dy今チャット作ってるんですが、チャットマスターの発言は参加者には見えるけど
参加者の発言は発言者本人とチャットマスターにしか見えないようにするには
どうすればいいのでしょうか。
もうだいぶ探していますがどーしても分かりません。
ご存知の方、教えてあげてください。よろしくお願いします。
0159nobodyさん
03/01/28 09:51ID:???ログファイルをひとつにする場合は読み出すときにIPアドレスなどから出力してよいものを選択するとか・・・・
CGIではやらない方がよいと思うけど。
0160nobodyさん
03/01/28 13:42ID:aPuGCgnwまだまだ分からないことだらけな当方ですが、
ログファイルを使用してのチャット作りに挑戦してみます。
ところでみなさんどうやって勉強してはるのですか?
とても詳しいですけど。これからの参考にさせて頂ければと思います。
0163nobodyさん
03/01/28 20:48ID:???403Forbidden
You don't have permission to access /○○○/ on this server.
って、出たんだけどー
これって、そのHPに入ることを拒否されてるって事?
どうやったら、入れるの?
0165nobodyさん
03/01/28 23:03ID:???それは指定したURLへのアクセスが禁止されてるってことだから、
そのサイトのちゃんとした入り口から入れば大丈夫なはず。
(このエラーはGoogleの検索結果やブックマークなどの飛び先が
消滅することで出るパターンが多い)
0166nobodyさん
03/01/29 20:07ID:AuAKLt9Rローカルにあるファイルだと、無事open()できるのですが、
外にあるファイル(http:// で始まるhtmlなど)をうまく扱えません。
公開されているHTMLやTXTなどをCGIにて表示させたいのですが、
どうすればいいのでしょうか?
教えてください
0167nobodyさん
03/01/29 20:16ID:???open()の説明によると、外にあるファイルは扱えないことになっている。
自分でソケット張って取りにいくのが普通かな。fsockopenとかLWPとか。
0171nobodyさん
03/01/30 15:07ID:7OFGIowB0172nobodyさん
03/01/31 10:53ID:lEAaXrUa↑この掲示板を使っているのですが、
掲示板の一時停止はどのようにすればいいですか?
cgiを上書きUPしても書き込みされたものには影響がないですか?
0174nobodyさん
03/01/31 10:55ID:lEAaXrUaそんなこといわないで、教えてください。
0175nobodyさん
03/01/31 11:55ID:lEAaXrUa0177nobodyさん
03/01/31 17:41ID:lEAaXrUaありがとう(TT)
0178nobodyさん
03/01/31 17:41ID:54d1aEzbhttp://dx1.kakiko.com/sonota/335/3352/index.html
0179nobodyさん
03/01/31 19:29ID:Ee0DVLll学校のunix鯖ではCGI上からsendmailとqmailが使えないみたいなので、
にゃぁぁぁぁぁぁぁ?さんのsendmail.cgiなるものを設置しました。
SOCKETでsmtpと通信するスクリプトらしいのですが、これも動く気配が無い。
動かないと分かれば諦めがつきます。鯖上でSOCKET関数が使えるかどうかは、どこでわかるのでしょうか?
0181179
03/01/31 20:14ID:Ee0DVLllttp://ash.jp/perl/socket_http.htm
ここのページ見てhttp.plで $host = 'yahoo.com';として
%perl http.pl http://yahoo.com/
とかやったらyahooのソースが見れたのですが、ブラウザ上からhttp.plを呼び出すと。
Error500 malformed header from script. Bad header=HTTP/1.1 200 となります。
0182nobodyさん
03/01/31 20:17ID:???そら、リモートの80番にアクセスしようとする奴拒否するサーバは少ないわさ。
後、ヘッダが変とか出てるので通信以前に死んでる予感も。
0183179
03/01/31 20:30ID:Ee0DVLll220 earth.hc.cc.**.ac.jp ESMTP
502 unimplemented (#5.5.1)
シェルだとこんな感じ。ってかシェルでうごいてもしょうがないか。
0185179
03/01/31 20:43ID:Ee0DVLllESMTPってのが分からないんですけど。。
でも上のはhttp.plが print SOCKET "GET $url HTTP/1.1\n";
ってのを送ってるから502が帰ってくるのであって、print SOCKET "HELO domain\r\n"
ってやればちゃんと 250 earth.hc.cc.**.ac.jpってのが帰ってきます。
でもこれをブラウザ上で呼び出すと、Error500になってしまいます。
0187179
03/01/31 20:50ID:Ee0DVLll。。いや急遽スクリプト書き直したもんで、見落としてました。
0188nobodyさん
03/01/31 20:52ID:???はぁ、、わからんのなら答えなくてよろしい。
この場合、CGIが変なヘッダーを出しとるわい。って怒ってる。
で、おそらくHTTP/1.1 200はyahoo.comが出したもの。(http.plを見ればわかる)
つまり、通信は成功してる。ということ。
それから、>>183で出てきたものは、SMTPでーもんの出力だけ。HTTPでしゃべられても
困るっていうことを言ってる。全然大きな情報じゃない。
>>181
そもそも、そんな変なことで悩む前に、「使えないみたい」「動く気配がない」
って言われて原因が分かる超人に期待するのは無謀だと気づけ。
0191nobodyさん
03/01/31 20:55ID:???0192179
03/01/31 21:04ID:Ee0DVLllcgi上ではError500 を吐くの場合 1.cgi上では実行権限が与えられていない
2.それともSOCKET関数とは別の問題 なのか知りたいんです。
# html書き出し部分はここです。
while (chomp($buf=<SOCKET>)) {
print "Content-type: text/html\n\n";
print "$buf\n";
exit;
この場合もシェルだと
Content-type: text/html
220 earth.hc.cc.**.ac.jp ESMTPとなります。
0193nobodyさん
03/01/31 21:05ID:???0194nobodyさん
03/01/31 21:08ID:???0196179
03/01/31 21:28ID:Ee0DVLll(chomp($buf=<SOCKET>));
open(OUT,">> http.log");
print OUT "$buf\n";
close(OUT);
0198179
03/01/31 21:32ID:Ee0DVLll0199nobodyさん
03/01/31 21:36ID:???0200179
03/01/31 21:42ID:Ee0DVLllちなみに777で試してみても結果は同じでした。
0202nobodyさん
03/01/31 23:06ID:???0203179
03/02/01 01:24ID:???0204nobodyさん
03/02/01 17:41ID:Cax25w+6パスワード入れて管理モードに行こうとすると、
『CGI専用サーバなのでできるか』と言われます。
biglobeだとCGI専用サーバとかになっちゃうらしいんですけど、cgiのほうのどっか設定変えたらできるんですかね。
当方、初心者です。
0206nobodyさん
03/02/01 17:44ID:???0208の
03/02/01 17:45ID:/eR4kJXsファイル名の指定を絶対パスにしてみ
0209nobodyさん
03/02/01 17:46ID:???ちなみにhttp://pc2.2ch.net/test/read.cgi/php/1036915437/864なんですけど。
PHPだとsetUIDとかでしょうかねぇ?PHP知らないけど。
0210209
03/02/01 17:47ID:???0213212
03/02/01 20:19ID:???答える価値もないと判断されたか(鬱
0214の
03/02/02 02:12ID:eQAjYeC3モジュールは、httpd のプロセス内(同じメモリ空間)で動く。
したがって、動作上で OS のメモリ保護が期待できるか否かと言った違いは
ある。まあ、クラック耐性が多少高い程度だがな。
0215nobodyさん
03/02/02 02:13ID:VwKQrujSプログラム側でどのようなヘッダを吐けばいいのですか?
ちなみにContent-Typeしか吐いてない場合、
IEはキャッシュしてくれないようです。
やりたいことは、コンテンツをキャッシュさせて、ブラウザから送られてくる
リクエストヘッダを調べて、コンテンツを吐くか吐かないか制御したいのです。
0216nobodyさん
03/02/02 03:31ID:???If-Modified-Since と Last-modified あたりかな。
まぁでもCGI側でブラウザのキャッシュのことを気にしなくていいような気もするが・・・
0217215
03/02/02 04:04ID:???Last-Modified付けてもIf-Modified-Since送ってきませんでした。IE5
もしキャッシュできれば、余分なI/Oが減って2chのread.cgiが軽くなるかなー
なんて考えていましたが、無理かな。。
0218nobodyさん
03/02/02 15:06ID:???0220nobodyさん
03/02/02 23:13ID:???nph- にして自前でヘッダを全部出力しないと、
サーバソフトが勝手にレスポンスヘッダに 'Cache-Control: no-cache' とか
付けて吐き出してくれてしまったりします。
nph- にすればキャッシュだけでなくかなり自由度の高いシステムを作れるけど、
いかんせん面倒くさいのが何とも。
HTTPの仕様書とにらめっこをしながらプログラムを書く羽目に。
0221nobodyさん
03/02/03 08:11ID:FFrB/oLuNarrationBBSというのがものすごく気に入って自分のサイトに
設置しようと思い、CGIについて理解しようとネットを駆け巡り
5時間が過ぎました。CGIについては全くの初心者ですが、
一通りの設置の流れや、やらなければならないことは理解した
つもりです。で、いまだにCGIをちゃんと使えるようになって
いないのですが、どなたか助けていただけませんでしょうか。
現在の進行状態としては、プロバイダー(地域のCATVでCGI利用可確認済み)確認、
目的のCGIのダウンロード、プロバイダーに指定された内容の「.htaccess.txt」
ファイルの転送、パスの変更後CGIファイルの転送とパーミッションの設定、
ホームページのトップからCGIへのリンクを作成。
と、こんな感じなんですが、リンクをクリックすると、ダウンロードしますか?の
確認メッセージがでてきてしまい、CGIを動作させられません。
0223nobodyさん
03/02/03 09:26ID:8N4vyrOL0224nobodyさん
03/02/03 09:55ID:???htaccessが使えないような場合のことです。
0226nobodyさん
03/02/03 15:58ID:QjlL5TK8,htaccessの中身は以下のとおりです
# .htaccess
AddHandler cgi-script .cgi
このファイルのパーミッションは、プロバイダの指示が
>テキストファイルの内容は以下のように記述して下さい。
># .htaccess
>AddHandler cgi-script .cgi
>
>転送するときにパーミッションを「644」にして下さい。
とあったので644、その他のものについては cgi 755 dat 666 pl 644
との指示がCGI配布サイトにありましたのでその通りに。また、『※全ての
ファイルを格納するディレクトリ(フォルダ)は777にしてください。』と
あったのでcgiファイルのあるフォルダは777にしました。
ディレクトリ構造は以下のとおりなんですがこれでいいのでしょうか?
public_html ┬ index.html
└ cgi-bin ─ nb ┬ nbs.cgi
├ nbe.cgi
├ cnt.cgi
├ img ─ 画像ファイル(アイコン含む)
├ bbs.dat
├ nar.dat
├ num.dat
├ rjc.dat
├ usr.dat
├ jcode.pl
└ index.html ダミー用
0227nobodyさん
03/02/03 16:00ID:QjlL5TK8public_html ┬ index.html
└ cgi-bin ─ nb ┬ nbs.cgi
├ nbe.cgi
├ cnt.cgi
├ img ─ 画像ファイル(アイコン含む)
├ bbs.dat
├ nar.dat
├ num.dat
├ rjc.dat
├ usr.dat
├ jcode.pl
└ index.html ダミー用
こんな感じです
0228nobodyさん
03/02/03 16:45ID:TJH3fomo.htaccess.txt
じゃなくて
.htaccess
0229302
03/02/03 16:49ID:???FTPソフトを用いてtxt拡張子を消しましたがうまくいきません。
リンクをクリックすると、ダウンロードしますか?の確認メッセージが
やっぱりでてきてしまい、CGIを動作させられません。
0230221
03/02/03 16:51ID:QjlL5TK80231221
03/02/03 17:05ID:QjlL5TK8ダウンロードしますか?はでてこなくなりましたが、
Internal Server Error になってしまいました。
この場合、ほとんどはパスの設定ミスということらしい(?)ですが、
htaccessのパーミッションはプロバイダの指定どおり、他のcgiファイルなどは
cgi配布サイトの指示どおりにしています。
ひとつ疑問が残るとすれば、cgiファイルを格納しているディレクトリの
パーミッション設定なんですが、cgi配布元によると、cgi格納ディレクトリは
777にせよとのことなのですが、これは>>227の階層構造でいうと、cgi-binと
nbsフォルダのパーミッションを777にすればいいんですよね?
・・・なんでInternal Server Errorになるんだろう(T-T)
0232nobodyさん
03/02/03 17:18ID:???もしくは#!/usr/bin/perl です。
両方試してみた?
0233nobodyさん
03/02/03 17:19ID:800eNsZd777でだめなら755にしる。
0234221
03/02/03 17:21ID:QjlL5TK8755にしたらちゃんと表示されました!
皆さん本当にありがとうございました〜
なんだかんだいって、やっぱり2chは頼りになります
0235nobodyさん
03/02/03 18:50ID:???頼りにするのは困る。最終手段として使え。自分で調べられないと生きていけないぞ。
今回の問題は、suEXECのセキュリティーチェックに引っかかってる。点。
worldから書き込み可能なファイルは、所有者以外に書き換えられた可能性がある
から、実行させてくれない。ということ。
0236179
03/02/03 21:00ID:???モジュールが呼び出せないためSocket通信できませんでした。
push(@INC, "/hoge"); とかも駄目でした。
0237nobodyさん
03/02/03 21:15ID:???0238sub()
03/02/04 00:03ID:rUOqBsxa一行づつループかけてマッチした行以外をTMPファイルに吐き出して
それをログファイルに上書き(>)した後、書き換えたい行を(>>)で書けば
よいんでしょうか?3日悩んでます。。。
0240179
03/02/04 01:52ID:???>237
の言う通り、システムコールで動きました。
0241nobodyさん
03/02/04 09:32ID:???0242nobodyさん
03/02/04 16:44ID:???一行ずつ読み込んでいく方法はないものでしょうか。
@file = <IN> といったメモリにファイル全部読み込む方法は使わず、
一行ずつ読み込んで、一行ごとに違う処理をしていきたいのです。
while の中でループ回数カウントしてifで判定しろ、なんていうのはなしで。
ファイルを一行読み込む場合、
open(IN,"$logfile");
$line = <IN>;
と、やれば出きるのはどこにでも書いてあるのですが、
2度目以降 $line = <IN> としても空でした…。
Perl は一行ごとに分けるデータ構造が身についてしまってるのがダメなのかなぁ…。
seek と read 使えばよさそうなのは解ってはいるのですが、
ベースから書き換えなくてはならず、このままの構造でなんとかできないものかと。
0243242
03/02/04 17:30ID:???あちらにいってきます。
0244179
03/02/04 18:53ID:???まあいいや。seekとread使わないと駄目じゃない?
それなら方法が下のページの"ファイルをブロック化する" に書いてあるけど。
ttp://homepage2.nifty.com/S_HIASA/kotohazime/perlpro.htm
0245nobodyさん
03/02/05 00:47ID:Rqrb27N+分散して、複数のCGIを設置するのとどちらが良いのでしょうか?
例えば、カテゴリ別の掲示板だった場合…
bbs.cgiで10のカテゴリの掲示板を運営できるものと、
bbs1.cgiと、bbs2.cgiで5のカテゴリずつ運営する場合です。
この場合、下記の場合の方が、負荷を軽減できると感じてしまいますが
実際の所はどちらがよいのでしょうか?
0246nobodyさん
03/02/05 00:48ID:k4P35St7思い > 重い
0247nobodyさん
03/02/05 00:53ID:???そのCGIが、インタプリタによって実行されるものだと勝手に仮定すると、
普通に考えて、一度に解析されるコードの量が少ないと、負荷は減る。はず。
でも、>>245の場合、実際に解析されるもの自体は同じだと思うから、効果は無い。と思う。
分割するとしたら、読み込み用、書き込み用、メンテナンス用とか、機能別に分割する
方が、よろしい
0248245
03/02/05 01:03ID:Rqrb27N+CGIの内容は、スレッド掲示板をいくつでも作れてしまうというものです。
書き込み、読み込み、メンテ用などは、各CGIで動作します。
このCGIシステム一つで、掲示板を50個を運営するのと、
CGIシステムを5個設置して、10個の掲示板を運営するのと…という場合です。
読み込み用のCGIがbbs.cgiだとすると、
50の掲示板それぞれ、1分間に10人がアクセスすると、
bbs.cgiを500回動作させる事になります。
0249nobodyさん
03/02/05 03:24ID:CZbUch9cchmod 0604, "$storedir$prefix$id.$type";
0251nobodyさん
03/02/05 10:47ID:OGgWzvAlPHPとか、PEALとか、 JAVAとか、 ASPとかあるけど、
大きなデータベースを使ったWEBアプリケーションを作る場合、
どれが性能がいいですか?
今ASPしかやってませんが、次になにを勉強しようか
考えてます。
■ このスレッドは過去ログ倉庫に格納されています