トップページ⇒php
1001コメント300KB

CGIだけど、なんか質問ある? Part 9

■ このスレッドは過去ログ倉庫に格納されています
0001ななし ◆E6qQ.htN7o 03/01/03 02:56ID:H5ub4PWW
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
  ↓
【Perl】初心者コーナー Part18
http://pc.2ch.net/test/read.cgi/php/1037797479/l50

過去ログ・関連スレッドは >>2-5 あたりに
0133nobodyさん03/01/25 22:26ID:???
>>132
戦う前から負けている。
0134nobodyさん03/01/25 22:29ID:Qs+kaqdw
できればCでCGIしたいんですけど
無料レンタルサーバで、使えるところないですかね?
0135nobodyさん03/01/25 22:29ID:???
>>134
そのレベルを語るにはまだ早い。
0136nobodyさん03/01/25 22:30ID:???
>>132
フリーのウェブサーバーソフトを使えば?

>>134
板違いな質問・・・・
トクトクならgccが使える。
0137nobodyさん03/01/25 22:32ID:Qs+kaqdw
とくとくまじですか?
ちょっと検索してみます。
サンクス
0138nobodyさん03/01/25 22:35ID:???
>>137
自分のマシンにSunOSが入ってないと無意味だぞ。
0139nobodyさん03/01/25 22:36ID:???
>>138
なんでだよ(笑)
telnet使ってサーバー上でコンパイルすればいいじゃない。
それとトクトクはLinux

iswebと勘違いしたとか?
0140nobodyさん03/01/25 22:42ID:Qs+kaqdw
iswebでもgccつかえるのですか?
0141nobodyさん03/01/25 22:43ID:2edfK8fF
IISで画像掲示板(cgi)を表示させるとDLLHOST.EXEがCPU100%
になる”こと”がある。
プロセスはその時2個あるので殺すと普通になる。何で?
0142nobodyさん03/01/25 22:44ID:???





























g
0143nobodyさん03/01/25 22:46ID:???
>>140
ローカルでコンパイルしてアップロードしろってことでしょ
0144nobodyさん03/01/26 06:26ID:Hn+ukPj1
テキストファイルを読み込んでHTMLを吐き出すcgiの場合、
テキストファイルの中身を一行づつHTMLに吐き出すのと、
テキストファイルの中身を一旦配列変数に入れてから
まとめてHTMLにして吐き出すのとではどちらがいいんでしょう。
0145nobodyさん03/01/26 06:46ID:hfzgm8Bu
★http://jbbs.shitaraba.com/travel/832/★
    ◆みんなの情報局◆
0146nobodyさん03/01/26 09:25ID:???
>144
ケースバイケース。
0147nobodyさん03/01/26 09:29ID:???
>>144
「どちらがいいか」って漠然と言われても……
使うメモリが少なくてすむ前者のほうがいいんでない?
0148w-inds慶太03/01/26 09:58ID:8J93RXm8
>>144
w-indsの慶太どぇす。
147のいうように、前者のほうがメモリへの負担が少ないでしょう。
ただ、後者のほうがメンテナンスしやすそう。
0149nobodyさん03/01/26 10:02ID:???
while (read(IN, my $buf, 8192)) {
 print $buf;
}
0150nobodyさん03/01/26 10:38ID:???
print while (<IN>); # 1行ずつ

@hoge = <IN>; # 配列経由
print @hoge;

コード自体は大差なし
読み込みから表示までの間にどんな処理をするかで使い分けれ
0151nobodyさん03/01/26 15:45ID:???
シーケンシャルな処理なら前者
ランダムアクセスな処理なら後者
0152nobodyさん03/01/27 00:36ID:zeV2mDZO
WinXP、Perl/CGI環境でgzip圧縮転送の動作テストをしたいんですが
Winにgzipを導入してPerlで動かすってことは可能なのでしょうか。
また、可能だとすれば、どのようにすればいいのでしょうか。
参考サイトでも構いませんので、教えてください。
0153nobodyさん03/01/27 00:47ID:???
>>152
「Winにgzipを導入して」の意味がさっぱり分からんのだが、
system・パイプではダメ?
0154nobodyさん03/01/27 00:49ID:???
>>152
ほい。
ttp://www.gzip.org/
0155nobodyさん03/01/27 00:50ID:???
>>152
参照元
ttp://najo.cc.sakura.ne.jp/~alimika/satomican/doc/natsumican.html
015614403/01/27 15:35ID:???
>>147 >>148
言葉足らずですみません。
はじめ後者でやって、メモリの負担のことを配慮にいれて
前者の方法に切り替えたんですが、HTMLが表示されるのが
遅くなったようなので、どうなってるんだろうと思った
のです。
メモリ重視なら前者、速度重視なら後者ということですね。
015714403/01/27 15:40ID:???
>>149-151
すみません。お礼言い忘れました。
ありがとうございます。
0158nobodyさん03/01/28 09:31ID:ysKV21Dy
初参加です。質問させてください。よろしくお願いします。
今チャット作ってるんですが、チャットマスターの発言は参加者には見えるけど
参加者の発言は発言者本人とチャットマスターにしか見えないようにするには
どうすればいいのでしょうか。
もうだいぶ探していますがどーしても分かりません。
ご存知の方、教えてあげてください。よろしくお願いします。
0159nobodyさん03/01/28 09:51ID:???
参加者ごとにログファイルをつくるとか・・・・
ログファイルをひとつにする場合は読み出すときにIPアドレスなどから出力してよいものを選択するとか・・・・

CGIではやらない方がよいと思うけど。
0160nobodyさん03/01/28 13:42ID:aPuGCgnw
>>159さんありがとうございます!
まだまだ分からないことだらけな当方ですが、
ログファイルを使用してのチャット作りに挑戦してみます。

ところでみなさんどうやって勉強してはるのですか?
とても詳しいですけど。これからの参考にさせて頂ければと思います。
0161nobodyさん03/01/28 14:11ID:???
>>160
> ログファイルを使用してのチャット作りに

使用しないでどうやってCGIチャットを作るの?(^_^;)
0162!16103/01/28 18:29ID:???
>>161
mod_perl環境でグローバル変数にログをためとくとか。
0163nobodyさん03/01/28 20:48ID:???
あるHPにアクセスした時、
403Forbidden
You don't have permission to access /○○○/ on this server.
って、出たんだけどー
これって、そのHPに入ることを拒否されてるって事?

どうやったら、入れるの?
0164nobodyさん03/01/28 21:26ID:???
>>163
どういうレベルで拒否されたかはわからないけど、とりあえずアクセスできない。
0165nobodyさん03/01/28 23:03ID:???
>>163
それは指定したURLへのアクセスが禁止されてるってことだから、
そのサイトのちゃんとした入り口から入れば大丈夫なはず。
(このエラーはGoogleの検索結果やブックマークなどの飛び先が
消滅することで出るパターンが多い)
0166nobodyさん03/01/29 20:07ID:AuAKLt9R
CGIにてFORMにて入力したファイルを表示するCGIをPerlで作っています。
ローカルにあるファイルだと、無事open()できるのですが、
外にあるファイル(http:// で始まるhtmlなど)をうまく扱えません。
公開されているHTMLやTXTなどをCGIにて表示させたいのですが、
どうすればいいのでしょうか?

教えてください
0167nobodyさん03/01/29 20:16ID:???
>>166
open()の説明によると、外にあるファイルは扱えないことになっている。
自分でソケット張って取りにいくのが普通かな。fsockopenとかLWPとか。
0168nobodyさん03/01/29 21:58ID:???
>>166
外部なら自分で取りに行かなくてもブラウザに送ったHTMLの中で
開かせればいいんじゃないの?
0169nobodyさん03/01/29 21:59ID:???
>>166
そんな君にはPHP
fopenでローカルファイルを開くように外部ファイルを開ける。
0170nobodyさん03/01/29 22:07ID:???
>>169
それようのオプション付けてコンパイルしてないと無効だけどな。
0171nobodyさん03/01/30 15:07ID:7OFGIowB
age
0172nobodyさん03/01/31 10:53ID:lEAaXrUa
http://www.kent-web.com/bbs/joyful.html?

↑この掲示板を使っているのですが、
掲示板の一時停止はどのようにすればいいですか?
cgiを上書きUPしても書き込みされたものには影響がないですか?
0173nobodyさん03/01/31 10:54ID:???
>>172
まぁ死ね。
0174nobodyさん03/01/31 10:55ID:lEAaXrUa
>>173
そんなこといわないで、教えてください。
0175nobodyさん03/01/31 11:55ID:lEAaXrUa
お願いします。。。
0176nobodyさん03/01/31 17:30ID:???
>>172
まぁパーミッションを変更しる。
0177nobodyさん03/01/31 17:41ID:lEAaXrUa
>>176
ありがとう(TT)
0178nobodyさん03/01/31 17:41ID:54d1aEzb






http://dx1.kakiko.com/sonota/335/3352/index.html




0179nobodyさん03/01/31 19:29ID:Ee0DVLll
メールアドレスを晒すのが嫌なのでformmailを設置したところ、
学校のunix鯖ではCGI上からsendmailとqmailが使えないみたいなので、
にゃぁぁぁぁぁぁぁ?さんのsendmail.cgiなるものを設置しました。
SOCKETでsmtpと通信するスクリプトらしいのですが、これも動く気配が無い。
動かないと分かれば諦めがつきます。鯖上でSOCKET関数が使えるかどうかは、どこでわかるのでしょうか?
0180nobodyさん03/01/31 19:33ID:???
>>179
適当なところにコネクション張ってみ?
018117903/01/31 20:14ID:Ee0DVLll
>>180
ttp://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:???
>>181
そら、リモートの80番にアクセスしようとする奴拒否するサーバは少ないわさ。

後、ヘッダが変とか出てるので通信以前に死んでる予感も。
018317903/01/31 20:30ID:Ee0DVLll
%perl http.pl ms.hc.cc.**.ac.jp:25
220 earth.hc.cc.**.ac.jp ESMTP
502 unimplemented (#5.5.1)
シェルだとこんな感じ。ってかシェルでうごいてもしょうがないか。
0184nobodyさん03/01/31 20:33ID:???
>>183
いや、大きな情報な気がする。

ESMTPに対応してないんじゃないの?サーバが。
018517903/01/31 20:43ID:Ee0DVLll
>>184
ESMTPってのが分からないんですけど。。
でも上のはhttp.plが print SOCKET "GET $url HTTP/1.1\n";
ってのを送ってるから502が帰ってくるのであって、print SOCKET "HELO domain\r\n"
ってやればちゃんと 250 earth.hc.cc.**.ac.jpってのが帰ってきます。
でもこれをブラウザ上で呼び出すと、Error500になってしまいます。
0186nobodyさん03/01/31 20:47ID:???
>>185
つぅかなぜsmtpにhttpリクエストを送る・・・
018717903/01/31 20:50ID:Ee0DVLll
>>186
。。いや急遽スクリプト書き直したもんで、見落としてました。
0188nobodyさん03/01/31 20:52ID:???
>>182
はぁ、、わからんのなら答えなくてよろしい。

この場合、CGIが変なヘッダーを出しとるわい。って怒ってる。
で、おそらくHTTP/1.1 200はyahoo.comが出したもの。(http.plを見ればわかる)
つまり、通信は成功してる。ということ。

それから、>>183で出てきたものは、SMTPでーもんの出力だけ。HTTPでしゃべられても
困るっていうことを言ってる。全然大きな情報じゃない。

>>181
そもそも、そんな変なことで悩む前に、「使えないみたい」「動く気配がない」
って言われて原因が分かる超人に期待するのは無謀だと気づけ。
0189nobodyさん03/01/31 20:54ID:???
>>188
>この場合、CGIが変なヘッダーを出しとるわい。って怒ってる。
彼2行目でそう言ってる。
0190nobodyさん03/01/31 20:54ID:???
>>188
>この場合、CGIが変なヘッダーを出しとるわい。って怒ってる。

>>182もその可能性を示唆してると思われ。
0191nobodyさん03/01/31 20:55ID:???
ケコーン
019217903/01/31 21:04ID:Ee0DVLll
鯖にはSOCKETモジュールがインストールされていて、シェルからSOKCET関数も使えるが、
cgi上では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:???
chomp($buf=<SOCKET>)
0194nobodyさん03/01/31 21:08ID:???
とりあえず無バッファリングにしてみる。
019518803/01/31 21:16ID:???
>>189-190
>>182は、通信"以前"って書いてあったからー
通信以後に発生したエラーだし、つっこんでもOKだと思って。。
019617903/01/31 21:28ID:Ee0DVLll
シェルから呼び出した時しかファイルに書き込まれません。log属性は666です。
(chomp($buf=<SOCKET>));
open(OUT,">> http.log");
print OUT "$buf\n";
close(OUT);
0197nobodyさん03/01/31 21:30ID:???
>>196
ディレクトリのパーミッションは?
019817903/01/31 21:32ID:Ee0DVLll
cgi-binディレクトリは755になってます。
0199nobodyさん03/01/31 21:36ID:???
ネタか。
020017903/01/31 21:42ID:Ee0DVLll
cgiスクリプトとlogが同一ディレクトリにある場合って、755でも動きませんか?
ちなみに777で試してみても結果は同じでした。
020119903/01/31 21:46ID:???
>>198について言ったわけじゃない
0202nobodyさん03/01/31 23:06ID:???
suExecだったしな。
020317903/02/01 01:24ID:???
他の所でソケット通信の話題OKという所があったので、移住します。有り難うございました。
0204nobodyさん03/02/01 17:41ID:Cax25w+6
BiglobeでHP作ってて、CGI使って日記作ろうと思ったんですが、
パスワード入れて管理モードに行こうとすると、
『CGI専用サーバなのでできるか』と言われます。
biglobeだとCGI専用サーバとかになっちゃうらしいんですけど、cgiのほうのどっか設定変えたらできるんですかね。

当方、初心者です。
0205nobodyさん03/02/01 17:42ID:???
>>204
わかってます。帰れ。
0206nobodyさん03/02/01 17:44ID:???
CGIは安全、mod_phpは危険ってどういうこと?
0207nobodyさん03/02/01 17:44ID:???
>>206
幻想です。CGIが安全ってまた訳がわからんけれど。
0208の03/02/01 17:45ID:/eR4kJXs
>>196
ファイル名の指定を絶対パスにしてみ
0209nobodyさん03/02/01 17:46ID:???
>>207
ちなみにhttp://pc2.2ch.net/test/read.cgi/php/1036915437/864なんですけど。
PHPだとsetUIDとかでしょうかねぇ?PHP知らないけど。
021020903/02/01 17:47ID:???
s/setUIDとか/setUIDできないとか/
0211nobodyさん03/02/01 17:48ID:???
>>209
一つのモジュールに負荷が集中するって事じゃないの?
021220903/02/01 17:50ID:???
>>211
といいますと??
スマソ まじでわからんです。
021321203/02/01 20:19ID:???
放置されとる・・・・
答える価値もないと判断されたか(鬱
0214の03/02/02 02:12ID:eQAjYeC3
CGI は別プロセスでロジックが動く。
モジュールは、httpd のプロセス内(同じメモリ空間)で動く。
したがって、動作上で OS のメモリ保護が期待できるか否かと言った違いは
ある。まあ、クラック耐性が多少高い程度だがな。
0215nobodyさん03/02/02 02:13ID:VwKQrujS
CGIで、ブラウザにコンテンツをキャッシュさせるには
プログラム側でどのようなヘッダを吐けばいいのですか?

ちなみにContent-Typeしか吐いてない場合、
IEはキャッシュしてくれないようです。

やりたいことは、コンテンツをキャッシュさせて、ブラウザから送られてくる
リクエストヘッダを調べて、コンテンツを吐くか吐かないか制御したいのです。
0216nobodyさん03/02/02 03:31ID:???
>>215
If-Modified-Since と Last-modified あたりかな。
まぁでもCGI側でブラウザのキャッシュのことを気にしなくていいような気もするが・・・
021721503/02/02 04:04ID:???
>>216
Last-Modified付けてもIf-Modified-Since送ってきませんでした。IE5

もしキャッシュできれば、余分なI/Oが減って2chのread.cgiが軽くなるかなー
なんて考えていましたが、無理かな。。
0218nobodyさん03/02/02 15:06ID:???
phpでperlのlocal宣言ってあるの?
0219nobodyさん03/02/02 15:27ID:???
>>218
phpはperlなんかと違って変数のスコープは関数内に限定されます。
0220nobodyさん03/02/02 23:13ID:???
>>215
nph- にして自前でヘッダを全部出力しないと、
サーバソフトが勝手にレスポンスヘッダに 'Cache-Control: no-cache' とか
付けて吐き出してくれてしまったりします。

nph- にすればキャッシュだけでなくかなり自由度の高いシステムを作れるけど、
いかんせん面倒くさいのが何とも。
HTTPの仕様書とにらめっこをしながらプログラムを書く羽目に。
0221nobodyさん03/02/03 08:11ID:FFrB/oLu
ここ( ttp://www.area-s.com/ )で配布されている、
NarrationBBSというのがものすごく気に入って自分のサイトに
設置しようと思い、CGIについて理解しようとネットを駆け巡り
5時間が過ぎました。CGIについては全くの初心者ですが、
一通りの設置の流れや、やらなければならないことは理解した
つもりです。で、いまだにCGIをちゃんと使えるようになって
いないのですが、どなたか助けていただけませんでしょうか。

現在の進行状態としては、プロバイダー(地域のCATVでCGI利用可確認済み)確認、
目的のCGIのダウンロード、プロバイダーに指定された内容の「.htaccess.txt」
ファイルの転送、パスの変更後CGIファイルの転送とパーミッションの設定、
ホームページのトップからCGIへのリンクを作成。

と、こんな感じなんですが、リンクをクリックすると、ダウンロードしますか?の
確認メッセージがでてきてしまい、CGIを動作させられません。
0222nobodyさん03/02/03 08:12ID:???
>>221
shine
0223nobodyさん03/02/03 09:26ID:8N4vyrOL
http://www.agemasukudasai.com/bloom/
0224nobodyさん03/02/03 09:55ID:???
CGIを使って、特定のディレクトリ以下をアクセス禁止にするような事できますか?
htaccessが使えないような場合のことです。
0225nobodyさん03/02/03 10:17ID:???
>>221
.htaccessの中身をここにうpしてみよう。
あとパーミッションはいくつに設定したの?
0226nobodyさん03/02/03 15:58ID:QjlL5TK8
>>225さん すみません。朝方までがんばってやっていて今まで寝てました
,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:QjlL5TK8
すみません、変な風になっちゃいましたね
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 ダミー用
こんな感じです
0228nobodyさん03/02/03 16:45ID:TJH3fomo
>>227
.htaccess.txt
じゃなくて
.htaccess
022930203/02/03 16:49ID:???
>>228さん レスありがとうございます。

FTPソフトを用いてtxt拡張子を消しましたがうまくいきません。
リンクをクリックすると、ダウンロードしますか?の確認メッセージが
やっぱりでてきてしまい、CGIを動作させられません。
023022103/02/03 16:51ID:QjlL5TK8
すいません、229は302じゃなくて221です・・・。
023122103/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/local/bin/perl
もしくは#!/usr/bin/perl です。

両方試してみた?
■ このスレッドは過去ログ倉庫に格納されています