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

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

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/12/26 10:51ID:???
■過去ログ
 Part 3 http://pc.2ch.net/test/read.cgi/php/988727833/l50
 Part 4 http://pc.2ch.net/test/read.cgi/php/1000804655/l50

その他参考になるスレッドを >>2 に纏めたので、十分に調べた上で質問して下さい。
0694買物カゴ02/02/17 14:48ID:???
厨でスミマセン。
行頭を下げて、投稿する方法がわかりません。
あきらめました。とほほ。
ご迷惑をおかけしました。
0695名無しさん@お腹いっぱい。02/02/17 15:07ID:???
著作権的に問題ないのか?
市販の書籍のコード晒すの。
0696名無しさん@お腹いっぱい。02/02/17 18:57ID:???
配列要素の参照に@…?まさかッ!Perl6のコードかッ!
0697名無しさん@お腹いっぱい。02/02/18 18:17ID:???
>>696
偶にいるんだよね、こーいうことしちゃう奴。
んでもスライス扱いになるから、意図した動きになるみたいよ。
だから、こーいう書き方したいなら、

($scalar) = @list[1];

とかって書いた方が気持ちよいけど。
0698名無しさん@お腹いっぱい。02/02/19 04:59ID:???
>>692
そのソースだと,これくらいしかわからなかった。
@kazuを処理して, %datareg1と %datareg2に結果を入れてる。
そのあとクッキーを読んで,%data1と %data2に結果を入れてる。
0699名無しさん@お腹いっぱい。02/02/19 11:49ID:h6Vj/zlt
改行を含んだ変数($tegami)があるんですが、
この変数を1行毎に処理したいのですがどうしたらいいのでしょうか?
while とか foeach とかでやろうと思っているのですが分かりません
0700名無しさん@お腹いっぱい。02/02/19 11:51ID:???
>>699
while($data ne "")
{
$data =~ s/(.*?)\n//;
push(@data,$1);
}
0701名無しさん@お腹いっぱい。02/02/19 11:52ID:???
>>700
ごめん。

$data -> $tegamiで。
0702名無しさん@お腹いっぱい。02/02/19 12:21ID:???
>>700-701
速レスありがとうございました!
無限ループさせてしまっていました、、、
助かりました
0703名無しさん@お腹いっぱい。02/02/19 12:34ID:???
>>700
役に立ったかな?

$data =~ s/^(.*?)\n//;

の方がより良いかも。
0704名無しさん@お腹いっぱい。02/02/19 12:58ID:Ls+q3KGP
foreach ($tegami =~ /([^\n]*?\n)/g) {
  chomp;
$_ ...
}
とか
0705名無しさん@お腹いっぱい。02/02/19 14:59ID:dKbpdQEs
A子さん   はじめまして
B子さん   どうも
A子さん   どうも

こんな感じでログファイルに保存してあったとして
B子さんの発言のみをログファイルから読み込んで
表示するにはどのように記載すればよいのでしょうか?
0706Perl勉強中02/02/19 15:13ID:???
open(OUT,"$logfile");
while(<OUT>){
@log=split/\t/;
if ($log[0]=B子さん){
print @log;
last;
}
}

かな?

0707名無しさん@お腹いっぱい。02/02/19 15:16ID:???
>706
それだと、if文のところで、$log[0]がすべてB子さんに書き変わる。
0708名無しさん@お腹いっぱい。02/02/19 15:18ID:???
>706
そして、それだと、B子さんが一回でてくるとそこで終了してしまう。
0709名無しさん@お腹いっぱい。02/02/19 15:19ID:???
>706
さらに、openしたOUTはいつクローズしてもらえるかとうずうずしている。
0710Perl勉強中02/02/19 15:21ID:???
あれ?そうですか?
じゃぁ
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0]=B子さん){
print @hoge;
exit
}
}
でどうですか?
0711Perl勉強中02/02/19 15:22ID:???
B子さんが一つ以上あるなら
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0]=B子さん){
print "@hoge\n";
}
}

0712名無しさん@お腹いっぱい。02/02/19 15:24ID:???
>710
だから、そのif文だと
もし($hoge[0]にB子さんを代入できたら){@hogeを出力して実行終了}
だろ?
@hoge[0]にB子さんを代入することを阻害する要因が何一つこれっぽっちもない以上
一行目の配列で終了だよ。
0713名無しさん@お腹いっぱい。02/02/19 15:25ID:???
>711
いつ気付くんだろ・・・・
0714Perl勉強中02/02/19 15:26ID:???
B子さんが一つ以上あるなら
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0] eq B子さん){
print "@hoge\n";
}
}

こうか?
0715名無しさん@お腹いっぱい。02/02/19 15:26ID:???
>714
そうだ
0716名無しさん@お腹いっぱい。02/02/19 15:27ID:???
「closeしろ」の意味を取り違えてる、とか
B子さんをクォートしなくても良いンか、とか。
0717Perl勉強中02/02/19 15:28ID:???
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0] == "B子さん"){
print "@hoge\n";
}
}
これでも良し?
0718名無しさん@お腹いっぱい。02/02/19 15:32ID:???
んで、俺ならこうする。

open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file) {
@hoge = split(/\t/,$_);
if ($hoge[0] =~ /B子さん/) { print $_; }
}
0719名無しさん@お腹いっぱい。02/02/19 15:33ID:???
>>717
文字にはeqじゃないの? ==でどうなるかわからんけど。
foreach内単に

print if (/^B子さん/);

ではダメなのだろうか?

OUTって名前が気持ち悪いのは俺だけ?
0720名無しさん@お腹いっぱい。02/02/19 15:33ID:???
>717
それだとどうかしらん。
0721名無しさん@お腹いっぱい。02/02/19 15:35ID:???
>719 
ぜんぜんおっけーっしょ?
0722名無しさん@お腹いっぱい。02/02/19 15:43ID:???
そういやなんでOUTなんだ?普通INとかそれ系だろ。
0723名無しさん@お腹いっぱい。02/02/19 15:44ID:???
open IN, "<$logfile" or die;
while(<IN>){
print if /^B子さん\t/;
}
close IN;
072470502/02/19 15:51ID:???
>>706-723
こんない沢山のレスありがとうございました。
参考にさせて頂きます。
072570502/02/19 15:51ID:???
こんない×
こんなに○
すいません間違えました。
072670502/02/19 16:01ID:???
度々すみません。
追加の質問で
B子さんの名前の場所と
コメントの場所を調整するにはどうすればいいのでしょうか?

B子
どうも

こんな感じです。
0727Perl勉強中02/02/19 16:23ID:???
懲りずに挑戦
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0] eq "B子さん"){
print "$hoge[0]<br>$hoge[1]<br>";
}
}
又は
open(OUT,"$logfile");
@file=<OUT>;
close (OUT);
foreach(@file){
@hoge=split/\t/;
if ($hoge[0] eq "B子さん"){
@hoge=~s/\t/<br>/g;
print "@hoge<br>";
}
}

でどうでしょ?
0728名無しさん@お腹いっぱい。02/02/19 16:45ID:???
>>727
脳内で完結しないで試してから書き込むように。
#!perl
open IN, "<$logfile" or die;
while(<IN>){
if(/^B子さん\t/){
s/\t/<br>\n/;
print;
}
}
close IN;
0729名無しさん@お腹いっぱい。02/02/19 17:05ID:???
>>728
s/^(B子さん)\t/\1<br>\n/;
0730名無しさん@お腹いっぱい。02/02/19 17:08ID:???
s/B子さん/B子タンハァハァ(;´Д`)/eg;
0731名無しさん@お腹いっぱい。02/02/19 17:58ID:???
>>730 コンパイルエラーやんけ
0732名無しさん@お腹いっぱい。02/02/19 17:59ID:???
>>729
その場合は\1じゃなく$1奨励な。
0733名無しさん@お腹いっぱい。02/02/19 18:04ID:???
>>732
あ、ほんとだ。
外で\でも通っちゃうのか
0734名無しさん@お腹いっぱい。02/02/19 20:42ID:AWkZQcnE
もしよろしければ教えてください。

文字列を保存ファイルから読み出して、1文字ずつに区切りたいのです。split(//,$aiueo);
半角文字(1とかa)は成功するのですが、全角文字(1とかA)が保存されているとその部分だけ文字化けしてしまいます。
どのようにすればうまくいくのでしょうか??。
0735名無しさん@お腹いっぱい。02/02/19 21:15ID:???
>>734
だって全角文字って2〜3バイトだし(EUC,SJIS)。
JPerl使うって言ったら怒られるだろうなぁ・・・。
0736名無しさん@お腹いっぱい。02/02/20 00:42ID:???
なんかマルチバイト関数とかってなかった?
0737名無しさん@お腹いっぱい。02/02/20 01:11ID:WIqY+mg7
>>734
Perlメモにそのままのがあったよ。
www.din.or.jp/~ohzaki/perl.htm#JP_Split

それともUTF-8使ってみるとか。

#utf8プラグマを使ってみるてすと。
#このソースの文字コードをUTF-8にすること。
use strict;
use 5.6.0;
use utf8;
use Data::Dumper;

my $str = "あいうえおabcde";
my @strs = split "" , $str;

print Dumper @strs;

結果
$VAR1 = 'あ';
$VAR2 = 'い';
$VAR3 = 'う';
$VAR4 = 'え';
$VAR5 = 'お';
$VAR6 = 'a';
$VAR7 = 'b';
$VAR8 = 'c';
$VAR9 = 'd';
$VAR10 = 'e';

とりあえずは成功。でもほかのファイルから文字列を取り出して処理する場合はどうなるか・・・。
0738名無しさん@お腹いっぱい。02/02/20 02:34ID:???
> 734
環境は? 文字コードは? それがないことには答えようがないYO!
0739名無しさん@お腹いっぱい。02/02/20 02:44ID:???
質問すみません。

投票ボタンを押すとカウントが1増えると言う感じの
CGIを作るにはどう記載をするにはどうすればよいのでしょうか?

1番簡単な記載の仕方を教えていただきたいです。
0740名無しさん@お腹いっぱい。02/02/20 07:59ID:???
>>739
#! /usr/local/bin/perl

open(DATA,"dat");
$count = <DATA>;
close(DATA);

open(DATA,">dat");
print DATA $count++;
close(DATA);

print "CONTENT-TYPE:text/plain\r\n\r\n$count";
0741名無しさん@お腹いっぱい。02/02/20 10:26ID:v5xIpXef
>>738
Perl5です。
jcode.plを使って、EUCに統一しています。

ご迷惑をおかけしてすみません。(初心者)
074273902/02/20 13:25ID:BU/Y+TfU
>>740
740様ご教授ありがとうございます。

宜しければ

フォームの中身が
name=普通
name=簡単

ログファイルの中身が
普通 1
簡単 2

のような形になるような記載の仕方を教えてください。
074373902/02/20 13:28ID:BU/Y+TfU
度々すみません。

ついでに投票率もわかるようにして頂けると
助かります。
0744名無しさん@お腹いっぱい。02/02/20 15:06ID:???
>743
投票率ってなんだよ。対象分母がわからないのに、なんでそんなもんがわかるんだよ。
と、おきまりの煽り文句入れて於いて。
得票率は、全体の件数と選択項目あたりの票とのかねあいだから、
表示ルーチンで逐次計算する必要があるね。
データを集計するルーチンで逐次カウントするか、集計時にあらかじめ、分子と分母
作っておくか選択するわけだね。
0745名無しさん@お腹いっぱい。02/02/20 15:10ID:???
>742
その質問は、Web制作板ずら。

最初から、
<input type=radio name=name value=1>普通<BR>
<input type=radio name=name value=2>簡単<BR>
にしたら?
0746こっちへ逝ってよし02/02/20 15:12ID:q+lY2EG2
http://px.a8.net/svt/ejp?a8mat=BZGKH+96FLIQ+1I6+5Z6WX
↑と↓どっちのサイトがいい??
http://px.a8.net/svt/ejp?a8mat=C17UJ+8D9CVM+A0+1NJRXD
0747名無しさん@お腹いっぱい。02/02/20 15:18ID:???
>746
ブラクラ
074873902/02/20 15:29ID:+agHEvTM
744様,745様
ほんとに単発質問申し訳ございません。
書き込んだ後に気がつきまして対処ができなくどうしようか困っていました。

#! /usr/local/bin/perl

open(DATA,"dat");
$count
074973902/02/20 15:31ID:+agHEvTM
......
のやり方をコピペでためしたらDL状況になってしまいました。
どうすれば動作が可能になるのでしょうか。。。
0750名無しさん@お腹いっぱい。02/02/20 15:35ID:???
>749
シェルから、which perlとして、Perlの在処を調べる。
また、cgiが実行可能かどうかも調べる。
さらに、httpd.confで、perlをexecにしなければいけないかどうかも考える。

大変だね。
075173902/02/20 15:42ID:+agHEvTM
750様
レスありがとうございます。
フォームにしてみたらできました。

しかし、カウントされません。

0752名無しさん@お腹いっぱい。02/02/20 16:22ID:???
ここ見てるかぎりじゃ何もせず他人にコード書かせてるようにしか見えないのだが。
0753名無しさん@お腹いっぱい。02/02/20 16:30ID:???
>752
ソレダ!(◕ฺ∀◕ฺ)
075473902/02/20 16:53ID:???
ほか行きます。
0755名無しさん@お腹いっぱい。02/02/20 21:36ID:mSabJ9Dm
すんません、このアクセス解析なんですが、
ttp://www.din.or.jp/~himura/at-works/access/access.html

@niftyで動かしてる人います?replist.cgi?checkでは全部OKと表示される
んですが、パスワード打って解析結果表示させようとすると500エラーが・・。
main.htmlをmain.plにしたり、homepageディレクトリに置いてみたりと

色々やってみましたが、何度やっても「500 内部サーバーエラー」っス(;´Д`)
パーミッションや転送モードを何度も確認してみましたがダメでした・・。
ちなみにkentさんの「Access Repport」はちゃんと動くので、この改造版の
main.htmlが原因なんでしょうか?サポート掲示板閉鎖してるしもうお手上げッス・・
どなたかご教授ください・・。
0756名無しさん@お腹いっぱい。02/02/20 21:41ID:???
>755
それはきっとあなたの設定ミス。
そうでなければ、バグがあるスクリプトを配布している。
0757名無しさん@お腹いっぱい。02/02/20 22:17ID:ekU1U/e9
携帯用サイトの掲示板を作ってるんですが、
漢字コードは何がいいんですか?
携帯会社によって違うんですか?
0758名無しさん@お腹いっぱい。02/02/20 22:17ID:???
>>757
SJIS。
0759名無しさん@お腹いっぱい。02/02/20 22:19ID:ekU1U/e9
ありがとうございます。常識ですか?
解説サイトご存知でしたら、よろしければお教えください。
0760名無しさん@お腹いっぱい。02/02/20 22:20ID:???
>>759
検索。
076175502/02/20 22:25ID:m8g7w+mg
>>756
ありがとうございます。マジすか・・もう一度確認してみます。
サーバー別の解説みたいなのに@niftyもあるんですが・・niftyじゃ
無理なのかなぁ・・
0762名無しさん@お腹いっぱい。02/02/20 23:21ID:ekU1U/e9
>760
掲示板できました。ありがとうございます。
0763名無しさん@お腹いっぱい。02/02/21 01:09ID:+5zgc0Mz
素朴な疑問なんですが、転送URL(www2.to)を使っていて
さらにアクセス解析をつけてます
普段リファラで引っかかるアドレスは、当然転送URLのアドレスなのですが
たまにリンク元のアドレス(もちろん転送で貼ってもらってる)が引っかかる場合があるのです
もし原因が分かる方がいらっしゃいましたら、
教えていただけないでしょうか…
よろしくお願いします。
076476302/02/21 01:11ID:+5zgc0Mz
あ、ちなみにアクセス解析はレンタルの物とat worksさんのもの
それからTacky's Roomさんの物で同じ結果が出ましたです
0765名無しさん@お腹いっぱい。02/02/21 01:13ID:???
>>763
IEはたまにrefferを取りこぼしたりすることがある。
076676302/02/21 01:30ID:+5zgc0Mz
>765
さっそくありがとうございます。
でも今見てきたところ、そういう風に引っかかってるのが
Netscape 4.〜の方のようなのです
6の場合は普通に転送アドレスで来るようなのですが…
0767あぼーん02/02/21 01:34ID:F4KoQdcT
ホームページでフォームに入力した内容をメールで送るってやつレンタルで使ってるんですけど、たまにいたずらメールが来るんです。
送信元IPはわかるんですけど、送信元のメールアドレスもわかるっていうCGIを無料でレンタルさしてくれるサイトがありましたら教えてもらえませんでしょうか。
0768名無しさん@お腹いっぱい。02/02/21 01:47ID:???
>>767
冷静に考えろ?
お前のメールフォームにはメールアドレス書く欄があるか?
書いてもいないものをどうやって送信するって言うんだい?
0769あぼーん02/02/21 01:51ID:F4KoQdcT
>>768あります。でも嘘かかれたらそれでおしまいなのれす。かかないでわかる方法ないでしょうか?
たとえばメールソフトを間接的に使用するっていうCGIとか
0770名無しさん@お腹いっぱい。02/02/21 01:53ID:???
レンタル探してるなら板違い
0771名無しさん@お腹いっぱい。02/02/21 02:01ID:???
>>769
サーバーサイドで動いてるのにクライアントのメールソフトを制御できるの?
セキュリティホールってやつじゃあ。。。
0772名無しさん@お腹いっぱい。02/02/21 02:03ID:???
>>768
メーラーを使う?それなら簡単。

<form action="mailto:cgiChu@uzaishi.ne.jp">

</form>
0773名無しさん@お腹いっぱい。02/02/21 02:57ID:caqYgqkm
>>771
すくなくともサーバ側でクライアントの環境をいじりたいとか
思う人って他人のプライバシとか全然関係なしって感じが伝わっ
てくるよ。
そこまでe-mailを確認したいのなら、パスワードで入れないように
して、希望者にメールでパスワードをいれるように全体を変更したら
どうよ。
0774ていうか ◆16H8/cmo 02/02/21 04:57ID:IB+Fv5b6
複数ファイルと文字列を同時にアップロードするcgi作りたいんだけど、データをどう切り分けるか悩んでる。
一行ごとにやるのはだるいから、なんか上手い方法ないかな。

教えて〜!!
0775ていうか ◆16H8/cmo 02/02/21 04:57ID:IB+Fv5b6
↑あ、CGI.pmとかは使う気ないからよろしく。
0776名無しさん@お腹いっぱい。02/02/21 04:59ID:???
↑あ、教える気ないからよろしく
0777名無しさん@お腹いっぱい。02/02/21 05:00ID:???
777げっちゅー
0778ていうか ◆16H8/cmo 02/02/21 05:03ID:IB+Fv5b6
↑意味ねーぢゃん。うせろ!


でもナイス突っ込み(w
0779名無しさん@お腹いっぱい。02/02/21 06:11ID:520+fotT
http://www.kankyo.metro.tokyo.jp/cgi-bin/tokyokh/bunpu1/p101.cgi
↑こういうのを作りたいのですが。
データベースの数字と画像の矢印がリンクしていて,「次の時間へ」を押すと、画面が切り替わる。
どんなプログラム言語やソフトを使えば、できますか?
0780名無しさん@お腹いっぱい。02/02/21 09:00ID:???
>>774
よく考えて好きなセパレータ使え。
0781名無しさん@お腹いっぱい。02/02/21 09:01ID:???
>>779
まずはHTMLの勉強だ。クリッカブルマップ。サーバサイドとクライアントサイドがあるからどちらもな。
0782名無しさん@お腹いっぱい。02/02/21 09:05ID:???
>>779
自分でサーバー用意するならなんでもいいけど、
数あるサーバーで動くのはperlだろうな。

ActivePerlと、WinならAnHttpd、あるいは適当なhttpd、
あと、とほほのperl入門を読め。
0783名無しさん@お腹いっぱい。02/02/21 09:15ID:???
>>782
誤爆ですか?
0784名無しさん@お腹いっぱい。02/02/21 14:01ID:???
>780
デリミタ?
0785名無しさん@お腹いっぱい。02/02/21 22:00ID:???
掲示板のスクリプトです。

ローカルのanHTTPdでは、IEでもNNでも正常に動くのですが、
トクトクサーバーにアップすると、NNでは「モジュール違反です」という
表示がでて、オチてしまいます。

IEでは正常です。

どんな原因が考えられますでしょうか。
IEでは全然平気なのですが。

ローカルで動かしてるかぎりはそうはならないのですが。
078678502/02/21 22:01ID:???
あげさせてください。
0787名無しさん@お腹いっぱい。02/02/21 22:02ID:???
>>785
広告込みのHTMLが変過ぎる。とか。
078878502/02/21 22:11ID:P/vFkV3P
>>787
Perlのせいではなかったです。
言われてぴぴんときてjavascript Offにしてみたら動いた…。

ローカルでは動くんだから広告が悪いのかなぁ。

どうもすいませんでした。Javascriptと判ればスレ違いです。
ありがとう。
0789名無しさん@お腹いっぱい。02/02/21 23:22ID:uKcyJ5aS
とあるゲームCGIの説明(?)か何かに、
ログファイルをバイナリデータにしたので処理が速くなった
というような事を書いてあったんですが、
実際にテキストよりもバイナリの方が処理が速いんでしょうか。
0790名無しさん@お腹いっぱい。02/02/21 23:27ID:???
>>789
たとえば3という値を保存するとする。

テキストで3を保存すると6bitかかる。
バイナリで3を保存すると2bitですむ。
(これを言うとintは32bitじゃあとかお叱りを受けそうだけど)

後、コンピュータはバイナリでしか数値計算ができないので、数字のテキスト->バイナリ変換作業が必要になる(Perlは裏でやってくれる)。
0791名無しさん@お腹いっぱい。02/02/21 23:43ID:???
ttp://www.din.or.jp/~himura/at-works/access/access.htmlとか
ttp://dream.lib.net/room/cgi/e_analize.html

この二つはJavaScript有効になってないと解析してくれないんですか?
JavaScriptオフでもログ取ってくれるやつってないんでしょうか?
ちなみにSSIは使えないサーバなんですが・・無理ですか?
kentさんのやつはオフでもリンク元以外は取ってくれるみたいだけど・・
上の二つもそうですか?

Strictなんで<noscript><img〜ともできないっス・・。
0792名無しさん@お腹いっぱい。02/02/21 23:47ID:???
>>791
ログは取れる。reffererが取れないだけ。
Javascriptで生成している部分をHTMLに直接書けばいい。
その代わりreddererはあきらめる。
0793名無しさん@お腹いっぱい。02/02/21 23:52ID:???
>789-790
そういうこととは別に、ログをバイナリハッシュに変えれば、テキストのログよりも
かなり高速化する。
dbm使うっていうのが近似値だけど。
0794名無しさん@お腹いっぱい。02/02/22 00:00ID:???
>>793
質問者でも回答者でもないんだけど、
ログをバイナリハッシュに変えるってどういうこと?
ハッシュのキーをバイナリにして短くするってことなの?
でもハッシュっていうぐらいだから長いキーでも短くなってんだよね、内部的には。

おもしろそうなのでもっと教えて。
■ このスレッドは過去ログ倉庫に格納されています