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

Perlコーディング初心者質問スレ Part 38

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0813nobodyさん04/11/19 15:47:41ID:???
右下じゃなくて右上でした
0814nobodyさん04/11/19 16:12:25ID:???
>>805 >/dev/null 2>&1
他にもnohupとか。

>>812
作った人に言え
0815nobodyさん04/11/19 16:17:03ID:???
>>814
無理なんです今は・・
0816nobodyさん04/11/19 19:45:10ID:???
perlで変数を()でくくって宣言しているのをしばしば見かけるのですが、
($tmp) = "hoge";
とか。
これは何の意味があるんでしょう?
0817nobodyさん04/11/19 20:16:23ID:???
>>816
その例ではまったく無意味かと
($foo, $bar) = @_;
とかやると
$foo = $_[0];
$bar = $_[1];
の効果が得られる。
多分書いた人の癖じゃないか?
0818nobodyさん04/11/19 20:26:47ID:???
>>817
レスありがとうございます。
某レスQのCGIにしばしば出現てて悩みました。()の中はスカラ変数が一つだけなんです。
実際は右辺はサブルーチンだったりするんですが、配列は戻ってこない。
($ret) = &getMessage("$filename$EXT");#戻り値は0か1
とか。
悩むのやめときます。
0819nobodyさん04/11/19 22:09:11ID:???
ていうかレスキューなんか参考にするのやめれ
082080404/11/19 22:47:11ID:???
>>814

レスありがとうございます。
/dev/nullについて調べて、実際に動かしてみました。
要するに出力をポイっとやるわけですよね?

末尾の2>&1は何でしょうか?色んなサイト調べてみましたが、
nullの動作に触れてるところばかりHITしたらしく。。orz

nohupもためさせてもらいました。
動作的にはscreenと似ているので、助かります。
しかし、nohupすると、私のUNKサバではかなり重くなってしまいます。。

出力を書き込んでいるからでしょうか?

あと、nohupや &での開始だと、telnetモジュールを切断させた後
ジョブをフォアグラウンドに復帰させる方法が見当つきません。。

我侭ばかりですいません。よろしくお願いします。



082180404/11/19 22:50:33ID:???
論点がPerlからズレてきているようなので、質問を訂正します。

割り込みキー入力(今回の場合はCTRL+A)を
perlからコンピュータに送信する方法はあるのでしょうか?

板汚し申し訳ないorz
0822nobodyさん04/11/19 23:02:34ID:???
>>818
そうやっておくと、もし2つ以上の返り値があった場合に
最初の値だけ取って、残りを捨てるということができる。
安全策ってわけだな。
あまり誉められたものではないと思うけど。

0823nobodyさん04/11/19 23:08:43ID:???
>>821
試してないけど\x01送るんじゃ駄目?
0824nobodyさん04/11/19 23:09:06ID:???
だからさ、2つ以上の返り値があるのかどうかわかんなくなっちゃうでしょ
082582304/11/19 23:20:43ID:???
>>821
おっと2>&1についてもついでに答えるんだった・・・
「標準エラー出力を標準出力に纏める」という意味。

nohupが重くなる理由はmanに書いてあったぞ
> スケジューリング優先度は 5 増やされるので、
> 実行の割り当て時間はやや小さくなる。
そんなに大きく変わるかは知らないが
082680404/11/20 00:21:15ID:???
>>823,825

レスありがとうございます。
大変貴重な情報をいただきました。
若干板違いな質問にも丁寧に答えてくださって、感謝です。
0827nobodyさん04/11/20 04:13:04ID:???
質問です.
ある, 改行コードがCR+LFのテキストファイルがアップロードされた際, 改行コードをLFに
変換し, そのファイルを保存するcgiを書きたいのですが, 以下のように書いてみましたがうまくいきません.
LFに変換されずCR+LFのまま保存されてしまいます.
#!/usr/bin/perl
use CGI;
$query = new CGI;
Content-type: text/html\n\n

$fn = $query->param('filename');
$type = $query->uploadInfo($fn)->{'Content-Type'};

if($type =~ /^text\//){
  open(FILE,">test.txt");
  while (<$fn>) {
    $temp = $_;
    $temp =~ s/\r\n/\n/;
    chomp($temp);
    print FILE "$temp\n";
  }
}
どのようにしたらいいでしょうか?宜しくお願いします.
0828nobodyさん04/11/20 06:01:26ID:???
>>827
そもそもそれ文法エラーだろ
0829nobodyさん04/11/20 08:04:12ID:???
>>806
>>809のContent-Lengthは、レスポンスの方だと思う。

print "Content-type: image/jpeg\n";
print "Content-length: $filesize\n\n";
で、$filesizeにjpegデータのサイズを入れておく。
(一旦テンポラリファイルを作らないとだめかも知れないけど)
0830nobodyさん04/11/20 08:31:32ID:???
windowsなら\nをさらに\r\nに直してくれる自動サービス付き
バイナリモード binmode を参考に
0831nobodyさん04/11/20 11:15:04ID:???
>>822
contextによって返す値がかわる関数もあるし意味もなくカッコつける癖は
まねしない方がいいと思われ
0832nobodyさん04/11/21 07:32:38ID:???
>>821
screen使った事ないけど、man読んでみた限りでは、
-d -Dでいけるんじゃ?

それから、うに板の方が適切な質問じゃないかと。
0833nobodyさん04/11/21 12:49:54ID:???
for(@list) {
...
}

の中で現在の行番号を取得する良い方法はありませんか?
$_ == $list[$hoge] になるような $hoge が知りたいのですが……。
カウンタ変数を新たに作るしかないんでしょうか。
083480604/11/21 13:04:12ID:Ewup0dSn
>829さん
お力添え、ありがとうございます。
早速やってみます!!
0835nobodyさん04/11/21 13:14:54ID:???
>>833
for(0..$#list){
処理
}
0836nobodyさん04/11/21 13:23:09ID:???
>>835
希望の処理ができました。
ありがとうございます。
0837nobodyさん04/11/21 18:47:52ID:8gMC3V6h
perl+mysqlでカートを作りました。
一応入力チェック(サニタイジング)として、like演算子のワイルドカードである
「%」と「_」があったら削除してます。

よく考えたら「_」はメールアドレスとして普通に使われてる可能性があるんですよね。
そこで質問ですが、_これってlike演算子以外では安全ですよね?

DBIのprepare時にプレースホルダを使用してるのですが、みなさんは_対策とかしてますか?

0838nobodyさん04/11/21 18:54:50ID:???
>>837
データを新規レコードとして挿入するだけなら問題ない。
まあlikeなんて挿入で使わないんだから気にするなよ。
0839nobodyさん04/11/21 19:01:17ID:ubTrO76H
@user_agent = split(/\//,$ENV{'HTTP_USER_AGENT'});
if ($user_agent[0] eq 'DoCoMo') { $URL=$iURL; }
elsif ($user_agent[0] eq 'J-PHONE') { $URL=$vURL; }
elsif($user_agent[0] eq 'UP.Browser' || $user_agent[0] =~ /^KDDI/) { $URL=$eURL; }
else { $URL=$pURL; }
print "Location:$URL\n\n";
print "Content-type: text/html\n\n";
print "<HTML><HEAD><META HTTP-EQUIV=\"REFRESH\" CONTENT=\"10;URL=$URL\"><TITLE>auto jump</TITLE></HEAD><BODY><A HREF=\"$URL\">自動でジャンプしない場合はこちらから</A></BODY></HTML>";
exit;

というのでHPを携帯なら携帯で察知して携帯用HPに
飛ばすようにしているのですが
話題の京ぽんを携帯用に飛ばしたいのですが出来ません。
ご教授ください。
0840nobodyさん04/11/21 19:33:12ID:???
>>837
プレースホルダつかってるなら勝手にエスケープしてくれるんじゃないの?
0841nobodyさん04/11/21 19:48:30ID:w/cY/u9z
urlだけを抜き出したいんですがうまくいきません。

@hoge=$url=~m/http:\/\/[-_.!~*'\[\]\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+/gi;


<a href="http://gaerge">fgagear</a>
とかを取得すると、
http://gaerge">fgagear</a>
となってしまいます。
どこをどう直せばいいんでしょうか。
0842nobodyさん04/11/21 19:54:09ID:???
>>841
urlのマッチングなんて探せばすぐ見つかるだろが
0843nobodyさん04/11/21 20:07:53ID:w/cY/u9z
どこが間違ってますか?
正規表現メモを参考にしたんですが。
0844nobodyさん04/11/21 20:55:58ID:???
>>839
AirWiki: AirH"PHONE/AH-K3001V/FAQ
http://d.memn0ck.com/index.cgi?AirH%22PHONE%2FAH-K3001V%2FFAQ#i15

>>841
my $url = qq{<a href="http://gaerge">fgagear</a>};
my @hoge = $url =~ m/http:\/\/[-_.!~*'\[\]\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+/gi;
print "@hoge";

問題なさそうだけど。
0845nobodyさん04/11/21 20:57:55ID:???
>>841
コピペして @hoge を print してみたけど
http://gaergeになったよ
084684104/11/21 21:33:14ID:???
確認してくれた方ありがとうございます。
正規表現事態は間違ってないみたいですね。
しかしなんでだろう・・
0847nobodyさん04/11/21 22:26:23ID:hibhMAES
今使ってるレンタルサーバーはcgiを別サーバーに置くようになっています。
cgiサーバーからhtmlサーバー内のログファイルを読み込むには、別サーバなので、
ソケットを使わなければいけないということで、とりあえずトップページを表示させようと、
次のソケットスクリプトを実行してみました。

  $host = "www.xxxxxxxxxxx.com";
$page = "/";
$line = "";
$addr = (gethostbyname($host))[4];
$name1 = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name1);
binmode(S);
select(S);
$| = 1;
select(stdout);
print S "GET $page HTTP/1.0\r\n\r\n";
while (<S>) { $line .= $_; }
close(S);
print $line;

ページの指定を$page = "/index.html";にするとNot Found
$page = "/";にするとForbiddenという反応が返ってきてうまくいきません。

これはただ、パスの指定が悪いだけなのか、やはりサーバーの設定で
ソケットが使えないようになっていて、cgiサーバーからhtmlサーバーの
ファイルを読み込むのはあきらめなければならないということでしょうか?
0848nobodyさん04/11/21 22:46:59ID:???
>>847
ソケットが使えないようになってるならそもそも
返事すらもらえないはずなので、パスじゃねーの?
0849nobodyさん04/11/21 22:50:12ID:???
最初にすべきことは使えるかどうかの確認じゃないかと
0850nobodyさん04/11/21 22:51:11ID:???
>>847
パスが合ってる筈なのにって場合は、リクエストにHOSTも入れた方がいいかも知れんね。
085183904/11/21 22:51:26ID:ubTrO76H
京ぽんのuser agentをいろいろ設定しましたが
どれもだめです。
そもそもの書き方を間違えているのでしょうか?
0852nobodyさん04/11/21 22:52:41ID:???
>>847
print S "GET $page HTTP/1.0\r\nHost: $host\r\n\r\n";
0853nobodyさん04/11/21 23:48:01ID:???
>>851
京ぽんつーのが何なのか知らないが、elseの中でUA名を表示させてみれば
どういうUA名で分岐すればいいのか分かるのでは?
0854nobodyさん04/11/22 00:59:03ID:???
perlの掲示板に検索機能をつけようと思ってるのですが、ログが1投稿毎に別ファイルにしてあります。
いちいち1ファイルごとに読み込んでマッチ処理の繰り返しでは負荷的にも問題あるので、
データディレクトリでgrepかけて、該当したファイルのみ読み込みたいのですが、
perlでやるにはどうすればよいでしょう?
0855nobodyさん04/11/22 01:10:34ID:???
数値Aと数値Bを比較して大きい方を変数に代入したい場合、
最もシンプルな記述はどんな感じになりますか?
0856nobodyさん04/11/22 01:16:03ID:???
>>855
?
0857nobodyさん04/11/22 01:18:25ID:???
$hensu = $a > $b ? $a : $b;
0858nobodyさん04/11/22 01:22:50ID:???
>>854

>>1

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0859nobodyさん04/11/22 01:25:58ID:???
>>854
open(IN,"grep '$keyword' file|");#実際にgrepを実行する
って手があるが、鯖によってはgrepはダメかもしれない。
ファイル名の検索ならFile::findで一発なんだが・・・。
086085504/11/22 01:31:38ID:???
>856
ifで書くと長いので。
>857
多謝。
0861nobodyさん04/11/22 01:38:42ID:???
>>860
大きなお世話かもしれんが、最初のうちはif使ってたほうが良いぞ
0862nobodyさん04/11/22 01:49:13ID:???
>>859
ありがとうございます。
grepからの出力を拾う方向で実装してみます。
0863nobodyさん04/11/22 02:20:18ID:???
grep で子プロセス1個作るのも結構な負荷だぞ。
ファイルの数が多ければ grep の方が軽いが、
少ないなら perl の中でループ回す方が鯖にやさしい。
てのはコーディングというより負荷軽減スレにふさわしい話題だが。
086485604/11/22 02:58:22ID:???
>>860
最もシンプルに答えただけなんだが、理解できなかったみたいだな。
0865nobodyさん04/11/22 03:28:27ID:???
理解してるみたいだけど…?
0866nobodyさん04/11/22 04:23:59ID:???
"?"を使えって事だろ レスがシンプルなだけで要望には応えてないが
0867nobodyさん04/11/22 04:47:42ID:???
あのレスだけで理解できたらここで質問なんぞしない希ガス
0868nobodyさん04/11/22 05:42:53ID:/gdSyseW
>>847
>>852

>print S "GET $page HTTP/1.0\r\nHost: $host\r\n\r\n";

hostを入れたら違う反応が返ってきて次のメッセージが表示されました。

HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 20:36:26 GMT Server: Apache/1.3.27 (Unix) Last-Modified: Thu, 11 Nov 2004 02:34:45 GMT ETag: "718102-ddd-4192cfc5" Accept-Ranges: bytes Content-Length: 3549 Connection: close Content-Type: text/html

ただ、期待したトップページは相変わらず表示されませんでした。
このメッセージからソケットが使えるって判断できるでしょうか?
0869nobodyさん04/11/22 06:30:29ID:/gdSyseW
>>868
トップページにはフレームを使っているので、表示されないみたいです。
取得したいログファイルを指定したら、見事に表示されたので、ソケットは使えることは確認できました。

ただ、次の応答メッセージが頭にくっついてくるので、これを取得しないようにすることはできるでしょうか?

HTTP/1.1 200 OK Date: Sun, 21 Nov 2004 20:36:26 GMT Server: Apache/1.3.27 (Unix) Last-Modified: Thu, 11 Nov 2004 02:34:45 GMT ETag: "718102-ddd-4192cfc5" Accept-Ranges: bytes Content-Length: 3549 Connection: close Content-Type: text/html
0870nobodyさん04/11/22 06:48:45ID:???
>>854
>>859の方法だと、システムシェルを利用するからセキュリティに注意。
0871nobodyさん04/11/22 07:06:38ID:???
>>869
ヘッダの最後は
CRLFCRLF(最低限LFLF)
になってるので、取得した後、そこまでカットすれば問題ないっしょ。
0872nobodyさん04/11/22 07:20:47ID:/gdSyseW
>>871
取得した後で加工してカットするということですか?できれば、取得時にカットしたいのですが、
不可能であれば、最終手段はそうするしかないですね。
0873nobodyさん04/11/22 07:48:05ID:???
>>872
<>で読むなら、空行が出るまで別の変数に入れておくとか、空読みするとか。
あと、socketとconnectのエラー処理をした方がいいよ。
0874nobodyさん04/11/22 08:44:18ID:???
LWP使ったほうが楽じゃないかと...
0875nobodyさん04/11/22 10:28:03ID:/gdSyseW
>print S "GET $page HTTP/1.0\r\nHost: $host\r\n\r\n";

素人考えで申し訳ないですが、GETのところでオプションなどをつけてその応答メッセージを
出さないようにすることってできないものですかね?

  HTTP/1.1 200 OK 〜〜text/html 取得したログファイルの内容〜

取得した内容は↑のようになっていて、応答メッセージと取得したログの間は半角スペースと
なっています。

応答メッセージを取得時にカットできない場合、取得後にカットするわけですが、シンプルに
カットするには、どういう方法があるでしょうか?perl初心者なもので、たびたびすみません。
0876nobodyさん04/11/22 11:44:54ID:???
>>875
チミはx68userのページ見て勉強してから出直すといい。
http://x68000.q-e-d.net/~68user/

別の解法: 他の人も言っているがLWPというチミがやりたいことをそのまま提供している
モジュールがあるので、そっちを使うと簡単。
「原理を理解しなくても目的を達成できりゃいい」という事ならばこっちをすすめる。
0877nobodyさん04/11/22 11:48:07ID:???
>>859
初心者にセキュリティホールのある方法教えるな。クズ。
087880604/11/22 11:50:53ID:dylfkRdn
>829さん
print "Content-type: image/jpeg\n";
print "Content-length: $filesize\n\n";
と書いてみました。swf側でファイルサイズを取得できて大喜びだったんですが、
jpg画像が途中から壊れて表示されるようになってしまいました。

>(一旦テンポラリファイルを作らないとだめかも知れないけど)

すみません。調べてみたのですが、ちょっと意味が。。。
0879nobodyさん04/11/22 12:00:44ID:???
>>878
もしContent-lengthをつけただけでそうなったのなら、
$fileseizeの値がおかしい可能性が高いな。
088080604/11/22 13:03:45ID:dylfkRdn
>879さん
レス、ありがとうございます!

print "Content-type: image/jpeg\n";
print "Content-length: 100000\n\n";

とかやってみたのですが、やはり画像が壊れて表示されます。
(こんなことしてはいけないのかな。。。)
088180604/11/22 13:14:51ID:dylfkRdn
>879さん
できました!!
やはり値がうまく入っていないだけでした。

ただ
($width, $height, $filesize)= $i->Get('width', 'height', 'filesize');
と値をとっただけなのでリサイズ前のファイルサイズがとれているだけなのですが。
テンポラリファイルとは一度このファイルをtmp.jpgとかにしてそのファイルサイズを
を測らなくてはならないという意味だったのでしょうか?
0882nobodyさん04/11/22 14:04:38ID:/gdSyseW
>>876

http://x68000.q-e-d.net/~68user/
x68userのページで、「HTTP クライアントを作ってみよう」という記事を見ましたが、
どうもヘッダを除いてボディだけを出力するというのはできなさそうに感じました。

LWPについてはx68userのページで一通り見ましたが、掲載されていないように
見受けられるので、いろいろ検索してそれらしい解説ページを見ましたが、
使用方法について内容の濃いページを見つけられませんでした。

一般的にどのサーバーにもLWPのモジュールが入っているのか?、当方のレンタル
サーバーでLWPは使えるのか?といった辺りからよくわかりません。
(見当違いなことを言っていたらごめんなさい。)

結局、ソケットでヘッダー(応答メッセージ)も含めてファイルを取得し、文字列操作
して、わざわざいらない部分を取り除かなければならないことになりそうです。

同じサーバーならopenしてファイルを参照できるのに、他サーバーのファイルを
参照するだけで、えらく苦労しています。
0883nobodyさん04/11/22 14:15:38ID:???
>>882
ボディだけ欲しいならHTTP/0.9で取れるが、HTTP/0.9はHostを送れないのでチミのホストでは駄目。

でも、ヘッダー読み飛ばすのなんか楽勝でしょ。
http://x68000.q-e-d.net/~68user/net/http-2.htmlだと38-41行
0884nobodyさん04/11/22 14:30:16ID:C0NQJmHQ
サーバーに新しいメールアカウント(例:abc)を作り
そこに添付されてきた画像ファイルをCGIで読み込み
メインアカウント(例:main)内にあるフォルダに保存させています。

読み込むCGIをgetmail.cgiとするとこれを手動で実行すると
問題なく動作するのですが
crontabを用いて自動実行させると添付ファイルの保存がされません。
crontabによりgetmail.cgiは動作しているものの
保存のみがされないようです。

0-59/2 * * * * cd /home/sites/www.xxx.jp/web && /home/sites/www.xxx.jp/web/mailget.cgi
で実行させています。
環境はRed Hat Linux 7.3
Apache 1.3.27
Sendmail 8.11.6
です。ちなみに、別のレンタルサーバー(FreeBSD)では動作していました。
原因がどこにあるのかご教授ください。
0885nobodyさん04/11/22 14:31:03ID:???
>同じサーバーならopenしてファイルを参照できるのに、他サーバーのファイルを
>参照するだけで、えらく苦労しています。

いやそれはそういうモノだ
Perlコーディング以前の「コンピュータが動くしくみ」とかいう次元の問題として
0886nobodyさん04/11/22 14:54:17ID:/gdSyseW
>>882
ひとまず、ご指摘の箇所を適用してヘッダーを読み飛ばし、ボディだけ抽出できました。
ありがとうございました。
0887nobodyさん04/11/22 15:54:59ID:???
>>877
じゃあ初心者にセキュリティホールの無いやり方を教えてみろクズ。
何も提案できない奴が偉そうな事抜かすな。
0888nobodyさん04/11/22 15:58:18ID:???
>>884
実行ユーザ名・使用するファイルのパミッション・使用する環境変数等々
チェックすることはいっぱいあるよ。
んでも、エラーを適切に処理してればどこでコケたか分かるでしょ?

>>887
初心者自体がセキュリティフォールです。はい。
0889nobodyさん04/11/22 15:59:51ID:???
ふぉーる
0890nobodyさん04/11/22 16:04:25ID:C0NQJmHQ
>>884です。
>>888さん、ありがとうございます。
色々チェックしましたがイマイチ解りません。
ブラウザから実行した場合は正常なのですが
crontabで自動実行した場合のみ保存がなされません。
調べたところ、添付ファイルの取り込みも問題ないようで
問題なのはopenして書き込む部分が実行されていないと言うことです。
ファイルの所有者とグループが違うのかと思ったのですが
これらは変更したりできるのでしょうか?
0891nobodyさん04/11/22 16:06:56ID:???
>>888
検索方法の話であって初心者云々関係ねーし。おまけにフォールだし。
0892nobodyさん04/11/22 16:12:24ID:???
子供達を責めないで(by デスラー)を思い出すな。
「私は子供に生まれないで良かったと、胸をなでおろしています!」っての。
>>888は初心者に生まれないで良かった胸をなでおろしてるんだろうな。
0893nobodyさん04/11/22 16:14:31ID:???
次スレ案
【初心者は】Perlコーディング初心者質問スレ Part 39【セキュリティフォール】
0894nobodyさん04/11/22 16:15:46ID:???
#! c:/perl/bin/perl

print "Content-type: text/plain\n\n";
print "Hello Perl !";

今日からPerlをはじめまして、本どうりにこれを打ち込んで、表示さしてみると
ファイルを開く、保存のダイアログボックスが表示されます。開くを押すと
メモ張にHello Pealと表示されます、本ではブラウザ上に表示されると
なっているのですが、違うCGIをためしてみるとちゃんとブラウザに表示されます。
本の付属のサンプルでやってもこれだけは、安心できる発信もとからの・・・
ファイルを開く 保存・・がでてブラウザに表示されません。これだけ
なぜかこうなります。
無視して、これは飛ばして次のCGIからやったほうがいいのでしょうか?
原因がわかるかたぜひおしえてください。
0895nobodyさん04/11/22 16:16:36ID:???
>>887
とりあえず、$keywordをサニタイズするようにぐらい書いておけ
0896nobodyさん04/11/22 16:30:35ID:???
うーん、grepのシェル起動はやっぱマズイ気がするな。
$keywordが実行されないようにしないと。
バッククォートは確実に殺しとけ。
0897nobodyさん04/11/22 16:36:59ID:???
そもそもgrep使っても1ファイルずつひらいて舐めるのは
かわらないのでperlの中だけで完結した場合に比べて
劇的に処理が軽くなるとはとは思えないのだが。
089888804/11/22 16:58:04ID:???
(((η)
  | |       (っ))) ヒャッホー! オレ様がスレタイに!!
  | |       //
  |∧_∧ // >>890
 (´∀`*//   cgiの実行ユーザ名でcrontab -eを実行してないのでは?
  l     /    その場合ならパーミッション関係でエラーがでて
           保存できないこともありうる。原因を探らないと。
0899nobodyさん04/11/22 17:45:56ID:???
open() 関数の戻り値が false だったら $! を表示させてみる、とかな
0900nobodyさん04/11/22 17:51:31ID:TZImgkmI
sendmail時のことで質問です。

subjectはちゃんとmimeエンコードしてるのですがfromに日本語を埋め込む時にも
mimeエンコードする必要がありますか?

JISでそのまま書いても駄目ですよね?

from: "送り先の人間の名前" <hoge@test.com>

みたいになってますがどうすれば大方のメールソフトで問題なく動作するでしょうか?
0901nobodyさん04/11/22 18:11:55ID:???
>>887
クズのくせに威勢がいいな。
特別に教えてやろう安全なパイプの使い方だ。二度と初心者に穴コード教えるなよ。ヘッポコ。

$pid = open(IN, "-|");
if (!defined($pid)) {
die "cannot fork";
} elsif ($pid == 0) {
exec('grep', $keyword, 'file') || die 'grep';
}

>>900
MIMEエンコードすりゃいいだけだろ。何が聞きたいんだ?
0902nobodyさん04/11/22 18:18:31ID:???
>>894
.cgiファイル?
まあどっちにしろ
__END__を忘れてないか
あとどんな本だ?
0903nobodyさん04/11/22 18:19:47ID:???
>>894
ここはコーディングの質問スレなので、それ以前の方はお引き取りください。
0904nobodyさん04/11/22 19:16:13ID:4/apYG7/
>>901
そんなんで虚勢張られてもなぁ・・・
空しくならない?
0905nobodyさん04/11/22 19:19:21ID:???
後出しじゃんけん キタ━━━━(゚∀゚)━━━━ッ!!
0906nobodyさん04/11/22 19:34:33ID:???
っていうか悪意のある入力値のサニタイズとは関係ない気が。
0907nobodyさん04/11/22 20:17:07ID:???
外野だけど$keyword = quotemeta($keyword)じゃだめ?
0908nobodyさん04/11/23 01:17:07ID:???
バッククォートとシングルクォートだけで良いと思うけど。
()もマズイか?
いずれにせよ、パイプの使い方云々って話じゃなくて。
0909nobodyさん04/11/23 01:23:12ID:nMfYIywn
あのね、僕ちゃん達、何のためにサニタイズするの?
shが余計な解釈して、コマンド実行されると困るからでしょ。
>>901の方法でパイプ使えばshは経由しないから、安全なの。
0910nobodyさん04/11/23 02:23:51ID:7PvclRNn
>>901乙であります(pgr
0911nobodyさん04/11/23 02:54:05ID:???
まぁまぁ、まぁまあ、

マーライオン       , ―‐ 、 
             /r‐' ,ェェr‐..、
               | l |   ____Y)........
               | l ヽ  ┴‐┬'''''''''' ::::.........
               | l  l `ー‐1      ::::::::.......
             7レヘ!    /        ::::::::::::.....
             l |. |    /           :.:.:.:::::...
             /7ーー7777!             :.:.:.:::::....
            T--l⌒ヽ{ l               :.:.:.:.::::::...
               |vv'レ⌒!'ー!                :.:.:.:.::::::...
              |vv'ヽソー1                 :.:.:.:.::::::.
           _ヽVVVー7__               :.:.:.:.:::::..
         ,〜〜〜〜〜〜〜ヽ  ヽ、             :.:.:.:.:.:..::..
        ∠二二二二⌒二二二二二二ユ            :.:.:.:.:.::::::...
0912nobodyさん04/11/23 07:24:42ID:???
>>881
出力するデータのサイズを出力しないとだめだよー。

>>894
・IEを投げ捨てて他のブラウザを使う。
・おまじないとして最後に"/"を付ける。
・Windows XP SP2にして、IEをレスポンスヘッダに従うように設定する(できるらしい)。
・HTMLで出力する。
原因はIEの仕様。
レス数が900を超えています。1000を超えると表示できなくなるよ。