|
>データの転送自体の仕組みは全く変わらないため、転送データの >サイズが大きくなればなるほど、差は目立たなくなるでしょう。 納得行く答えを頂きました。ありがとうございます。 >すなさん RFC情報、どうもありがとうございます。 |
|
>>1756 すな > 2001-02-28 01:00:02 5秒 sleep したのですから、00:59:57 あたりに cron から 起動されているわけですか。手元の FreeBSD 4.1-RELEASE と Solaris2.6 で負荷をかけて試してみましたが、1秒程度遅く なることはあっても、早く起動されることは一度もありません でした。 となると、Vine の cron が腐ってるということになりませんかね。 > マシンフル稼働状態だとloadの数値は最大いくつ位になるのでしょう? とりあえず http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119 を読んでください。理論的には、load average はどこまででも 増やすことができます。 |
|
68user>となると、Vine の cron が腐ってるということになりませんかね。 なるほど、と言う事はcronの実装も結構ディストリビューションで違うのですね。 というか、さすがSolarisと言うべきなのか… # マシンの内臓タイマーの精度とかも関係有るのかな? # このマシンはかなり時間が狂うので…(1日数秒はあたりまえ) >http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1119 なるほど、これも大変勉強になりました。 最初は単純にシステム負荷を100で割った(理由不明)数値なのかと思っていました。 Windows等のシステム負荷表示とはまったく違って、100%以上の負荷まで表示 している訳ですね。(待ちプロセスを負荷と言うかは別として) 説明も大変判りやすかったです。 |
|
>>1750 68userさん > あと、この BBS で <http://blade.nagaokaut.ac.jp/> という書き方をすると > <http://blade.nagaokaut.ac.jp/> > → <A HREF="<http://blade.nagaokaut.ac.jp/>"> > と置換されていましたが、さきほど直しました。 自作BBSを見ると正規表現部分*だけ*はほぼ同じでした。やはりここの掲示板のソースを引き写していたようです。(perlではなくrubyですが。)で,直していて気が付いたことですが, s!<A HREF="(.*?)>">(.*?)<</A>!<A HREF="$1">$2</A><!g; も加えておいた方がよいのでは。 |
|
<<1763 ん? 訂正。 s!<A HREF="(.*?)>">(.*?)></A>!<A HREF="$1">>$2</A>>!g; s!<A HREF="(.*?)<">(.*?)<</A>!<A HREF="$1"><$2</A><!g; こうですね。 |
|
<<1764 ん?? 何やってるんだろう。 s!<A HREF="(.*?)>">(.*?)></A>!<A HREF="$1">$2</A>>!g; s!<A HREF="(.*?)<">(.*?)<</A>!<A HREF="$1">$2</A><!g; これでいいんですね。 <<1762 はタイプミス <<1763 は勘違いでした。 板汚しですみません。 |
|
あっ、ウチも同じバグがある(^^; でも、書き戻しですね…、ちょっとテストさせてくださいm(_o_)m <http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/> |
|
おー、これってきっちりやると結構面倒かも。で、30分あれこれ やった結果…これでどだ! $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)'; $out = ''; while (1){ if ( ! s!(.*?)($http_pattern)!! ){ $out .= $_; last; } $out .= $1; $buf = $2; $buf =~ s/((<|>|").*)//; $rest = $1; $buf =~ s!$http_pattern!<A HREF="$1">$1</A>!; $out .= $buf; $_ = $rest . $_; } print "$out\n"; 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。 |
|
無茶苦茶効率悪そうだし、未定義変数使用の警告が出るけど…(^^; $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; $http_pattern = '(http|https)(://)(([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+?)(>|<|")|([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+))'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; s!$http_pattern!<A HREF="$1$2$4$6">$1$2$4$6</A>$5!g; |
|
>>1767 68userさん おはようございます。 > おー、これってきっちりやると結構面倒かも。 こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。 > 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。 早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。 そんなわけで,いつもありがとうございます。これからもお世話になります。 |
|
こんなのも。 $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; @items = split(/(<|>|")/, $_); foreach (@items){ s|$http_pattern|<A HREF="$1">$1</A>|g; } $_ = join('', @items); print "$_\n"; アルゴリズム・正規表現が複雑にならないという点で、これが 一番よさげかなぁ。でも動作チェックと速度計測をしなくては。 もっとよいのを思いついた方は教えてください。 |
|
>>1770 68user commit しました。とか言ってみたり。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi |
|
>>1770 68userさん いいですねぇ。 これ頂きます。perl4でも動くし(^^; |
|
質問したいことがあります。それはあるプログラムでPIDを変数として 持っているときに、その変数のPIDのプロセスを殺す方法があれば教えて欲しいのですが。 よろしくお願いします |
|
>>1773 purine 必ず OS 名や使用している言語を書いてください。 kill コマンドか、システムコール kill を使います。 http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=kill&target=command&partial=on |
|
japu さん (http://www.japu.org/) より、source.cgi に関して CGI Security Advisoriy をいただきました。 これは他サイトに HTTP でアクセスし、GET した結果を表示 するもので、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ からは <!-- --> でコメントアウトしてあったものです (なぜコメントアウトしたかは忘れた)。 # また、昔利用していた http proxy 経由でアクセスするため、 # X68000.startshop.co.jp からは正しく動作しませんでした。 しかし、トップページからはスクリプトのソースを見ることができ、 source.cgi 自体も実行可能なままになっていました。これに対して http://X68000.startshop.co.jp/~68user/Cgi-room/source.cgi?url=http://www.yahoo.co.jp';ls%20*' といったアタックが可能でした。これは open(IN,"$httptalker -get '$url'|"); の部分で open(IN,"$httptalker -get 'http://www.yahoo.co.jp';ls *''|"); と解釈されます。open の引数に ; ? * | などを渡すと、perl は /bin/sh を起動し、/bin/sh がコマンドを実行しますので、任意の コマンドが実行可能です。 で、SA を受けて open(IN, "-|") or exec($httptalker, '-get', $url); と修正しました。この場合は perl が直接 fopen(3) を呼ぶため、' ; * など が特別扱いされることなく、$httptalker の引数にそのまま渡ります。 source.cgi の更新履歴: http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/Cgi-room/source.cgi セキュリティホールを指摘して下さった japu さんに感謝いたします。 んで、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ ですが、もうメンテする気力がないし、技術的な興味もないし (nslookup とか whois コマンド呼ぶだけのスクリプト見てもおもしろくないでしょ)、例えば ドメイン名検索とかならもっと便利なサイトがあるので、この掲示板で誰からも 反応がなければ近日中に消すつもりです。 |
|
>>1775 68user > open(IN, "-|") or exec($httptalker, '-get', $url); > と修正しました。この場合は perl が直接 fopen(3) を呼ぶため 訂正。perl が直接 pipe(2)、fork(2)、exec(2) するため、でした。 |
|
CGIの小部屋は消さないで欲しいです. メンテ終了ページは倉庫ディレクトリなどに 移設するのみにしていただけると嬉しいです. 簡単な内容のものでも,知らない人に説明するとき サンプル的に便利に利用させていただいております. |
|
>>1777 Netboy > CGIの小部屋は消さないで欲しいです. 了解いたしました。と決まれば、見られても恥ずかしくない 程度に brush up せねば。 |
|
いつも質問ばかりですいませんのふくしです。 Perl で use strict 'vars'; とすると、変数を使うときは パッケージを明示するか、my 宣言しないと怒られますが、 $a、$b という変数は怒られないで、%main:: シンボルテーブルに 追加されますね。$aa だとダメ。$c もダメ。なぜでしょう? 恐れ入りますがご存知の方はご教示ください。 |