トップページ⇒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
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]

またまたエラー
0302nobodyさん02/07/26 11:00ID:???
Useless use of single ref constructor in void context at line 36.

syntax OK
0303nobodyさん02/07/26 11:03ID:???
cgi-lib.plとjcode.plはちゃんとありますか
0304ハニホ・ヘニハ02/07/26 14:28ID:???
>>301
きみも病院いっとく?
0305nobodyさん02/07/26 16:04ID:owWjrwta
お前等↓ココ逝っとけ!
http://love.2ch.net/test/r.i/pure/1027606635
スレタイに藁タ!
0306nobodyさん02/07/26 16:58ID:???
>>305
全然藁えなかったけど、どこで藁たの?
0307nobodyさん02/07/26 17:26ID:???
スレ違いorガイシュツだったらスミマセン

こんど携帯対応の掲示板を作ることになったのですが、
このタイプの掲示板ってPCか携帯かで処理を分けるのですよね??
それはどのように判別するのですか?
また、携帯対応掲示板を作る上での注意点などありますか?
030830702/07/26 17:28ID:JyrdDHk3
sageちゃったのでageます・・・スミマセン・・・
0309nobodyさん02/07/26 17:33ID:???
>>307
$ENV{"HTTP_USER_AGENT"}
ただし、どんな場合でもすでにあるものを見た方がはやい。
「携帯 対応 掲示板 CGI」で検索すれ。
0310nobodyさん02/07/26 17:45ID:???
>>307
CGIぽん行ってみ
031130702/07/26 18:02ID:JyrdDHk3
>>309-310
素早いレスありがとうございました!
”携帯対応無料BBS!”なんてのはいっぱい見つかったけど、
肝心の中身がみれないしなぁ・・・と思っていたら、
検索キーワードに”CGI”を付ければいいわけですよね
ああ、漏れって逝ってよしです・・・
早速またググってきます。ありがとうございました
0312nobodyさん02/07/26 23:57ID:???
print "Location: http://xxx.yyy.zzz/\n"; はどこに書けばいいの?
print "Content-type: text/html\n\n";の変わりに書くとページを開いた瞬間に移動し、
cgiの最後に記述すると、移動しないです。
掲示板なんですが、別ページでフォーム記入し、送信すると書き込みのページを表示したいのです。
0313nobodyさん02/07/27 00:14ID:???
>>312
ヘッダーについて少し勉強して
0314nobodyさん02/07/27 00:42ID:???
>>312
複数のヘッダーは同時に使えない。
そういう動作は不可能。
0315nobodyさん02/07/27 01:37ID:???
板違いなら済みません。
レンタル鯖で動いていたCGIを自前の鯖で動かすべく赤帽で鯖組んでみました。
すると405エラーが出てきてどこをどうすればいいやら途方に暮れてます。
The requested method POST is not allowed for the URL /form/form2mail.cgi.
っていわれてるんですけど、どこを見ればいいでしょうか?Apache/1.3.22 です。
教えて君ですまそ
0316nobodyさん02/07/27 01:51ID:???
>>315
405エラーというのは、POSTでのリクエスト方法が許可されていないということ。
httpd.confの設定を変えれば?
0317☆02/07/27 04:05ID:QFoQxGUe
http://www.e-chene.com/ace/333333/
0318nobodyさん02/07/27 07:45ID:QHfRaVBX
CGIでmp3データを出力してブラウザでダウンロードさせる処理を書いたんですが、IEだと
ダウンロードのダイアログが開かずに再生をはじめてしまいます。
Contents-Typeはapplication/octet-streamにしています
出力するファイルの拡張子を.binなどにすると、ちゃんとダウンロードのダイアログが開きます。
サーバ側の設定だけで拡張子をmp3のままダウンロードをさせたいんですが、どうすればいいのでしょうか。

0319nobodyさん02/07/27 08:52ID:???
>>318
IEは拡張子を優先するからサーバー側の設定では無理。
0320nobodyさん02/07/27 09:11ID:???
>>319
いや、拡張子すら無視するぞ。
0321nobodyさん02/07/27 09:13ID:???
IEの挙動。
MIME/拡張子から判断ではなく、ファイルの先頭を見て自分で勝手に判断する。

GIF89a が最初にかかれているテキスト文ですら、GIFと誤認する。
0322nobodyさん02/07/27 10:08ID:???
>>319-321
レスありがとうございます。
やはりダメですか‥「右クリック>ファイルに保存」をしてもらうしかないんですね。



032331502/07/27 10:11ID:???
>>316

httpd.confを見直してAddHandler cgi-script .cgi pl のコメントを解除したら動くよう
になりました。ありがとうございました。
0324nobodyさん02/07/27 20:45ID:iu2+Su0i
fflogという解析ををずっと使っているのですが、
このCGIにパスワードをつけたいと思っています。
どうすればいいでしょうか?
スレ違いでしたらすみません。

ttp://www.gem.hi-ho.ne.jp/fortunefield/cgi/fflog.html

0325nobodyさん02/07/27 21:00ID:???
>324
どうぞ。

ttp://pc.2ch.net/test/read.cgi/php/1012839651/
スクリプト改造工房 Part4
032632402/07/27 21:15ID:???
>325さん
誘導ありがとうございます。
行ってみます。
0327nobodyさん02/07/27 22:07ID:k7snFjtS
質問!
exit はプロセスを終了する関数とのことですが、web用のcgiでしか
プログラム作成経験していない僕には、いまいち感覚的に、何が
どう終了するのかわかりません。

web用のcgi専門なので、今ははだいたい、ブラウザに画面を出力する前に
いろいろ処理して、表示が終わったところで exit という風にしか使っていません。

だからほとんどHTMLフッター書き出しようのサブルーチンの最後ぐらいにしか
僕のプログラムにはexitってでてこないんですが。別に問題ない?
0328 ◆JAPH9PWA 02/07/27 22:18ID:???
何がどう、といわれても…。exit()を呼び出した時点でプログラムが終了する、としか。

例えばこんな感じで。
代わりにdieで済ませることも多いけどね。
#!perl
use Getopt::Std;
our $opt_h;
getopts 'h';
if($opt_h)
{
print <<HELP;
$0 [-h]
-h ヘルプを印字して終了する

... その他、簡単な説明
HELP
exit;
}
# いろいろと処理…
__END__
ちなみに、使用しなくても全然問題ないので、無理して使う必要は無いです。
0329nobodyさん02/07/28 03:52ID:W8D+zAzJ
お絵かきBBSとして、「お絵かきしぃ掲示板 PaintBBS」を設置してみたのですが、
ttp://www.gt.sakura.ne.jp/~ocosama/garakuta/soft/paintbbs/pbbs.html
どうも文字サイズが小さくならないんです。
http://maebari.net/oekei/bbsnote.cgi
この程度まで全ての文字を小さくしたいのですが、
どうすればできるんでしょうか?
CGIの設定ページには文字サイズの設定がないし、試しに「oekaki.cgi」の中の
FONT SIZEをすべて1にしてみましたが、全く変化がありませんでした。

どなたか教えてください。お願いします。
033032902/07/28 03:52ID:???
>>329
あ、「Web制作板」の
☆ Webサイト制作初心者用スレッドver28 ☆
http://pc3.2ch.net/test/read.cgi/hp/1027428903/
からの誘導です。
033132902/07/28 03:57ID:???
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/
ってのがありました。
焦りすぎてこっちで質問してしまいましたが、あっちで質問してきます。
すみませんでした。
0332nobodyさん02/07/28 17:05ID:Q5YYp1Uw
SSIがどうしてもローカルでテストできません。
Win2000proのIIS5.0を使ってるんですが、

SSIを使った.shtmlファイルを出そうとすると
「CMD のオプションは #EXEC の呼び出しに対して使用可能になっていません」
と出てしまいます。

IISの設定は、
.shtmlと.shtmと.stmに
「C:\WINNT\System32\inetsrv\ssinc.dll」
を「GET,POST」に制限した動詞で設定してあります(初期設定のままです)

どうすればいいでしょうか?
0333nobodyさん02/07/28 19:58ID:???
スレ違いだと思いますが……。
0334nobodyさん02/07/29 02:17ID:???
>1
cgiですか?
■ このスレッドは過去ログ倉庫に格納されています