Perlコーディング初心者質問スレ Part 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0242nobodyさん
2005/08/31(水) 14:56:42ID:???0243nobodyさん
2005/08/31(水) 16:24:59ID:???-----
next if (!$acl{$base_remote_user,$minfo->{'dir'}} &&
!$acl{$base_remote_user,"*"});
-----
という箇所があったのですが、中括弧($acl{})の中の意味が分かりません。
中括弧でかこって中にカンマというのはどういう意味でしょうか?
0244nobodyさん
2005/08/31(水) 16:38:21ID:???多次元配列のエミュレーション用の機能で
$foo{$a,$b,$c}
は
$foo{join($;, $a, $b, $c)}
と同じ。詳しくはperlvar(1)の$;の項などを参照されたい。
0245nobodyさん
2005/08/31(水) 18:22:07ID:???また、逆にコードを文字に戻したりもしたいのです。
0246nobodyさん
2005/08/31(水) 18:23:01ID:???0247nobodyさん
2005/08/31(水) 18:30:58ID:???pack、unpack、ordあたり調べてきな。
# 実際に '\x' も付けて表記してるならevalで戻せるけどな。
0249nobodyさん
2005/08/31(水) 19:01:48ID:???あまりきれいに書けてないけど。例を。
for ('A', 'a') {
print '\x' . unpack('H2', $_);
}
for ('\x41', '\x61') {
/\\x(..)/;
print pack('H2', $1);
}
0250nobodyさん
2005/08/31(水) 19:11:24ID:4hPwGNyx日本語使うと文字化けしちゃって読めません。
# どうやらbase64に強制変換されてる様子。
どうすれば日本語を使えるようになるでしょうか。
なお現在のソースはイカの感じです。
use strict;
use XMLRPC::Lite;
use Jcode;
my $name = "name";
my $pass = "pass";
my $title = "たいとる";
my $description = "ほんぶん";
#&Jcode::convert(\$title,'utf-8');
#&Jcode::convert(\$description,'utf-8');
print $title;
my $msgresult = XMLRPC::Lite
-> proxy('http://blog.fc2.com/xmlrpc.php')
-> call('metaWeblog.newPost', "0", $name, $pass,
{
'title' => $title,
'description' => $description,
'mt_allow_comments' => 1, # must be int, not string
'mt_allow_pings' => 1 # must be int, not string
},
1
)
-> result;
0251nobodyさん
2005/08/31(水) 21:12:32ID:HyyIksuTif( $a == 0 || $a == 1 || $a == 2 || $a == 3 ){
$aに0、1、2、3のどれかが入っていたら…、という文なんですが、
これをもう少し簡潔に書くとどうなるでしょうか?
数字が0、1、2、3……10くらいまで続き、また別のグループで11〜20、21〜30までを
今はそれぞれelsifで処理しています。
効率が悪いかな?と思いまして…。よろしくお願いします。
0252nobodyさん
2005/08/31(水) 21:19:36ID:ihFBKKnRTIMTOWDI
if $a =~ /(\d+)/ and 0 <= $1 and $1 <= 30
if defined $a and 0 <= $1 and $1 <= 30
0253nobodyさん
2005/08/31(水) 21:19:58ID:???if ( 0 <= $a && $a <= 10 ) { }
elsif ( 11 <= $a && $a <= 20 ) { }
elsif ( 21 <= $a && $a <= 30 ) { }
0255251
2005/08/31(水) 22:24:49ID:???>254
すみません、なんかこの処理を他に変える方法が今の自分にはわからなくて…
スキル不足ですね。勉強します。
0256nobodyさん
2005/08/31(水) 22:28:33ID:ihFBKKnR10ごとに区切る前提なら
my $flag = int $a / 10;
if ( $flag = 0 ) {}
...
if ( $flag = 3 ) {}
は?
0257nobodyさん
2005/08/31(水) 23:09:37ID:???if ($a =~ /1[0-9]/) {}
if ($a =~ /2[0-9]/) {}
0258nobodyさん
2005/08/31(水) 23:15:40ID:???どこか設計が間違ってると疑った方がいい。
0259nobodyさん
2005/09/01(木) 09:17:57ID:???$flag という変数名を使う習慣は捨てたほうがいい。
(そもそも割り算の商はフラグじゃないし)
もし意味がフラグだったとしても何のフラグなのかあらわす単語を名前にしる。
0260250
2005/09/01(木) 10:18:56ID:pBV3XGF+'title' => $title,
'description' => $description,
の所を
'title' => XMLRPC::Data->type('string', $title),
'description' => XMLRPC::Data->type('string', $description),
とする事で解決しました。
# $title及び$descriptionの中身はutf-8に変換してます。
0261nobodyさん
2005/09/01(木) 14:07:05ID:???下記のようなやり方だと出来ません
どのようにしたらよいのでしょうか?
$b = system("vuserinfo -l $a");
print $b;
0262nobodyさん
2005/09/01(木) 14:37:00ID:???$b = `vuserinfo -l $a`;
print $b;
systemはコマンドの戻り値が返されるのかな。
あと、openかsystem関数かでパイプを使う方法等もあったと思う。
0266nobodyさん
2005/09/01(木) 18:37:12ID:???0268nobodyさん
2005/09/01(木) 21:28:02ID:???0269nobodyさん
2005/09/01(木) 21:29:53ID:???0270nobodyさん
2005/09/02(金) 01:43:26ID:5yfALZxBpush(@tmp, $line);
}
close(FILE);
で、
print @data;
とすると、2行目以降、各行の先頭に半角スペースが入ってしまうのですが、
何が原因でしょうか?
0271nobodyさん
2005/09/02(金) 01:48:22ID:???0272270
2005/09/02(金) 01:50:31ID:5yfALZxBそれはないです。。。
1行ずつ
while($line = <FILE>) {
print $line;
}
close(FILE);
とすると大丈夫なので。
0274nobodyさん
2005/09/02(金) 01:54:19ID:???0275270
2005/09/02(金) 01:54:19ID:5yfALZxBとやっても変化無しです。
0276nobodyさん
2005/09/02(金) 01:54:50ID:???0277270
2005/09/02(金) 01:55:26ID:5yfALZxBすみません、
open(FILE, $file);
が抜けてましたorz
0279270
2005/09/02(金) 01:57:14ID:5yfALZxBすみません、書き込む時に間違えました。
手元のは大丈夫です。
あぁ、もうだめぽ。
0280nobodyさん
2005/09/02(金) 01:58:11ID:???0281nobodyさん
2005/09/02(金) 02:00:22ID:???print "@temp";
以上の違いを説明せよ
0282民主党
2005/09/02(金) 02:36:21ID:9iT1X8+f韓国大手テレビ局の8月15日番組「日本軍731部隊の生体実験」が、実は真っ赤なウソ、中国映画の盗用でっち上げだった。
韓国マスコミは反日番組で、この種のでっち上げ「歴史歪曲(わいきょく)」をよく行うが、今回の事件で 「日本糾弾ならウソも平気」 という腐敗体質が改めて確認された。
番組では実験の様子を「白黒の記録フィルム風」に紹介したが、視聴者から「映画の場面と同じだ」との声が上がり、悪質なでっち上げが露呈した。
この中国映画はカラー作品だが、テレビでは本物に見せかけて「白黒」に変えられており、意図的なでっち上げであることは明白。
日本の 民 主 党 【岡田党首】 は、日本国内に数十万人もいる反日的な在日韓国・朝鮮人に、日本の選挙権を与え、 民 主 党 に投票させようと画策している。
在日韓国・朝鮮人の大部分は、戦後のドサクサで勝手に密入国した不法滞在者とその子孫だが、「強制連行された」とウソをつき、被害者のフリをして日本国内に居座っている。
収入があっても税金は一切払わず、さらに毎月二十数万円の生活保護をもらい、日本人の悪口を言いながら遊び暮らしている。
0283nobodyさん
2005/09/02(金) 10:04:13ID:???% perl -e '@temp=("a\n", "b\n"); $,=" "; print @temp;'
a
b
0284nobodyさん
2005/09/02(金) 12:41:24ID:???Perlのバージョンは?
それから、問題が再現する最小のコードを作ってそのまま貼ってもらえると
アドバイスしやすいかな。
おれは昔(1〜2年ほど前)、print @hoge; とすると最初の行だけ先頭に
半角スペースが入ったことがあった。
print にスカラーやリストを渡した場合等は大丈夫なんだが、配列1つだけ
(もしくは先頭に配列変数だったかな)を渡すとそうなった。
(270さんと逆だなぁ。)
今、win & Linux 上で試してみたけど、そういう現象は起こらなかった。
もしかすると、Perl の、print あたりの実装上の問題かも。
# 今試して再現しなかったと書いたけど、なにぶん昔のことなので
# 方法を間違えているだけかも。
0285nobodyさん
2005/09/02(金) 12:56:58ID:???どうやらおれが書いた問題は
>>281さんが指摘したことだったみたいだ。
多分、自分の場合は、ヒアドキュメントの中で変数展開を使おうとして
先頭に改行が入っていたのだった。
print <<END;
@hoge
END
これだと改行が入るので、苦し紛れにリファレンスとデリファレンスを
使って次のように回避していたのを思い出した。
print <<END;
${ \join('', @a) }
END
>>281
文字列中での配列変数の展開では、要素間に半角スペースを入れて
結合されるのかな。
一方、引数として配列変数を指定した場合(前者)は、最初にリストに展開される
ため期待通りに処理される、と。
0286nobodyさん
2005/09/02(金) 14:02:12ID:???文字列中での変数展開では$"が間に挿入される。デフォルト値は空白。
printでは要素間に$,が挿入される。デフォルト値は空文字列。
0287nobodyさん
2005/09/02(金) 23:01:28ID:???「ひょっとして、ダブルクォート文字列の中に、chomp していない配列を入れていませんか?」
というやつだね。
0288nobodyさん
2005/09/03(土) 03:59:11ID:???0289nobodyさん
2005/09/03(土) 05:05:43ID:???あれはいったいどうやってtor経由か判断しているのでしょうか
0290nobodyさん
2005/09/03(土) 15:37:23ID:???スレ違い
0291nobodyさん
2005/09/03(土) 15:49:52ID:???これでも参考に
風呂敷確認君 弐式 2.07
http://sv2ch.baila6.jp/chk_proxy.cgi
http://sv2ch.baila6.jp/chk_proxy.cgi?source
0292nobodyさん
2005/09/04(日) 03:20:49ID:pmMRy4XZ意味がわかりません。
「$v1 . hex(09) . $v2」というように項目の区切りとしてhex関数
を指定してみましたが、エラーが出てしまいます。
質問すると怒られるので焦ってます、、
ご教示いただけますと幸いです。
0294nobodyさん
2005/09/04(日) 04:03:51ID:???本当に有難うございます。
「受付データの区切りはタブ(\t)を入れており、
項目区切りはHex(09)となってますので」
と言われた意味がようやくわかりました。
Hex(09)=\tということなんですね。
勉強になりました。
0295nobodyさん
2005/09/04(日) 04:45:50ID:???えーと、まぁ正確には
hex 関数は 「16進数 → 10進数 変換」する関数
(例: print hex('0a'); # 10 と表示される)
なので今回の例では hex は使えず。
代わりに、「10進数 → バイナリ 変換」 できる chr 関数、pack 関数、\x?? の表記
あたりのいずれかを使えばOKということです。
(例: print chr(9); # tab文字が表示される)
今回の例だと、
・$v1 . chr(0x09) . $v2
・"$v1\x09$v2"
・$v1 . "\t" . $v2
・"$v1\t$v2"
辺りでもOK。
0296nobodyさん
2005/09/04(日) 08:02:46ID:???0297nobodyさん
2005/09/04(日) 12:20:52ID:???ありがとうございます
見たところ単純にリストと照合してるだけのようですが
そのリストをどうやって作ってるのかがなぞですね
0298nobodyさん
2005/09/04(日) 13:47:14ID:???勉強になるお話、ありがとうございます。
なぜ指示した人は「Hex(09)で」といったのでしょうかね。
「\x09で」と自然に結び付けていったつもりだったのでしょうか。
言い方は間違ってないかと思いますが、少しおかしいとも思いました。
というか僕が混乱しているせいもありますが。。
素直に\tを使うことにします。
0299nobodyさん
2005/09/04(日) 13:58:15ID:???一般的に hex は 16進法の という意味で(語源の英語 hexadecimal がそういう意味)、
担当の人は 16進表記での09 というつもりで Hex(09) と書いたのかもしれないね。
でもまぁ、開発言語がPerlと限定されてるなら、hex と chr 関数を間違えた可能性も。
おれも普段はそこらへんは曖昧だしなぁ。
Perlでhex(09)で と指定されたら、あまり慣れてない人なら少々誤解してもある程度無理ない罠。
開発&上達ガンガレ。
0301nobodyさん
2005/09/04(日) 22:22:16ID:???そこで次のサブルーチンを作成してみました
[ $Trafic_Timeout ]秒間に [ $Trafic_min_limit ] バイト転送したら転送量エラーと封\示したいとしbト &TraficPlus(画像サイズ); って感じで呼び出したいと思っています。
全くスマートなプログラムではありませんが、これでいけると思ってやった見て、何度か改良しましたがうまくいきません。
どなたか改良又は知恵をかしていただけませんか?宜しくお願いします。
sub TracficPlus{
$plus = $_[0];
my $size;
&filelock('tr.lock');
$Trafic_min_limit = 202400;
$Trafic_Timeout = 60;
my $nowtime=time;
open(IN,"time.trafick");$mtime = <IN>; close(IN);
open(IN,"now.trafick");$total = <IN>;close(IN);
$time = $nowtime - $mtime ;
if($time > $Trafic_Timeout){
$total = 0;
open(IN,">time.trafick");print IN $nowtime; close(IN);
}
$total += $plus ;
open(IN,">now.trafick");print IN $total;close(IN);
open(IN,"total.trafick");$ttt = <IN>;close(IN);
$ttt += $plus;
open(IN,">total.trafick");print IN $ttt;close(IN);
&fileunlock('tr.lock');
if($total > $Trafic_min_limit){&Error($Limit);}
return $size;
}
(http://pc8.2ch.net/test/read.cgi/tech/1121804136/658 からのスレ違いとのことでこちらにマルチっぽくなってしまっていますが宜しくお願いします。)
0302nobodyさん
2005/09/04(日) 22:52:45ID:???とりあえずすぐに気づくのは、$size に値が代入されずに return されてることだなぁ。
1. 各 .trafick ファイルの役割
2. どういうふうに うまくいかないのか
を書いてもらえれば、アドバイスしやすいかも。
0303nobodyさん
2005/09/04(日) 22:57:53ID:???トラフィックの綴りはtraffic
0304nobodyさん
2005/09/04(日) 23:10:18ID:???真剣に綴りミスしてました。忠告サンキューです。
>>302
えと、今もう一度プログラム書き直しているので>>301の物はおいとかしてください。
今やろうとしているのは、 n 秒間に m バイトのデータが転送されたら n 秒経過するまで転送量エラー画面で止めておくプログラムを組みたいと思っています。
0305304
2005/09/05(月) 00:04:16ID:???この状態で、$Trafic_min_limitの値を0にして、実行しても記録はされているもののエラーには飛びませんでした。
各行で何をやろうとしているのかは注釈を入れておきました。宜しくお願いいたします。
sub TrafficPlus{
$plus = $_[0];
$Trafic_min_limit = 202400;
$Trafic_Timeout = 60;
my $Traffic_now = 'traffic.now.hidden'; #現在の転送量保存
my $Traffic_total = 'traffic.total.hidden'; #全体の転送量保存
my $Traffic_time = 'traffic.time.hidden' #現在の転送量を保存したときの時間
my $nowTime=time; #現在の時間
&filelock('tr.lock');
$ntraffic = `cat $Traffic_now`; #現在の転送量取得
$straffic = `cat $Traffic_time`; #保存したときの時間を取得
$ptime = $nowTime - $straffic; #現在の時間と保存したときの時間差取得
if($ptime > $Trafic_Timeout){$ntraffic = 0;} #指定時間を超えていた場合リセット
$ntraffic += $plus; $straffic += $plus; #現在の転送量に新たな転送量を加える
#現在の転送量をファイルに記録する
`echo '$ntraffic' > $Traffic_now`;
`echo '$straffic' > $Traffic_total`;
`echo '$nowtime' > $Traffic_time`;
&fileunlock('tr.lock');
if($Traffic_now > $Trafic_min_limit){&TrafficError;}
return ($Traffic_now,$Traffic_total);
}
0306nobodyさん
2005/09/05(月) 00:12:17ID:???\0
というのは何を表しているのでしょうか?
ぐぐって見たのですが、見つかりませんでした。
(あまりにも単純すぎて、検索するのが意外と難しい)
0308nobodyさん
2005/09/05(月) 00:19:28ID:???0310304
2005/09/05(月) 00:24:11ID:???日転送量が3GBぐらい行ってるらしくて。普通の鯖なら蹴られて当然な数値ってことはすぐ分かりました。
まだ許してくれてるので早急に対応したいなと。とりあえず今は画像の表示にsleepで時間差を付けて耐えております。
0311nobodyさん
2005/09/05(月) 00:39:15ID:???とりあえず最後のif文で、$Traffic_now(ファイル名)と
$Traffic_min_limit(バイト数)を比較してるのはおかしいだろ。
$ntrafficじゃないのか?
あと$ntrafficがリセットされるのが、リクエスト間が$Traffic_Timeout秒
あいたときだけなんだが、これはそういう仕様なのか? $Traffic_Timeout秒
以下の間隔でリクエストが来続けるといったん制限かかったらかかりっぱなし
になりそうだが。
0312nobodyさん
2005/09/05(月) 00:55:25ID:???すっゲー間違いしてました。サンキューです。
修正してみましたがまだ正しく動かないっす・・・。
とりあえずできるまで粘ってみます。
0313nobodyさん
2005/09/05(月) 01:20:29ID:???>>311が書いてるけど、各秒ごとの転送量を保存しないと、
指定時間内の転送量が出せないね。
↓文法チェックもしてないけど。ファイルロック処理等も無し。
0314nobodyさん
2005/09/05(月) 01:21:54ID:???my $plus = shift; # 増加量
my $Trafic_min_limit = 202400;
my $Trafic_Timeout = 60;
my $now = time; # 現在時刻
my %traffic; # 転送量
# ファイルから転送量情報を読み込む。
open(IN, 'traffic.dat');
my %in = split(/,/, <IN>);
close(IN);
for ( keys %in ) { # $Trafic_Timeout秒以前の情報を捨てる
$traffic{$_} = $in{$_} if ( $_ > $now - $Trafic_Timeout );
}
$traffic{$now} += $plus;
my $sum; # 指定時間内の転送量合計
for ( keys %traffic ) {
$sum += $traffic{$_};
}
# 転送量情報を保存。
open(OUT, '> traffic.dat');
print OUT join(',', %traffic);
close(OUT);
if ( $Trafic_min_limit > $sum ) {
TrafficError();
}
}
0315nobodyさん
2005/09/05(月) 06:55:48ID:???GDインストール解説サイトに5.8はまだPPMが使えないのでActivePerlは5.6をインストールするように書いてありました
その解説は2004年9月に書かれたものですが
現在も5.8ではPPMは使えないのでしょうか
0316nobodyさん
2005/09/05(月) 08:41:06ID:???rep add theoryx5 http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58
としてから
search GD
で見つかると思う
0318304
2005/09/05(月) 11:26:42ID:???sub TrafficPlus{
$plus = $_[0];
#現在の転送量保存
my $Traffic_now = 'traffic.now.hidden';
#全体の転送量保存
my $Traffic_total = 'traffic.total.hidden';
#現在の転送量を保存したときの時間
my $Traffic_time= 'traffic.time.hidden';
#現在の時間
my $nowTime=time;
&filelock('tr.lock');
#現在の転送量取得
$ntraffic = `cat $Traffic_now`;
#保存したときの時間を取得
$straffic = `cat $Traffic_time`;
#現在の時間と保存したときの時間差取得
$ptime = $nowTime - $straffic;
#指定時間を超えていた場合リセット
if($ptime > $Traffic_Timeout){$ntraffic = 0;$straffic = $noTime;}
#現在の転送量に新たな転送量を加える
$ntraffic += $plus;
$straffic += $plus;
#現在の転送量をファイルに記録する
`echo '$ntraffic' > $Traffic_now`;
`echo '$straffic' > $Traffic_total`;
`echo '$nowTime' > $Traffic_time`;
&fileunlock('tr.lock');
if($ntraffic > $Traffic_min_limit){&TrafficError;}
return ($Traffic_now,$Traffic_total);
}
0319nobodyさん
2005/09/05(月) 11:34:24ID:???sub TrafficPlus{
$plus = $_[0];
$Traffic_min_limit = 500000;
$Traffic_Timeout = 60;
my $Traffic_now = 'traffic.now.hidden';
my $Traffic_total = 'traffic.total.hidden';
my $Traffic_time = 'traffic.time.hidden';
my $nowTime=time;
&filelock('tr.lock');
$ntraffic = `cat $Traffic_now`;
$straffic = `cat $Traffic_time`;
$ptime = $nowTime - $straffic;
if($ptime > $Traffic_Timeout){
$ntraffic = 0;
$straffic = $noTime;
}
$ntraffic += $plus;
$straffic += $plus;
`echo '$ntraffic' > $Traffic_now`;
`echo '$straffic' > $Traffic_total`;
`echo '$nowTime' > $Traffic_time`;
&fileunlock('tr.lock');
if($ntraffic > $Traffic_min_limit){&TrafficError;}
return ($Traffic_now,$Traffic_total);
}
0320nobodyさん
2005/09/07(水) 13:59:48ID:oYntvDxu同時に書き込むような仕組みでなにかよい方法はございます
でしょうか。
この2サーバはロードバランサーで動作しております。
現在は各サーバに受け側CGIを設置(ファイル書き込みCGI)。
それぞれのサーバにアクセスがあった場合、SOCKET通信で
もう一方のサーバのCGIを叩く仕組みでファイルの同期を取って
いるのですが、アクセスが集中したりすると
「Resource temporarily unavailable」とエラーが出たりしてしまい、
多少怒られております。
何かよい案があればご教示いただけますでしょうか。
宜しくお願いいたします。
0321nobodyさん
2005/09/07(水) 20:41:36ID:3mQbsuSc<A href=http://a.jp/abc.cgi?menu=1>メール</A>
というリンクでabc.cgiへ移るとき、メニュー番号をmenu=1で渡すと同時に
<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=$wk_id >でIDとパスワード
も渡すことはできないでしょうか?そもそもhiddenはフォームのボタン等
がクリックされた場合のみで、リンクの場合には渡せないのでしょうか?
リンクでID、パスワードを渡すとアドレスに表示されるので、できれば
hidden等が良いのですが。
よろしくお願い致します。
0322nobodyさん
2005/09/07(水) 20:50:01ID:???<A>のリンクでhrefにアドレスを設定するのではなく、
onClickでJavascriptのfunctionよんで、そこでsubmitさせる
0323nobodyさん
2005/09/07(水) 20:50:14ID:???CGIを動かしてる鯖以外に、ファイルサーバを導入する。しかないような…。
しかも、Resource temporarily unavailableのメッセージはhttpdが出してるやつでしょ?
単なるアクセス制限だからCGIのコーディングと関係ない。
0324nobodyさん
2005/09/07(水) 20:53:03ID:???JavaScript を使えばできますよ。
<a href="http://hoge/abc.cgi?menu=1" onclick=〜>
# onclick で呼ばれる関数で post メソッドで submit (CGI呼び出し)。
それか素直に、button にしておくか。この場合でも、
<form method=POST action="./abc.cgi?menu=1">
としておくと、URLには menu=1 が現れる。
上記いずれの場合でも、CGI側で menu と id の値を両方取得可。
# JavaScript と HTML の細部の記憶は曖昧なのでスペルミス等あれば悪しからず。
0325nobodyさん
2005/09/07(水) 23:53:10ID:???ご返答有難うございます。
アクセス制限ですか。
とくに認証等はかけてないのですが、接続数制限という意味でしょうか。
0326nobodyさん
2005/09/07(水) 23:59:39ID:???他で管理している鯖ですか?
認証は関係ありません。
制限自体は、その鯖の設定によりけりです。
単位時間あたりの接続数、ヒット数、転送量、など
いろいろな情報を元に制限をかけることが可能です。
制限がヒット数になっていて、そのページに画像が多い場合、
すべてヒットとカウントされて制限に引っかかることもあります。
0327nobodyさん
2005/09/08(木) 00:24:20ID:???あれ?ちょっと変じゃないですか??
ロードバランサ入れてるんですよね。
一方のCGIが叩かれた時に、もう一方のCGI叩いたらダメでしょ。
負荷分散してる意味が無いような…。
0328nobodyさん
2005/09/08(木) 01:46:08ID:???CGI側ではどうすることもできないんですね。
サーバの設定を見直してもらいます。
>>327
一部だけファイルを同期する必要があるので、この手法を
とりました。
0329nobodyさん
2005/09/08(木) 03:24:01ID:vnFPn7Ff2 => '2です',
6 => '6です',
'Y' => '12です'
);
このようなハッシュを
foreach my $key (sort { $a <=> $b || $a cmp $b } keys %test) {
print "$key\n";
}
こう並べ替えますと、なぜか
Y
2
6
になってしまいます。
2
6
Y
にしたいのですが、
ご教示いただけますと幸いです。
0331nobodyさん
2005/09/08(木) 04:24:19ID:???sort { $a cmp $b }
でいいんじゃね?
0332nobodyさん
2005/09/08(木) 04:27:51ID:???0333329
2005/09/08(木) 11:27:17ID:???実はこの部分、サブルーチン化していて使いまわして
いるので何かよい方法はないかと思っていたのですが、
$a <=> $b の数値比較のあとに $a cmp $bが評価されて
いないのではなく、$a <=> $bの時点でYが0になっていたの
ですね。
このルーチンは多くのところで使われておりますが、$a cmp $b
に統一するよう検討してみたいと思います。
本当に有難うございました。
0334nobodyさん
2005/09/08(木) 13:51:44ID:+KUBGHaQログをどうするか悩んでいます。
プレインテキストで数千件の登録を管理するのは可能でしょうか。
また不可能だとすればどういう方法があるでしょうか。
是非ご教示願います。
0337nobodyさん
2005/09/08(木) 19:09:08ID:vnFPn7Ffsub send_socket{
use Socket;
my ($host, $filename, $data) = @_;
my $path = "$filename?$data";
my $return_value;
my $port = getservbyname('http','tcp');
my $iaddr = inet_aton("$host") or return 0;
my $sock_addr = pack_sockaddr_in(80,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or return 0;
connect(SOCKET,$sock_addr) or return 0;
select(SOCKET);
$| = 1;
select(STDOUT);
print SOCKET "GET /$path HTTP/1.0\r\n\r\n";
while(<SOCKET>) {m/^\r\n$/ and last;}
while(<SOCKET>) {$return_value .= $_;}
close SOCKET;
return $return_value;
}
これで内容を取得するのと
sub send_socket{
my @wget_status = `/usr/bin/wget -q -O - "http://$host/$path"`;
foreach (@wget_status){ $return_value .= $_; }
return $return_value;
}
これで取得するのとでは同等という考えではございませんでしょうか。
ご教示いただけますと幸いです。
0338nobodyさん
2005/09/08(木) 19:32:32ID:???単に負荷と言われても、どこに注目するかによって違うので、一概には比べられない。
上のは、スクリプトの部分が多い。
下のは、プロセスをforkしてる。
0339nobodyさん
2005/09/08(木) 20:26:41ID:???100アクセス/secくらいのキャンペーンサイトで後者を使用
するのですが、非常に不安で胃がいかれそうです。。
何かアドバイス等ございましたら何でもよいのでいただけ
ますと幸いです。
0340nobodyさん
2005/09/08(木) 21:12:24ID:???コケそうな感じですね…。
どうしても後者なら、キャンペーン中だけでも
鯖で起動できるプロセス数を引き上げておかないと…。
0341nobodyさん
2005/09/08(木) 21:29:41ID:???前者だったらいけそうなのでしょうか。
まだ半日くらい猶予があるので、違いがあるのであれば
前者を検討してみたいと思います。
アドバイスいただけますと幸いです。
■ このスレッドは過去ログ倉庫に格納されています