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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/07/06 13:41ID:Mpxtn4bk
CGIの運用に関する質問スレッドです。

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

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

過去ログ・関連スレッドは >>2
0202nobodyさん02/07/21 21:42ID:???
>>199
ほー、じゃあGetとリクエストしてGETになる様なHTTPDとやらを
挙げてもらおうかCGIのプロさんよ
0203nobodyさん02/07/21 21:44ID:???
>>202
俺の作ったxllHTTPD。そこ以外はRFC完全準拠だ。
0204nobodyさん02/07/21 21:46ID:???
>>203
あっそ、妄想のプロですか
0205nobodyさん02/07/21 21:49ID:???
>>202
Get とリクエストするのは RFC に従ってない。
0206nobodyさん02/07/21 21:49ID:???
>>205
そこ以外は
0207nobodyさん02/07/21 21:51ID:???
>>205
で、その「従ってない」リクエストをした時にどう動くかと聞いている
JAROに訴えるか?
0208nobodyさん02/07/21 21:53ID:???
何もやらないんじゃない?
そんなリクエストメソッドはないんだから。
0209nobodyさん02/07/21 21:57ID:???
ヲイヲイ
>ないんじゃない?
とは何だCGIのプロさんよ
自分でクライアント書いてGetでその辺のサーバに
リクエストしてみろよ
そんな偏屈サーバに当ったらここに書き込んでくれ
021019702/07/21 22:02ID:???
え、っと、、GetをCGIに通すHTTPDを教えてくださいな・・・

ミンナコワイヨウ…
0211nobodyさん02/07/21 22:08ID:???
>>210  ほぼ全てのHTTPDじゃ無い?
0212nobodyさん02/07/21 22:18ID:???
yahoo.co.jp に
Get / HTTP1.1
HOST: yahoo.co.jp
した結果

HTTP/1.1 400 Bad Request
Date: Sun, 21 Jul 2002 13:17:35 GMT
Connection: close
Content-Type: text/html
0213nobodyさん02/07/21 22:22ID:???
>>212
ヘッダの要素足りてないよ。
0214nobodyさん02/07/21 22:29ID:???
>>212
ムヒョ! MethodNotImplemented返ってきた
あれえおかしいなあ、Getもいけてた筈なんだけどなあ
もしかして、俺間違えまくりチョー-厨房って感じ?
偉そうにしてゴミンナサイ  
今すぐ首括って死にます (チョー死んでお詫び
0215nobodyさん02/07/21 22:29ID:???
すまんかった。

Get / HTTP/1.1
Host: www.yahoo.co.jp


HTTP/1.1 501 Method Not Implemented
Date: Sun, 21 Jul 2002 13:28:12 GMT
Allow: TRACE
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
021619702/07/21 22:54ID:???
まじ?天然だったのかよ。。。もうちょっと弄らせてよ〜ん。
楽しんでたのにぃ。

ちなみに、Netscape-Enterpriseやら、Microsoft-IISにGetで投げると
404が帰ってきます。なぜ404かと問いつめたいですが・・・
この辺のサーバでCGIな所は見つけるの面倒なので探しませんでしたが
たぶん同じでしょう、IISのASPなところも404でした。
んで、GoogleのGWSだけは、200で普通に返してきます。
もしかしたら外部からの特殊クライアントに配慮してるのかも。

なんにしろ、逝ってらっしゃい〜
0217コギャル&中高生02/07/21 23:12ID:8IhQDrIi
http://go.iclub.to/ddiooc/
     
     i/j/ez/対応です

お役立ちリンク集
必ず役立ちます

 サイト管理者お役立ち集
    1日4000HIT以上
↓
http://kado7.ug.to/wowo/
      
     i/j/ez/対応
    
   コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便

         ↓
   http://kado7.ug.to/wowo/-a.htm
    
       i/j/ez/対応
0218nobodyさん02/07/21 23:53ID:???
素直に引いたな…
0219nobodyさん02/07/22 06:49ID:1nREPLNC
質問です。
teacup掲示板の無料タイプなんですが、これにアクセス解析を別途に
付ける事は可能なんでしょうか?
いや、自分が付けたいわけじゃなくて、訪問先のサイトにそういう事が
出来るんだったら、しょっちゅう見に逝ってるのが知られるとハズカシーなあ
と思ったのですが。
0220sage02/07/22 07:03ID:rjydbpOU
>>219

掲示板のタイトルなんかがhtmlで記述出来るなら可能だろうよ
掲示板自体に解析機能が付いてたっておかしくないし
0221nobodyさん02/07/22 11:03ID:???
textareaから渡された文字列の改行コードを<BR>に変換したいのですが
これで合っていますか?

$hoge =~ s/\r\n/\x3cBR\x3e/gm;
$hoge =~ s/\n/\x3cBR\x3e/gm;
$hoge =~ s/\r/\x3cBR\x3e/gm;
022222102/07/22 11:03ID:???
一応windowsで、テストしたら出来ました。
022322102/07/22 11:10ID:???
$hoge =~ s/\r\n/<br>/g;
$hoge =~ s/\r/<br>/g;
$hoge =~ s/\n/<br>/g;

もう一つ見つけました。ほとんど同じですが。
スマートとかスマートじゃないとかあるんでしょうか。
0224nobodyさん02/07/22 11:19ID:StGZBnhO
$hoge =~ s/\n\r|\r|\n/<br>/g;
見た目にはこっちのがスマートだけど>>223のが微妙に速い。
自分にとってメリットの多い方使えば?
0225\r\nが逆02/07/22 11:28ID:???
>>224
$hoge =~ s/\r\n|\r|\n/<br>/g;
022622102/07/22 11:34ID:???
ありがとうごぜいました。
022721902/07/22 13:23ID:???
>>220
そうですか、
/bbsで終わっていたアドレスなんですが
場合によっては付けられるんですね、有り難うございました。
0228nobodyさん02/07/22 15:59ID:???
掲示板らしきものを自分で作っているのすが、
log.txtにデータを保存しています。
で、log.txtのパーミッションは666です。
よくCGI配布サイトでログファイルは666にしろと書いてあるのでそのまま真似ました。
ファイルの書き込みは成功しました。
ファイルをFTPでダウンロードして確認するとちゃんとデータがあります。
だけど、ブラウザで直接log.txtを見るとまる見えになっていました。
log.txtには当然パスワードとか大切な情報もあるので自分以外の第三者には見られたくありません。
パーミッションがなんかいけないのかと思い、622にしてみました。
するとブラウザでは403エラーが出て見えなくなりました。
ファイルの書き込みテストをしても正常に動作しました。
これでいいんでしょうか。何か間違っているとこがあれば教えてください。
0229nobodyさん02/07/22 16:24ID:???
ブラウザからアクセスできない場所に置く。
これ、最低限の常識。
0230nobodyさん02/07/22 16:28ID:???
>>228
ファイル名をlog.cgiにする。
023122802/07/23 09:59ID:???
えと、あの、パーミッションの設定はどうですか?ダメですか?
0232nobodyさん02/07/23 10:02ID:???
>>231
サーバによるけどnobodyから見えなくすればcgi(を実行する権限)からも見えなくなる。
0233nobodyさん02/07/23 10:49ID:???
>229
プロバ鯖だとそれができない場合もあるだろ。
そうしたくてもできないとか。
0234nobodyさん02/07/23 11:05ID:???
<form action="./aaa.cgi" method="post">

<input type="radio" name="check" value="1"></input>
<input type="radio" name="check" value="2"></input>

<input type="button" name="mode" value=""></input>   #削除モードに行くボタンにしたい
<input type="button" name="mode" value=""></input>   #修正モードに行くボタンにしたい

</form>
ラジオボタンを選んでもらって実行する対象を選びます。
次に対象を削除するか修正するかのモードを選んで次の画面へ進みます。
下のモードを選ぶ部分のボタンをどうすればいいかわかりません。
<button type="submit" name="mode" value="sakuzyo">削除</button>
<button type="submit" name="mode" value="syuusei">修正</button>

というのを試したんですけど、<button>タグに囲まれた「修正」という値が返ってきてしまいました。
削除ボタンを教えても修正が入っていました。
0235 02/07/23 12:11ID:???
>>231
622とはまた変わったのにしたな。
読み書きともCGIからなら600にできるように直したら?
0236nobodyさん02/07/23 12:22ID:HNBPTziw
SSIからCGIを呼び出すときにデータをつけるとうまくいきません。

たとえば
<!--#exec cmd="./cgi-bin/read.cgi?hoge"-->
だと何もかえってこない(多分CGIが実行されない)

また
<!--#exec cgi="./cgi-bin/read.cgi?hoge"-->
だと[an error occurred while processing this directive]に
なります。

ちなみにCGI単体ではうまく動いています。
もちろんSSIのときは"Content-type: text/html\n\n"をけしてます。

また、データを与えないタイプのCGIは上の方法(cmd=)でうまくいきます。

SSIからCGIにデータをあたえて呼び出すのって無理なんですか?
0237.02/07/23 12:29ID:???
>>234
返ってくる値は「修正」ではなく「syuusei」でしょ?
nameが同じだから後に書いてあるほうが有効になってるだけ。
別々の名前にすればいい。
023823402/07/23 12:42ID:???
>>237
いえ、それが漢字の「修正」が入っているのです。
確かめるとわかると思うのですが、nameを別のにしたら
あとでパラメーター受け取る時modeで読めなくなってしまいますよ。
0239nobodyさん02/07/23 12:51ID:HNBPTziw
<input type="submit" name="mode" value="削除">
<input type="submit" name="mode" value="修正">
にすれば
mode="削除"とmode="修正"がはいるよ

buttonはべつに押したとき値が入るってわけでもなかった気がするな。

どうしてもsyuuseiがいいなら知らん。
0240nobodyさん02/07/23 13:13ID:YKQaMhWj
>>234
<input type="submit" name="del" value="削除">
<input type="submit" name="edit" value="修正">

でdelがdefinedなら削除、editがdefinedなら修正でいいんじゃないの?
0241 02/07/23 14:04ID:???
>>238
mode一つで両方処理させようとするならnameは同じで
valueを別々に。>>239みたいに。
別ルーチンなら>>240みたいに。
024223402/07/23 16:40ID:???
239のやり方で出来ました。
formの中にsubmitが二つあるのに違和感があったのと、
submitのvalueの値がそのままパラメータになるのに気づきませんでした。
ありがとうございました。
0243nobodyさん02/07/23 16:56ID:???
>>236
<!--#exec cmd="./cgi-bin/read.cgi hoge"-->
試してみるなり。
0244nobodyさん02/07/24 16:09ID:???
#!/usr/bin/perl
$|=1;
print <<_HEADER_;
HTTP/1.0 200 OK
Server: NPH-Script
Connection: close
Content-Type: text/html

_HEADER_
$count=0;
while(1) {
sleep(1);
$count++;
print("$count<hr>\n");
}

こんなスクリプト書いて実験してるんだけどNN4.x/Mozilla/NN6/Operaでは
予想通りに約1秒ずつカウントしてくれるんだけどIEだと何も出ないんです。
何が悪いのか教えてください。
0245nobodyさん02/07/24 18:09ID:F9mOipAg
板違いだったらすみません。
自分の利用しているプロバイダのサーバにCGIを置き、
テスト書き込み等動作確認をしました。
その際のテスト書き込みを消したいと思うのですが、
記事を削除するしかないでしょうか?
削除しても記事に削除されたものを含んだ通し番号がついているので、
テスト書き込みをする前の何も書き込みのない状態に戻したいのですが…。
どこかのサイトでファイルを再度アップロードすればいいというような文章を
読んだ気がしたのでプロバイダにやってもらったのですが、消えませんでした。
私が使うCGIはKENTさんのCGIを改造したものをとあるサイトから
ダウンロードしたもので、もともとのスクリプトをテンプレート対応にするため
複数のファイルに分けています。
現在プロバイダにはそのCGIを動かすための2つのファイルを
アップロードしていて、その2つともを再度アップロードしてもらったのですが、
それではだめなのでしょうか?
質問の書き方が悪かったらすみません。
0246nobodyさん02/07/24 18:10ID:???
>>245
バカなんだから自分でできる以上のことはしない。
024724502/07/25 03:23ID:sjq0OBfO
>>246さん
すみません、確かにバカでした…。
CGIの根本がまだ判っていないので…言い訳ですけどね。
>>246さんのレスがちょっと悔しかったので(w それ以上のことがしたくなり、
何とかテスト書き込みをすべて消すことが出来ました(勿論記事削除ではないですよ)。
お世話になりました〜。
0248nobodyさん02/07/25 05:30ID:???
>>244
想像だけど、標準出力閉じないと
セッション貼りっぱなしになるんじゃ無いの?
他のブラウザで上手く行くのが凄いと思う
0249nobodyさん02/07/25 06:31ID:???
>>248
>標準出力閉じないと
閉じていいのか?あれ。
0250nobodyさん02/07/25 10:48ID:???
俺はさっさとclose(STDOUT);してから重い処理してる。
0251nobodyさん02/07/25 11:18ID:???
掲示板を自分で作成しています。

投稿データの削除処理についてなんですけど、データは一個ずつ1行に入っています。
で、削除する対象を判別した後は、data.txtからdata2.txtに1行づつコピーしていって
削除する対象の行になったらその時だけ飛ばして、最後の行まで到達する。
で、data.txtを削除。data2.txtをdata.txtにリネーム。
このやり方しか知らないのですがこれでもいいですか?
他にやり方ありますか?
0252nobodyさん02/07/25 11:25ID:???
>>244
IEではNPHスクリプトはサポートしてないはず。
今はどうだか知らんけど多分今でも無理。
0253nobodyさん02/07/25 11:30ID:???
>>244
サーバサイドはそれで問題無い、それはクライアントの癖だな
多分IEのバッファが効いてる
>>248
ちょっと違うんじゃ無い? 要は少しずつ転送したいだけだと思う
>>252
意味不明、そんなブラウザは無い
0254nobodyさん02/07/25 11:31ID:???
>>251 
それで良い
025525202/07/25 13:36ID:???
>>253
すまん、完全に間違ったまま覚えてた。
Pragma: no-cacheでIEでもいけた。
0256nobodyさん02/07/25 14:01ID:???
と思ったらno-cacheだけじゃダメか。
2回目からはいいけど初回実行はやっぱりバッファリング
されてる感じ
0257nobodyさん02/07/25 14:08ID:???
ズガーン!!

そもそもcache関係ないじゃん。
さっきから連続で醜態晒してるな >俺

もういい!寝る!
0258nobodyさん02/07/25 14:40ID:???
$hoge = "あいうえお";
$hoge =~ tr/あ-ん/ア-ン/;
print "$hoge";
これでひらがなをカタカナにする事可能ですか?
0259nobodyさん02/07/25 14:43ID:???
Jperlじゃなけりゃこうしませう。

$hoge=~ s/あいうえお/アイウエオ/;
0260nobodyさん02/07/25 14:57ID:???
あいうえお の時は大丈夫ですけど。
他のひらがなが入った時はどうするんですか?
0261nobodyさん02/07/25 14:59ID:???
>>260
あらかじめひらがなのパターンがわかっていればその分だけ用意すればいい。

環境は?
0262nobodyさん02/07/25 15:01ID:???
あらかじめわからないので、ひらがなは全てカタカナへ というのが欲しいのです。
環境ってwin2000とかの事ですか?
perlでやってます。
0263nobodyさん02/07/25 15:07ID:FEL1JQfu
http://js-web.cside.com/index.html
0264nobodyさん02/07/25 15:15ID:???
ひらがなをカタカナに変換するときはJperlなら
tr/ぁ-ん/ァ-ン/;
だから、これのSJISコードをサブスティチュートで置換すればいいと思う。
0265nobodyさん02/07/25 15:17ID:oLz9j3NE
>>264
その方法を聞いてるんだがね
0266nobodyさん02/07/25 15:18ID:???
>>258
あいうえお → ΒΔΖΘΚ
こうなった(Linux)
0267nobodyさん02/07/25 15:23ID:???
やってみたけどチョット後半も文字がズレるね。

s/\x82([\x9f-\xf1])/"\x83".chr(ord($1)-95)/ge;
0268nobodyさん02/07/25 16:02ID:???
不可能なんでしょうか。
0269 ◆JAPH9PWA 02/07/25 16:09ID:???
Jcode.pm使ってください。

use Jcode;
my $s = Jcode->new("てきとー")->tr('あ-ん' => 'ア-ン')->sjis();
0270nobodyさん02/07/25 16:18ID:???
なんかJcode.pmが無いみたいなエラーが出たんですけど。
0271nobodyさん02/07/25 16:23ID:???
入れてる?
0272ハニホ・ヘニハ02/07/25 16:23ID:???
いっとく?
0273nobodyさん02/07/25 16:23ID:???
どこに?
0274nobodyさん02/07/25 16:29ID:???
$hoge = "かきくけこ";
use Jcode.pm;
my $hoge = Jcode->new("てきとー")->tr('あ-ん' => 'ア-ン')->sjis();
print "$hoge";
----------------------
Internal Server Error

Jcode.pmというのをダウンロードしてcgiと同じディレクトリに置きましたが・・・。
0275ハニホ・ヘニハ02/07/25 16:36ID:???
>>274
病院いっとく?
0276nobodyさん02/07/25 16:46ID:???
なんでだろなんでだろな〜〜〜んでだろ〜〜〜♪
jcodeをuseしないでtr〜〜♪
0277nobodyさん02/07/25 16:58ID:???
何がだめか教えてください。
0278nobodyさん02/07/25 17:00ID:???
@INC
0279nobodyさん02/07/25 17:05ID:???
エラーもREADMEも読まないならplにしとき
それでも駄目かも知れないけど
0280ハニホ・ヘニハ02/07/25 17:20ID:???
>>267はやっとうまく書けたよ。
0281nobodyさん02/07/25 19:05ID:???
どうできましたか?御願いします教えて下さい。
0282nobodyさん02/07/25 19:53ID:???
CGIに適したPerl以外の言語は何?Ruby?
0283nobodyさん02/07/25 20:05ID:???
C
0284nobodyさん02/07/25 20:22ID:???
>>283
まじですか?
0285nobodyさん02/07/25 21:05ID:???
>>284
C++とかJavaとかもいいな。

PHPはなんか中途半端。
構文がしっかりしてる文ちょっとがっかり。
0286nobodyさん02/07/26 00:54ID:L9BP6kAT
Apacheを使いたいのです。http://127.0.0.1/をブラウザで開いて
「インストールがこの計算機で無事に終了したことを意味します。」は見れました。
また、ルートフォルダにあるhtmlファイルも開くことは出来ました。

が、CGIファイルを起動すると
Internal Server Errorが表示され、最後の行には Apache/1.3.14 Server at localhost Port 80と表示されます。
何が原因なんでしょか?(win meです)
0287nobodyさん02/07/26 01:03ID:???
>286
ActivePerlはインストールした?
0288nobodyさん02/07/26 01:04ID:???
>286
ttp://tohoho.wakusei.ne.jp/wwwxx048.htm
ここ見て勉強しとけ。
028928602/07/26 01:17ID:L9BP6kAT
>>287
しました。
>>288
そこに書いている設定は一通りしてみました。
が、だめでした。一度アンインストしてやり直してみても同じでした。
0290nobodyさん02/07/26 01:21ID:???
>289
じゃあ、CGIのソースを確認しろ。
HellowWorld!試せ。
0291nobodyさん02/07/26 01:23ID:???
すみません。CGI書けないんですがどうすればいいんですか?


ってオチな気がする・・・。
0292nobodyさん02/07/26 02:04ID:???
>>291
conf/httpd.confの位置ってわかる?
それ設定したりしないと無理。
0293nobodyさん02/07/26 05:06ID:???
言語はPerlか。
Perlのパスが間違っているんじゃねーの?
0294nobodyさん02/07/26 07:31ID:???
>>293
ちゃんと/usr/local/bin/perlにしています。
0295nobodyさん02/07/26 08:50ID:???
>>294
本当にそこにインストールしたんだろうな?
ところで、Apache1.3.14は古すぎ
0296nobodyさん02/07/26 08:53ID:???
最低限必要なヘッダーを出力していないとか。
Content-Typeとかね。
0297nobodyさん02/07/26 09:00ID:???
>>294
WinMEでApacheだったら
C:\Perlのパス\perl
じゃないかな。
0298nobodyさん02/07/26 10:29ID:???
#!C:/Perl/bin/perl
0299nobodyさん02/07/26 10:35ID:Ppnf9uEO
#!C:/Perl/bin/perl

# ライブラリ
require 'cgi-lib.pl';

# デコードサブルーチン
&ReadParse(*form);

# ライブラリ
require 'jcode.pl';

# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');

# 連想配列から値だけを取り出し、区切りのハイフンを追加
# HTMLタグと衝突する記号などを変換
$name = $form{'name'};

# -----ここから出力 -----
print "Content-type:text/html\n\n";

print << "END_OF_HTML";

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
$name
<BODY>
</BODY>
</HTML>

END_OF_HTML

上のエラー出るんだけどどこか間違ってる?
0300nobodyさん02/07/26 10:48ID:???
Can't find string terminator "END_OF_HTML" anywhere before EOF at pl.txt line 22
0301nobodyさん02/07/26 10:54ID:Ppnf9uEO
#!C:/Perl/bin/perl

# ライブラリ
require 'cgi-lib.pl';

# デコードサブルーチン
&ReadParse(*form);

# ライブラリ
require 'jcode.pl';

# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');

# 連想配列から値だけを取り出し、区切りのハイフンを追加
# HTMLタグと衝突する記号などを変換
$name = $form{'name'};

# -----ここから出力 -----
print "Content-type:text/html\n\n";

print <<END;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>

<BODY>
$name
</BODY>
</HTML>

END
[EOF]

またまたエラー
■ このスレッドは過去ログ倉庫に格納されています