【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/02/09 00:24ID:s0tpWWxg1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
あとは>>2-10。
0052nobodyさん
03/02/10 04:20ID:???テンポラリファイルを使うのはいかがなものかと。
005350
03/02/10 04:35ID:lunjJQvXSDBMをファイルロックで包む例はよくあるんだけど、
>>52さんの言うように
テンポラリファイルを使う例があまりないみたいなので質問してみたんですが、
どうなんでしょうかね?
ファイルロックが完璧ならばテンポラリファイルを使う必要もないと思うんですが。
0054実は…51==52
03/02/10 05:05ID:???flockが不安定または使えない場合は、
symlinkとかmkdirの擬似的なロックでもいいと思います。
DBM処理系によっては複数のファイルを作成したりしますので、
テンポラリは結構面倒かもしれません。
0055超初心者
03/02/10 11:47ID:MIMhYBnEトータル・今日・昨日をカウントさせたいのですが、
昨日・今日が上手くカウントしてくれないです。
0056超初心者
03/02/10 11:48ID:MIMhYBnEprint "Content-type: text/html\n\n";
$logfile = './1.txt';
$ENV{'TZ'} = "JST-9";
$mday = (localtime(time))[3];
open(IN,"$logfile");
$coall =<IN>;
$cotod =<IN>;
$coyes =<IN>;
$day =<IN>;
close(IN);
chop $coall;
$coall++;
if($mday != $day){
$coyes = $cotod;
$cotod = "0";
$day = $mday;
}
chop $cotod;
$cotod++;
open(OUT,">$logfile");
print OUT "$coall\n";
print OUT "$cotod\n";
print OUT "$coyes\n";
print OUT "$day\n";
close(OUT);
print <<"HTML";
累計$coall人<BR>今日$cotod人<BR>昨日$coyes人
HTML
0057nobodyさん
03/02/10 12:33ID:???改行の扱い方が悪し。
とりあえず下記の変更でも動くけれど、良くないね。全体的に見直すべし。
close(IN);
chop $coall;
chop $cotod;
chop $coyes;
chop $day;
$coall++;
if($mday != $day){
$coyes = $cotod;
$cotod = "0";
$day = $mday;
}
#chop $cotod;
0058超初心者
03/02/10 14:42ID:MIMhYBnE有難う御座いました。勉強になりました。
0059nobodyさん
03/02/10 22:19ID:???>>33
Unrecognized character \x81 と来たときには全角スペースがないか疑え。
(全角スペースはシフトJISで\x81\x40)
0060nobodyさん
03/02/10 22:57ID:0mJjU+k6どうしたらいいですか?
色々試してみたんですがやりかたがわかりません
例えば↓のチャットを、自分独自の
自動更新チャットに作りかえるにはどうしたらいいですか?
http://www.tcup6.com/cgi-localbin/chat8.cgi
(別のところからログファイルだけ更新できるようなイメージ)
0061↓新語
03/02/10 22:59ID:???0062nobodyさん
03/02/10 23:04ID:???0063nobodyさん
03/02/10 23:09ID:???自分のパソコンの中に作った「Web」っていう名前のフォルダですか?
0064nobodyさん
03/02/10 23:15ID:???http://www.google.co.jp/search?q=+Web%83t%83H%83%8B%83_&ie=Shift_JIS&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0066nobodyさん
03/02/10 23:58ID:???トップのページ
http://www16.u-page.so-net.ne.jp/xb4/katsumi/os/windows/webdav/
閲覧するとポートをガンガン叩いてくるんですけど…。
0068nobodyさん
03/02/11 12:23ID:1RQcCB3w掲示板を作っていて、
名前とメール部分のクッキーの設定は上手く行ったんですけど、
URL欄のクッキー情報が上手く保存されません。
調べてみたら、http:のコロンが原因だとかなんとか・・・?
どう対処したら良いのか教えて下さい。。
0069nobodyさん
03/02/11 12:33ID:???0070nobodyさん
03/02/11 12:48ID:???http://www.2ch.netクッキーに
とクッキーに保存するんじゃなくて
www.2ch.net/
とクッキーに保存する
0071nobodyさん
03/02/11 12:58ID:???0072nobodyさん
03/02/11 13:25ID:???0073nobodyさん
03/02/11 13:37ID:???-------------
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
-------------
とあったとして、真ん中の行のみ書き換えるにはどうしたらいいんでしょう?
私のIQでは思いつきません
0074nobodyさん
03/02/11 14:21ID:???こころの眼でみるのです。
0075行頭じゃなくてもソートできるの?
03/02/11 15:22ID:QuXhKMT3の列からなるCSVファイルを読み込んで
2番目以降の列(例えば名前の列)でSortしなおすことはできますか?
もしかして順番変えたテンポラリファイルを作らないとダメですか?
0076nobodyさん
03/02/11 15:27ID:mp4tOM/v$set{top_path} = '../';
のように%setのハッシュにしてるのですが
こういうのって格好悪いですか?
一度全て読み込み、書き換えてから書き戻すしかないね。
>>75
テンポラリファイルなんて使わなくてもできるよ。
データが巨大ならデータベースを使った方がいいと思うけどね。
>>76
格好はどうでもいいけど、
要素名のタイプミスをするとすぐ発見できないのが面倒かもね。
あと、若干だけど効率も悪いかな。
0078nobodyさん
03/02/11 17:04ID:???名前の列でソートするならこんな感じ。
データが多いとちょっと重いかもしれないが。
@hoge = sort { (split(/,/, $a))[1] cmp (split(/,/, $b))[1] } @hoge;
>>76
自分は最近それと似た方法で定数を記述してる。
my %const = {
HOGE => '../',
HUGA => 100
};
こんな感じで。
まあ、確かに効率は悪いけど、見た目がきれいだし、定数だというのが
はっきり分かるから。
0079nobodyさん
03/02/11 18:28ID:???どのバージョンにもつかえるわけないけど、
use constant {
HOGE => ’../’,
HUGA => 100,
};
とか書くのが美しくて速いと思う(インライン化されるから)
0080nobodyたん
03/02/11 18:37ID:???0081nobodyさん
03/02/11 18:43ID:???use constant は便利なんだけど、文字列の中では展開されないよね。
これさえなければもっと積極的に使いたいのだけど。
0082nobodyさん
03/02/11 19:01ID:???open(OUT, "+<aaa.txt");
flock(OUT, 2);
print OUT "略";
close(OUT);
0083nobodyさん
03/02/11 19:39ID:???0085nobodyさん
03/02/11 21:39ID:???use constant PI => 4 * atan2 (1, 1);
print "The value of PI is @{[ PI ]}.\n";
0086nobodyさん
03/02/11 21:53ID:???おお、そんな使い方ができたなんて初めて知ったYO!
今までconstantはコンパイル時に展開されるもんだと思い込んでた。
こんどから積極的に使ってみます。マリガトー
0087nobodyたん
03/02/12 00:00ID:???use constant NOBODY => 774;
は
sub NOBODY { 774 }
ってするのと同じ。(constant.pm 参照)
0088nobodyさん
03/02/12 00:34ID:9lI7mE1F$a = "aaaaaabababanfjfggkrwaafrwnlwa";
例えば$aの中に「a」と言う文字が何回現れるか数えられる関数はありますか?
0090nobodyさん
03/02/12 00:48ID:???0094nobodyさん
03/02/12 06:41ID:???print "The value of PI is @{[ PI ]}.\n";はconstant.pmの
中に書いてあるのをコピペしただけ。まあ、ドキュメントを
読みましょ!って事ッス。何故そうなるか?はperlrefを
見ましょ。これも、constant.pmの中に書いてある(藁
>>92 はその応用形ってことっしょ。
0095nobodyさん
03/02/12 14:43ID:???0096nobodyさん
03/02/12 14:46ID:???0097nobodyさん
03/02/12 18:49ID:60fo1D0F@{[($a,$b,$c)]}[0..2] = @{[(0,3,0)]}[0..2] だと無理なのはなぜですか?
↓みたいな感じです。
DB<10> ($a,$b,$c) = (0,2,0)
DB<11> print "($a,$b,$c)"
(0,2,0)
DB<12> @{[($a,$b,$c)]}[0..2] = @{[(0,3,0)]}[0..2]
DB<13> print "($a,$b,$c)"
(0,2,0)
DB<14> print @{[(0,3,0)]}[0..2]
030
DB<15> print @{[($a,$b,$c)]}[0..2]
020
0098nobodyさん
03/02/12 20:29ID:???print (@{[($a,$b,$c)]}[0..2] = @{[7,8,9]}[0..2]),"\n";
[]演算子は引数のコピーによる配列リファレンスを作るからだよ。
つまり
@{[ $a, $b, $c ]} = (...)
は
my @tmp = ($a, $b, $c);
@tmp = (...);
と同じことになる。
010092
03/02/12 21:34ID:???ありがとん。perlrefに
>Here's a trick for interpolating a subroutine call into a string:
> print "My sub returned @{[mysub(1,2,3)]} that time.\n";
を見つけました。
constant.pmのコードからすると、>>87さんの言うと通りなので、
配列にするのが礼儀正しい方法みたいですね。
0101nobodyさん
03/02/13 02:39ID:???普通に、
print "My sub returned" . mysub(1,2,3) . "that time.\n";
の方がいいと思う
0102nobodyさん
03/02/13 16:37ID:/En01Oe5$moji2 = '110';
〜〜〜〜〜〜〜←ここの部分
$moji1 - $moji2 == 1
という風に文字列を数字に変換するにはどうしたらよいでしょうか?
0103nobodyさん
03/02/13 16:47ID:???carrysun という携帯対応の掲示板(現在公開されていません)を使っています。
最近気づいたのですが、analogの結果を見ると 403エラーがたくさんでています。
access_logを見てみると、該当ディレクトリを GETしていてエラーがでています。
"GET /cgi-bin/csun/ HTTP/1.1" 403 xxx
このようなエラーです。
これがちょっとうざったいので、直したいのですが、csun.cgiを見てもどこで
そんなリクエストを出しているのかが掴めませんでした。
画像とかの指定かなと思ったんですが、何か調べる良い方法はありますでしょうか?
#ちなみにlocalのlinuxでテストできます。
何か簡単なアドバイスでも良いのでよろしくお願いします。
0104nobodyさん
03/02/13 16:52ID:???意味不明
>>403
http://www.google.co.jp/search?q=403+%83G%83%89%81%5B&ie=Shift_JIS&hl=ja&lr=
スレ違い。
0108nobodyさん
03/02/13 16:58ID:???ブラウザが勝手にルートたどったりするんじゃねーかな
関係ないかも知れんが、IEとかだとお気に入りアイコン探しまくってうざい
0110104
03/02/13 17:03ID:???0111nobodyさん
03/02/13 17:13ID:???何もしなくてよい。
$moji1 = '111';
$moji2 = '110';
printf("\$moji1 - \$moji2 = %d\n", $moji1 - $moji2);
0112nobodyさん
03/02/13 17:14ID:???設定ファイル csun2.cgi を見るとサーバのディレクトリの設定は、
$server=qq|http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}|;
これしかありません。
なので、ディレクトリを見に行くことはないはずなんですが...
画像ファイルの設定も
$pc_title_img='';
になってますが、ちゃんと処理してあって、空の場合はテキストのタイトルを
表示するようになっています。
あとは、どんな理由があるのか???
0115nobodyさん
03/02/13 17:25ID:???現在配布していませんが、
http://applejam.cool.ne.jp/
です。
0117nobodyさん
03/02/13 17:37ID:???# 戻り先URLを設定 --------------------------------------------------------------------- #
$pc_home ='../pc/index.html';# パソコン 用
$ez_home ='../ezweb/index.hdml';# EZweb 用
$i_home ='../imode/index.html';# i-Mode 用
$j_home ='../jsky/index.html';# J-SKY 用
$astel_home='../imode/index.html';# ドットi 用
はどうなってる。
0118nobodyさん
03/02/13 17:39ID:???サイトアクセス数(200 OK)の1/4が403エラー
access_logを見ると前後に必ずそのスクリプトの名前が出てくる。
/cgi-bin/csun/csun.cgi 200
/cgi-bin/csun/ 403
/cgi-bin/csun/csun.cgi 200
のような感じです。
同じ掲示板を4つ位使ってますが、どの掲示板でもエラーが出ます。
スクリプトの問題以外だとブラウザから直接ディレクトリを指定する
というのが考えられますが、それ以外に403エラーがでる理由はありますか?
0120nobodyさん
03/02/13 17:43ID:???0121nobodyさん
03/02/13 17:43ID:???0122nobodyさん
03/02/13 17:45ID:???前に調べたのですが、異常はありませんでした。
>>120
これが一番いいかも知れません。ちょっと試してみます。
>>121
すみません。ちょっと意味がわかりません。
0123104
03/02/13 17:46ID:???なるほど。
そういった根拠があれば何も言うことはないっす。
例えばどっかからリンクミスなURLが貼られてしまったとかだと、
バンバンリクエストが来る可能性があるもんで。
0124nobodyさん
03/02/13 17:47ID:???ところで、あんたはどうしたいんだ?
403でなくなればそれでいいのか? /cgi-bin/csunへのアクセスがなくなってほしいわけじゃないのか?
0125nobodyさん
03/02/13 17:50ID:???0126nobodyさん
03/02/13 17:53ID:???すみません、説明不足で。はじめに言うべきだったのかもしれません。
csun.cgiは、掲示板として正常に動いています。
ただ、analogのレポートを見たときに、あまりに403エラーが多いので、
(先ほど書いたようにサイトのアクセスの1/4)なくしたいだけです。
多分、csun.cgiにアクセスするたびにほぼ毎回403エラーが出ていると
思います。
実害が出ているというより、ただうざったいから、というのと色々スクリプト
を見てもわからないので、知的好奇心から原因を知りたくなったから、という
理由からです。
0128nobodyさん
03/02/13 18:06ID:???0129nobodyさん
03/02/13 18:09ID:???どの行がこのGETのリクエストを出しているのかを調べる方法があるのかと思ったの
ですがないですかね?
0130nobodyさん
03/02/13 18:12ID:???アクセスログのリファラでも調べろ。
以上終了。
0131
03/02/14 12:58ID:mtrOCq/2これか?
0132nobodyさん
03/02/14 13:32ID:???access_log の リファラをonにして調べていたところやっとわかりました。
csun2.cgi にて $background ='.'; となっており、
csun.cgi にて
<BODY BGCOLOR="$bgcolor" BACKGROUND="$background" TEXT="$text" LINK="$link
" VLINK="$vlink" ALINK="$alink">
となっていたためでした。
こんなことで本当に申し訳ありませんでした。
色々ありがとうございました。
0133nobodyさん
03/02/14 15:52ID:???0134nobodyさん
03/02/14 17:09ID:aS0shCzvパス付きでも、実行マシンから既にアクセスしていたり(パスワードを入力済み)
実行マシンと同じID/PASSだったりすると特別めんどくさいことはないんでsuga
open FILE,"\\IPアドレスとかマシン名\xxxxx";
で開けますよね。
ただ、上記の条件をみたなさな、単純にパスワードが付いてるマシンの共有フォルダに
アクセスする場合、スクリプト側では、ID/PASSはもちろんしってるんですが
どうすれば開けるんでしょうか?
0136134
03/02/14 19:54ID:aS0shCzvそのヒントから
Win32::NetResource
にたどりつきました。。。ありがとうございます。
0137nobodyさん
03/02/14 21:52ID:nq8/avY5正しいパスワードが入力されたら別のURLにジャンプしたいのですが
どうすればよいのでしょうか?
指定のURLにジャンプできるコマンドとかありますか?
0140nobodyさん
03/02/14 22:31ID:???0141nobodyさん
03/02/14 22:37ID:???0142137
03/02/14 23:33ID:nq8/avY5ですが、Perlのなかに具体的にどのようにlocationを組みこむかが分からないです。
ちなみに、下のHTMLから入力されたものをsample.cgiでチェックして、正しい名前とパスワード
だったら別のページ(仮にwww.sample.ne.jp/ok.htm)にジャンプしたいのです。
<HTML>
<HEAD><TITLE>サンプル</TITLE></HEAD>
<FORM ACTION='http://www.sample.ne.jp/test.cgi' METHOD='POST'>
名前<INPUT TYPE='text' NAME='NameBox' VALUE='' SIZE='50' MAXLENGTH='50'><BR>
パスワード<INPUT TYPE='text' NAME='PassWordBox' VALUE='' SIZE='50' MAXLENGTH='50'><BR>
<INPUT TYPE='submit' NAME='write' VALUE='送信'>
<INPUT TYPE='reset' NAME='cls' VALUE='消去'>
</FORM>
</BODY>
</HTML>
0145nobodyさん
03/02/14 23:53ID:???他スレの皆さんにも迷惑になるので。
HTTP : header location
HTML : meta refresh
JavaScript : location.href
こんなもんでいい?
0146nobodyさん
03/02/14 23:54ID:???print "Location: http://example.com/hoge.html\n";
print "\n";
これをContent-Typeを出してる所と入れ替えてみよう。
それから、これがスレ違いであることを理解しよう。
>>143
HTTPっていうより、CGIの仕様なんだよぅ。
勝手にヘッダーを作り直してくれるという。。
nphスクリプト用:
print "HTTP/1.0 302 Found\n";
print "Location: http://example.com/\n";
print "\n";
0147nobodyさん
03/02/14 23:59ID:???0148137
03/02/15 00:00ID:6NeqGII/で解決できました。
0150nobodyさん
03/02/15 00:54ID:???いまだにPerlと無関係な質問が絶えないんだよな。
まさに厨が厨を呼ぶ厨スパイラル状態。何とかならんのか。
せめて回答する側は、スレ違い質問への無視&誘導を徹底してほしいよ。
0151nobodyさん
03/02/15 01:03ID:???1.perlのコードに関する話題
2.perlのインストールに関する話題
3.モジュール、ライブラリの話題
1はOKとして、2、3は駄目?
■ このスレッドは過去ログ倉庫に格納されています