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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/01/18(水) 02:17:46ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0598nobodyさん2006/02/12(日) 09:56:51ID:???
ウホッ良い勘違い!
0599nobodyさん2006/02/12(日) 10:05:55ID:???
おみくじやさいころではどっち使っても人間が直接体験できるような偏りは出てきません。
ただの勘違い。

ただしまともな乱数使ってもプログラムの中で偏った分布をするような
プログラミングがされていたら当然偏るけどね。
06005962006/02/12(日) 10:07:07ID:???
>>597
それでは、確率と乱数とばらつきについて教示ください。
数学については、なにぶん素人なので。
06015962006/02/12(日) 10:10:06ID:???
サイコロ一万回程度ではばらつきが大きくて、偏りが出るということなんだけど。
0602nobodyさん2006/02/12(日) 11:07:16ID:???
質問です、
表示させるすべての桁でランダムで数字を表示するプログラムを改造して、アルファベットもランダムで表示させたいのですが、どう改造すればいいでしょうか?


ソースは、
# ランダム桁のランダム数字の生成
$max_num =1;
$min_num =1;
for( ; ; ){
$num_digit = rand($MAX_DIGIT)%$MAX_DIGIT+1;
last if($num_digit >= $MIN_DIGIT);
}
for($i=0; $i<$num_digit; $i++){ $max_num *= 10; }
$min_num = $max_num/10;
for( ; ; ){
$num = rand($max_num)%$max_num;
last if($num >= $min_num);
}

です。

0〜9まではこれで表示できるんですが、'a'〜'z'までを時間を種にして表示させたいんです。
0603nobodyさん2006/02/12(日) 13:32:27ID:???
@atoz = (a..z);
0604nobodyさん2006/02/12(日) 14:11:18ID:???
文字列の中から、「XXX号室」 の部分を抜き取ろうとしていますが、文字化けが起きて困っています。
XXX には半角アルファベット大文字か数字が入り、1桁から3桁程度です。
だいたいうまくいくのですが、「階」という漢字のあとにXXX号室が来ると化けてしまいます。

ソースコードは次の通りです。環境はWindows2000 ActivePerl5.8.7です。
my @a;
my @b;
push @a, "A4号室";#うまくいきます
push @a, "1FC5号室";#うまくいきます
push @a, "1階206号室";# K206号室 になってしまいます
push @a, "A棟207号室";#うまくいきます
foreach (@a){
push @b, "$&\n" if /[A-Z0-9]+号室/;
}
print @b;

「1階206号室」のときだけ「K206号室」になってしまいます。
何が原因で、どうすればよいのでしょうか。
どなたかご教授いただけると助かります。
0605nobodyさん2006/02/12(日) 14:38:27ID:???
>>604
「階」が Shift_JIS だと「8A 4B」なので二バイト目の「4B」が「K」にあたるのが原因だね。
/[A-Z0-9]+号室/s にすればいい。
06066052006/02/12(日) 14:39:03ID:???
ごめん、 Ruby と勘違いした。
Perl だとどうするんだろう?
0607nobodyさん2006/02/12(日) 14:44:47ID:???
/(?<![\x81-\xfc])[A-Z0-9]+号室/

てけとーな応急処置だけど、よかったらどうぞ。
0608nobodyさん2006/02/12(日) 14:46:18ID:???
シングルクオートと、quotemetaを試すがよろし。
0609nobodyさん2006/02/12(日) 14:50:41ID:???
>>608
すぐに気付くとは思うけど、今回のケースではそれじゃダメよん。
06106042006/02/12(日) 15:14:54ID:???
早速のレスありがとうございます。
原因は>>605さんのおっしゃるように、Shift_JISの2バイト目とマッチしてしまったからなのですね。
勉強になりました。
対処としては>>607でうまくいきました。ありがとうございました。

(?<![\x81-\xfc])の部分ですが、Shift_JISの2バイト目を取らないように、
「左側にShift_JISの1バイト目が存在しない位置」を指定しているという理解で合ってますか?
06116042006/02/12(日) 15:48:35ID:???
すみません、さっきの方法ではうまくいかない場合がありました。
>>604のコードには記述しませんでしたが、処理対象には●12号室 ■10号室 のようなパターンもあり、
これまでは上手くいってましたが、>>607では 2号室 0号室 と出力されてしまいます。
Shift_JISは使わないほうが良いのでしょうか・・・
0612nobodyさん2006/02/12(日) 15:59:29ID:???
そうだよ
0613nobodyさん2006/02/12(日) 16:57:35ID:???
んなら、ユニコードでも使ってみようか。

use Encode;

my $pattern = '([A-Z0-9]+号室)';
my $str = "1階206号室";
Encode::from_to($pattern, 'sjis', 'utf8');
Encode::from_to($str, 'sjis', 'utf8');
$str =~ /$pattern/;
my $match = $1;
Encode::from_to($match, 'utf8', 'sjis');
print $match;
06146072006/02/12(日) 18:51:15ID:???
ほんじゃぼくはアドホックに正規表現をいじる係ね。
あくまで >>613 の言うように utf8 で処理するのが王道なのは百も承知で。

push @b, "$1\n" if /(?:[\x81-\xfc].)*([A-Z0-9]+号室)/;
0615nobodyさん2006/02/12(日) 20:04:49ID:???
>600
乱数以外の偏らない別の方法って何?
ヒントだけでもいいから教えて

偏らないってどういう意味?
1万回やると「6」は1666回出るの?それとも1667回出るの?
0616 ◆TWARamEjuA 2006/02/12(日) 20:07:39ID:???
/[A-Z0-9]{1,3}号室/
0617nobodyさん2006/02/12(日) 20:09:39ID:???
/[A-Z0-9]{1,3}号室/i
または
/[A-Za-z0-9]{1,3}号室/
06186072006/02/12(日) 20:43:14ID:???
>>616-617
それだと、

>push @a, "1FC5号室";#うまくいきます

などで残念なことに。
0619nobodyさん2006/02/12(日) 23:28:00ID:ptODJMag
削除パスワード機能のついた掲示板を設置しているんですが
削除パスワードが“1111”や“1212”、“1122”みたいな単純なパスワードを弾くには
どうすればいいでしょうか?

if ($password = ~ /1111/){ $error = 'エラーです'};
if ($password = ~ /1212/){ $error = 'エラーです'};

みたいにいちいち指定するよりもスマートな方法を伝授してください


0620nobodyさん2006/02/12(日) 23:31:23ID:???
"単純"の定義が・・・
06216192006/02/12(日) 23:42:10ID:ptODJMag
削除パスワードは4桁の英数字にしてあるので
1111 などの連続
1212 1122 1222 などの2つの種類の文字のみ

のつもりです
06226042006/02/12(日) 23:54:16ID:???
>>613
うまくいきました。ありがとうございます。
調べて初めて知ったのですが、UTF8だと文字の途中のバイトでマッチしなくてすむようなので、
このやり方が適切みたいですね。

>>614
[\x81-\xfc]のあとのドットで2バイト目をマッチさせてるんですね。
ドットは任意の1文字としか考えてませんでしたので、途中の1バイトを1文字とみなして
マッチさせるとは思いもしませんでした。勉強になります。

>>616-617
そのやり方でも上記データを処理できますが、アルファベットは大文字固定で、
長さは3文字以上もありうるので[A-Z0-9]+になります。レスありがとうございました。
0623nobodyさん2006/02/12(日) 23:57:14ID:???
my %seen;
if (scalar (grep { !$seen{$_}++ } split //, $password) <= 2) {}

とかどうだろう。
06246192006/02/13(月) 00:18:53ID:NkDDMowL
>>623
どうもです

書き忘れましたけど最初↓
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};

これだとなんかおかしいんです
どこがおかしいのか自分でも
0625nobodyさん2006/02/13(月) 01:06:45ID:???
3桁程度って言ってるからわざわざ3桁までにしたのにorz
0626nobodyさん2006/02/13(月) 01:07:12ID:bzAWjmTk
WindowsのApacheで自宅サーバを立てました(ActivePerl)

プログラム中に
print $env = $ENV{'QUERY_STRING'};
と文を書き
$envに「name=maruyama」が入ることを期待して

URLに
http://www.hogehoge.jp/cgi-bin/index.cgi?name=maruyama
を打ち込みましたが「Internal Server Error」となります。

この場合URLの「?」の後ろ(name=maruyama)をブラウザに表示させるにはどのようにしたらよいのでしょうか?
0627nobodyさん2006/02/13(月) 01:11:46ID:???
my($query) = $ENV{'QUERY_STRING'} || "";
print $query;
0628nobodyさん2006/02/13(月) 01:12:32ID:???
あっ、こんてんとたいぷ はちゃんと書いてね
0629nobodyさん2006/02/13(月) 01:14:48ID:???
HelloWorld!から初めて欲しいね。
06306192006/02/13(月) 01:23:47ID:NkDDMowL
>>624をお願いします

if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};
0631nobodyさん2006/02/13(月) 01:33:47ID:???
>630
最後の2文字を入れ替えてごらん

それと・・・
>629
0632nobodyさん2006/02/13(月) 01:37:18ID:bzAWjmTk
>>627
違うところが間違ってました。
お答えありがとうございました。

自己解決しました。
ご迷惑をおかけしました
06336192006/02/13(月) 01:38:58ID:NkDDMowL
>>631
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです'};
でも
if ($password = ~ /(.)(\1|(.))(\1|\2)(\1|\2)/){ $error = 'エラーです';}
でも結果は同じでした


(.)(\1|(.))(\1|\2)(\1|\2) ←ここをどうすればいいんでしょうか?
0634nobodyさん2006/02/13(月) 02:17:57ID:???
>621

# 9文字以下はエラー
if(length($pass) < 9){ &error(); }
# 数字小文字大文字記号が混ざってないとエラー
if(!(($pass =~ /\d/) && ($pass =~ /[a-zA-Z]/) && ($pass =~ /[_!#$%&'()=\-"\[\]\|{}\/\.,\?]/))){ &error(); }
# 同じ文字が連続したらエラー
if($pass =~ /([0-9a-zA-Z])\1/g){ &error(); }
06356342006/02/13(月) 02:20:28ID:???
最後の行修正
$pass =~ /(.)\1/g
06366192006/02/13(月) 02:25:30ID:NkDDMowL
>>635
どうもです。

2種の文字で構成されるパスの場合のエラーの場合どうすればいいでしょうか?
0637nobodyさん2006/02/13(月) 02:28:03ID:???
お前ら釣られすぎ
0638nobodyさん2006/02/13(月) 02:49:38ID:???
>>623でいーんじゃないの?
0639nobodyさん2006/02/13(月) 02:54:32ID:???
>>625
それでも "1階23号室" が "K23号室" になっちゃってダメじゃね?
06406342006/02/13(月) 04:00:03ID:???
>636
ちったぁ考えろ
終了
06416192006/02/13(月) 04:12:30ID:???
>>640
正規表現の勉強し直せ
06426192006/02/13(月) 04:54:25ID:???
>>641
私も頑張るからさ
0643nobodyさん2006/02/13(月) 14:25:40ID:???
ある入門書には、
open(UNKO "kusai.txt");
@BENKI=<UNKO>;
みたいにopen()関数で開いたテキスト内容(別にテキストじゃなくても良いが)
を配列に代入してるけど、スカラーじゃ駄目なの?
スカラーだと変数が32bitしかないから、エラい人が個々の配列にに自動で文字列を
一文字づつ代入してくれるから?
06446432006/02/13(月) 14:26:52ID:???
ごめん、日本語になってない ○rz
脳内補正よろしく。
0645nobodyさん2006/02/13(月) 14:56:24ID:???
>>643
<>はスカラーコンテキストで使用すると一行読み込む。( $hoge = <FUGA> )
リストコンテキストで使用するとファイルをすべて読み込む。( @hoge = <FUGA> )
一気に配列に読み込む必要性が無ければ、
スカラーコンテキストで一行ずつ読み込んだ方が使うメモリーは少なくてすむので
私としてはそうすることをお勧めしたい。
しかし、一気に読み込むことでファイルをロックするべき時間が短くなるという利点もあり、
そういう風に一気に読み込むことを好む人もいる。前にこのスレで議論になったこともあった希ガス。

> 個々の配列にに自動で文字列を一文字づつ代入
配列の個々の要素に一文字一文字、ということ?一行ずつの文字列が入るよ。
$hoge[0] = "foo\n";
$hoge[1] = "bar\n";

> スカラーだと変数が32bitしかないから
Perlでは内部的に自動で整数型、不動小数点型、文字列型などを変換する。
ユーザ側は通常大きさを考えるようなことは無いし、この場合では文字列型になる。
0646nobodyさん2006/02/13(月) 18:09:49ID:???
>644
# メモリの許す限り全Read
@lines = <IN>;

# 改行まで
$line = <IN>;

メモリ使用量に関して645さんのを補完すると
foreach (<IN>){ 〜処理〜 }
じゃなくて
while (<IN>){ 〜処理〜 }
です。


・・・だよね? (;´∀`)
0647nobodyさん2006/02/13(月) 20:42:55ID:???
数字だけのを弾くとかすれば?どこらへんまで弾きたいのか分からないから何とも言えない
0648nobodyさん2006/02/13(月) 22:21:17ID:???
画面をFRAMEで縦に2分割してデータの読み書きのプログラム作ってます。
上のaaa.cgiはフォーム入力からデータをファイルに書き出すCGIです。
SUBMITで自分自身を呼び出して何回も書き込めるようにしています。
下のbbb.cgiはaaa.cgiで作ったファイルからデータを1件づつ読み込んでいます。
【疑問】aaa.cgiでSUBMITを押してもbbb.cgiが動かないので画面のデータが更新されない。
【希望】aaa.cgiで更新したデータをすぐに下のbbb.cgiを動かして画面を更新したい。
    bbb.cgiに更新ボタンを設置するのはやりたくない。

どうすればいいでしょうか?
0649nobodyさん2006/02/13(月) 22:38:17ID:???
チャット用のcgiをどっかから拾ってきて設置する。
0650nobodyさん2006/02/13(月) 22:43:31ID:???
> foreach (<IN>){ 〜処理〜 }
> while (<IN>){ 〜処理〜 }

この二つって何が違うのでつか?
0651nobodyさん2006/02/13(月) 22:51:19ID:???
リストを最初から最後まで繰り返す。
条件式が真の間繰り返す。
行入力演算子のときはwhile。
0652nobodyさん2006/02/13(月) 23:03:26ID:???
>648
そんなあなたには
つ【JavaScript】
0653nobodyさん2006/02/13(月) 23:11:16ID:???
aaa.cgiが更新されたのを認識したらparent.frames[1].以下略とかで更新
06546482006/02/13(月) 23:48:12ID:???
649さん、そういえばチャットと同じ構造でしたね。気がつきませんでした。
652さん、その手もありましたか。調べてみます。
653さん、キーワードありがとうございます。やってみます。

ヒントありがとうございました。<(_ _)>
0655nobodyさん2006/02/14(火) 00:32:58ID:INKxTjsz
print qq(<FORM method="POST" action="$CGINAME">\n);
print qq(<INPUT type="submit" value="push">\n);
print qq(<input type="hidden" name="mode" value="change">\n);
print qq(</FORM>\n);

これを実行する(WEBページでPUSHボタンを押す)と「ファイルのダウンロード」(ローカルに保存)となってしまい、CGIが実行しません。
CGIを実行させるにはどのようにしたらよいのでしょうか?
0656nobodyさん2006/02/14(火) 00:51:49ID:???
>>650
・foreachやforはリストを元にしたループも可能。リストコンテキスト。ループ前に全部読む。
・while(<FH>)はwhile(defined($_ = <FH>))の略記。スカラーコンテキスト。ループ1周で1行読む。

>>655
実際に実行されてる可能性もある。とりあえずそれをダウンロードして中身をチェック。
CGIのプログラム本体が落ちてきたのならサーバ側の設定の問題でPerlは関係ないだろう。
06576552006/02/14(火) 01:45:00ID:INKxTjsz
ありがとうございます、
Apacheの設定ですかねえ。
どこをどのように書き換えたらよいのかよくわからないです・・・。
0658nobodyさん2006/02/14(火) 01:51:15ID:???
Apacheの質問は自宅鯖板でどうぞ。
0659nobodyさん2006/02/14(火) 02:08:04ID:???
CGIでPOSTで受け取ったデータを使うとき、
read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
は
$str = <STDIN>;
とどこが違うんですか?
0660nobodyさん2006/02/14(火) 02:26:53ID:???
俺も具体的なことわからなかったからググると2分でわかった
0661nobodyさん2006/02/14(火) 04:01:35ID:???
URL Encoded しかあつかわねぇ!ってなら差は無いけど Multipart を考慮するなら read を使う
06626432006/02/14(火) 13:54:25ID:???
みなさんどうもありがておう。
つまり便器に入ったウンコを一段ずつ取り出すには配列の個々にアクセスすれば良い訳ですね。
0663nobodyさん2006/02/14(火) 16:36:29ID:TPTf1Qt3
全角文字を含む入力データのチェックをしたいのですが、
(ひらがなのみとか、全角文字のみとか、半角英数のみとか)
何か情報がまとまってあるところないでしょうか?

というか、今ひらがなのみはなんとか以下のコードで動いたんですが

print "Content-type: text/html; charset=Shift_JIS\n\n";
$pattern = '(?:\x82[\x9F-\xF1])*';

$data =~ /$pattern/;
if ($& eq $data){
print "match";
}else{
print "unmatch";
}
exit;


なんかあやしいです。
回りくどいし
0664nobodyさん2006/02/14(火) 16:47:09ID:OAiNE+tI
1 :知りたいこと
cgiが”更新 ”ボタンで呼び出されたのかどうかが知りたい
2 : やってみたこと、
cgi-lib.plの &ReadParse(*form)でformの値を取得してみた。
3 : でも何も新しい値が入っていない

ごめんなさい、どうやって類似の記事を探したらいいのかわからなくて
せめてヒントをお願いします。m(_ _)m
0665nobodyさん2006/02/14(火) 17:17:27ID:???
よく使われるhogeって何?
0666nobodyさん2006/02/14(火) 17:31:14ID:???
>>665
サンプルコードなどで適当に変数名をつけるときに使う
英語ではfooやbarが使われるのでfoo,barについてはrfcにもなっている

ほげ学のサイトがあるので探してみ
0667nobodyさん2006/02/14(火) 18:13:45ID:???
>664
つ【アクセスログ】
0668nobodyさん2006/02/14(火) 18:19:24ID:???
>>664
本当にやりたいことは違ってたりしない?
二重投稿を防ぎたいとかそういうことだったりしない?
0669nobodyさん2006/02/14(火) 19:20:22ID:???
>>663
つ~ /\x81-\xff/
0670nobodyさん2006/02/14(火) 21:32:00ID:???
たまには頭使ってみようかな・・・
コントロールコードを拒否したければ
\x0-\x1f の範囲でオケなのかな?
0671nobodyさん2006/02/14(火) 22:37:15ID:mb5R1R6v
すいません質問させてください
Perlで作ったおみくじCGIをサイトに置いたんですが
わたしのサイトに来てくださる人の携帯(DoCoMo)では動作しないって言われました
それでわたしも携帯で動作を確認するとやっぱり動きませんでした
PCでは問題なく動作するのですが携帯向けには何かしなければならないのでしょうか?
>>8-で紹介されているサイト様も見てみたんですが書いてありません
詰まってしまいました
どなたか原因が分かりますでしょうか?
0672nobodyさん2006/02/14(火) 22:52:06ID:???
>>671
http://pc8.2ch.net/test/read.cgi/tech/1138519327/395
レスもらってるんだから、調べてからにして下さい。
動作しない、だけでは解決のしようがありません。
0673nobodyさん2006/02/14(火) 23:13:17ID:mb5R1R6v
>>672
すいません、そこにもないです

それからレスはhttp://pc8.2ch.net/test/read.cgi/tech/1138519327/395
で誘導されたので気づきませんでした
0674nobodyさん2006/02/14(火) 23:20:59ID:???
>673
誘導してもらってるのに、全然読んでないことだけは分かった。
シュミレータで確認汁。
それと、動かないだけじゃわかりません。
0675nobodyさん2006/02/15(水) 00:01:00ID:???
× シュミレート
○ シミュレート

ここもゆとりんぐ全開かwww
0676nobodyさん2006/02/15(水) 00:02:40ID:TfAwMHcm
>>674
名前を入力してもらいボタンを押すと運勢が出るという
おみくじCGIでPOSTメソッドです
携帯だとボタンが押せない状態なんです

0677nobodyさん2006/02/15(水) 00:06:18ID:???
シュミレート の検索結果 約 58,200 件中 1 - 10 件目 (0.24 秒)
企業でも普通に使ってるみたいw
0678nobodyさん2006/02/15(水) 00:13:03ID:???
企業が使ってるから正解ではない
ゆとりんぐは勉強してろ
0679nobodyさん2006/02/15(水) 00:15:54ID:???
>>678
何事も楽しめ
0680nobodyさん2006/02/15(水) 00:19:54ID:???
(´-`)。oO(…skk で /simulate で変換すればいいのに…)
0681nobodyさん2006/02/15(水) 01:05:24ID:???
1skk=3,7yenだそうだ
06826642006/02/15(水) 01:44:50ID:AsKZTDBd
>667 668サンクス。本当にやりたいことは

a.cgiのボタンを押す->入力されたデータにエラーが無いかチェック

0.エラー -> a.cgi でエラー表示
1.エラーがない ->a.cgiでBingo表示

0の状態でF5押しまくってると1の画面が表示されてしまいます。
a.cgiで結果を表示させるのが、そもそもの間違いなのでしょうか?
06836642006/02/15(水) 01:57:37ID:???
このスレに要点を書いてみたら普通におかしいな>682

入力されたデータにエラーが無いかチェック

に内在バグがきっとあるに違いない。という方向でちょっとダイブしてきまつ。
0684nobodyさん2006/02/15(水) 03:37:26ID:???
つ チラシの裏
0685nobodyさん2006/02/15(水) 07:26:25ID:???
>>676
そういうのは実際のソース見ないとわからんよ
Javascript使ってる可能性も考えられるしね
0686nobodyさん2006/02/15(水) 10:29:13ID:???
>>669
それって、二バイト文字の1btyle目のコードですよね。
組み込んでみます。

ちなみにこういうのって一覧表のあるサイトってありますか?
今は、IMEパッドで見てるんですが、なんか微妙に異なるようですので。
0687nobodyさん2006/02/15(水) 11:13:19ID:???
>>686
漏れはいつもここを薦めている。変換則も(Cが少々読めれば)わかるし
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

UTF-8についてはRFCを読んで調べたけど解説しているサイト無いかな…
0688nobodyさん2006/02/15(水) 15:21:01ID:PmYHM0Bw
次の文でFormの値を取り込んでいるのですが、この処理を行った場合その後の処理は無視される理由が分かりません。
分かる方がおりましたら教えてください。

subloadFormdata{
 my ($query, $pair);
 read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
 print $query;
 foreach $pair (split(/&/, $query)) {
  my($key, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
  $value = jcode::sjis($value);
  $value =~ s/&/&/g;
  $value =~ s/</</g;
  $value =~ s/>/>/g;
  $value =~ s/\x0D\x0A/<br>/g;
  $value =~ tr/\t/ /;
  $FORM{$key} = $value;
 }
}
-------------------------------------
たとえばメインルーチンで
print "ここは出力される";
loadFormdata();
print "ここは出力されない";
0689nobodyさん2006/02/15(水) 15:29:27ID:???
subloadFormdata || jcode::sjis 呼べない
0690nobodyさん2006/02/15(水) 16:11:29ID:RdFiluwL
>>685
ソースを見なきゃ分からんようなCONTENT_LENGTHのことだと
も気づかないアフォは発言すべきじゃないな。

>>686
~ /[\x81-\xff][\x40-\xff]/ ←これで全角全て拾える

0691nobodyさん2006/02/15(水) 16:42:00ID:???
>>690
DoCoMoはContent-lengthが必須なのは知ってるがボタンが押せないという表現が気になった
0692nobodyさん2006/02/15(水) 16:52:35ID:???
>691
だから、HTML見直せとiモードの解説サイト貼ってあるのにw
0693nobodyさん2006/02/15(水) 17:03:26ID:???
Content-Lengthは吐かなくても問題なく表示できる。
-1を吐いた場合ですら表示できる。
0694nobodyさん2006/02/15(水) 17:15:35ID:???
少なくとも Apache で CGI 経由なら、Content-Length ヘッダは
httpd が補完してくれるのでプログラム側で吐く必要は無い。
むしろ陽に吐いた方が、自動広告挿入などでサイズが変わる
場合に不具合の元となる。
0695nobodyさん2006/02/15(水) 17:50:41ID:???
>>693
表示は出来るが実行はできないだろ
0696nobodyさん2006/02/15(水) 18:27:23ID:???
>>694
> 少なくとも Apache で CGI 経由なら、Content-Length ヘッダはhttpd が補完してくれるので

ホント?
0697nobodyさん2006/02/15(水) 20:25:22ID:???
socketを使用してSSL通信を試みているのですが、下記のエラーで
はまってしまっております。

Bad Request
Hint: https://example.com:443/

ソースは下記で、HTTPでは正常接続の確認が取れました。
ご教示いただけますと幸いです。

use Socket;
my ($host, $filename, $data) = @_;
my $return_value;
my $port = 443;
my $iaddr = inet_aton("$host") or return 0;
my $sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or return 0;
connect(SOCKET,$sock_addr) or return 0;
select(SOCKET);
$| = 1;
select(STDOUT);
my $len = length($data);
print SOCKET "POST /$filename HTTP/1.0\n";
print SOCKET "HOST: $host:$port\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\n";
print SOCKET "Content-length: $len\n\n";
print SOCKET "$data";
print SOCKET "\n";
while(<SOCKET>) {m/^\r\n$/ and last;}
while(<SOCKET>) {$return_value .= $_;}
close SOCKET;
return $return_value;
■ このスレッドは過去ログ倉庫に格納されています