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

【Perl】初心者コーナー Part19

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/01/11 13:52ID:???
初めに→「perl」その物のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

あとは>>2-10にまかせた。
040439803/01/23 11:56ID:???
>>402
evalでチェックを行ったところ、
mimew.plはきちんと読み込まれていました。
しかし、あいかわらず

Undefined subroutine &mimew::mimeencode

と出力されています。
0405nobodyさん03/01/23 11:59ID:???
>>400
returnは値を1つしか返せないよ。
こういうときはリファレンス渡しにして、サブルーチン側で直接値を変更したほうが
いいかもしれない。

&hoge(\%aaa, \@bbb);

sub hoge {
my ($aref, $bref) = @_;
$aref->{hage} = "ccc";
$bref->[0] = "ddd";
}
0406nobodyさん03/01/23 12:15ID:???
>>398
バッファリングしないようにすれば動く。
0407nobodyさん03/01/23 12:53ID:???
例えば単純変数や配列変数を使う時、
1.作業用の配列を使いまわす事がある
2.分かり易いように名前を決めて、1つの項目しか入れない
場合によって、違うかもしれないけど、貴方はどっち派?
040839003/01/23 13:00ID:???
>>407
おれは2
今の時代、よっぽど負荷がきになるときいがい
2にして、わかりやすいソースを書いたほうがマシ
0409nobodyさん03/01/23 13:13ID:nFHVv77n
CGI経由でファイルを作成しようと思い、
実験として次のソースを書いてみました。
ファイル名:test1.cgi

#!/usr/local/bin/perl
open(FILE,">>./1234.txt");
print FILE "0123456789\r\n";
close FILE;

これをFreeBSD4.7+apacheが動いているコンピュータにいれて
別のコンピュータにブラウザでこのファイルのアドレス
を指定してやると「内部サーバーエラー」が出てしまいます。
何か間違いがあるだろうかと、
apacheが動いているコンピュータで直接
perl test1.cgiとやったところ、1234.txtのファイルが作成されました。
ネットで調べたところ、Apacheのユーザに権限がないと
ファイル作成などはできないということが書いてあったのです、
1234.txtが作成されるディレクトリのパーミッションを775にして、
apacheのユーザを、そのディレクトリのグループのユーザに
加えてみて、今度はapacheのユーザでperl test1.cgiを実行しました。
そうしたところ、上手く作成できたので、今度は外部から試してみました。
そしたらやっぱり内部サーバエラーになってしまうんです。
どこがまずいのか分かりません。
乱文になってしまいましたが、どなたか私の間違いを
指摘して下さいませんか?よろしくお願いします。
0410nobodyさん03/01/23 13:18ID:???
>>409
print "\r\n\r\n";を加えれば動くでしょう。
0411nobodyさん03/01/23 13:25ID:jz3+5dSU
>>409
Apacheにヘッダーを送れ。
print "Content-type:text/plain\n\nファイル作成しますた。\n";
041240903/01/23 13:28ID:???
>410さん
#!/usr/local/bin/perl
print "\r\n\r\n";
open(FILE,">>./1234.txt");
print FILE "0123456789\r\n";
close FILE;
というふうにしてみたんですが、今度はダウンロードしますか?の
ダイアログが出てきてしまいました。どうなってるんでしょうか?
0413nobodyさん03/01/23 13:38ID:???
ダイアログが出たということは、正常に動作しています。

PerlをCGIで動かす場合には、HTTPヘッダを出力する必要があります。
CGIで動かした時にHTTPヘッダがなければ、>>409のようにエラーで動きません。
それだけです。
041439803/01/23 13:46ID:???
>>406
申し訳ございません。
おっしゃる意味が分からないのですが・・・。
0415nobodyさん03/01/23 13:54ID:Ah3Ym1t7
質問します。

文字列中に
#1234(1234は3〜6桁の数字)
と有った場合、
<a href="http:/hoge.com/hoge/1234">#1234</a>
                    ~~~~~ ~~~~~~~
#を外した数字↑   ↑元の文字列

と言う風に変換したいのですが、上手くできません。
どなたかご教授ください。
よろしくお願いします。
0416nobodyさん03/01/23 13:55ID:???
>>414
プログラム的に説明すると、$|=1;を先頭の方に加える。
バッファの意味は辞典なり検索なりして調べてください。
0417nobodyさん03/01/23 14:33ID:???
>>415 こ、今度だけだぞ
my $str = "#1234(1234は3〜6桁の数字)";
(my $tr = $str )=~ s!(#(\d{3,6}))!sprintf("\"http:/hoge.com/hoge/$2\">$1</a>")!ge;
print "$str ->\n$tr\n";
0418nobodyさん03/01/23 14:36ID:???
>>417
おっと、いけねぇ、ミスってもうたわい。まっ、いいか。
0419nobodyさん03/01/23 14:47ID:???
s!#(\d{3,6})!<a href="http://hoge.com/hoge/$1">#$1</a>!g;

補完
042039803/01/23 14:47ID:???
>>416

出力バッファを吐き出すことと、
サブルーチンが見付からないこととはどのような関係があるのでしょうか。
$|=1;を加えてみましたが、結果はかわりませんでした。

ただ、気になるのですが、
$subject = mimeencode(jcode'jis($subject);
と呼び出した場合、
Undefined subroutine &該当コードが含まれているパッケージ名::mimeencode
とエラー出力されます。

mimew.plは正常に読み込んでいるようなのですが・・・。
042139803/01/23 14:52ID:???
ちなみにjcode'jisは正常に呼び出せています。
0422nobodyさん03/01/23 15:03ID:Ah3Ym1t7
>>417-419
ありがとうございました。
上手くいきました。

0423nobodyさん03/01/23 15:15ID:???
>>421
mimew.plのエラーじゃないだろ。冷静になってよく考えろ。
0424nobodyさん03/01/23 15:19ID:???
>>409
さっさと411をためせよ
0425nobodyさん03/01/23 15:21ID:???
>>398
だから、なんでアホみたいにprint MAIL なんとか
でやるの?バッファリングするなっていわれてるのに
$mess にぜんぶメールいれといて
system (,"|/usr/sbin/sendmail -t -i , $mess);
かなんかでポンとやれよ。
ファイルハンドルの意味わかってんの?
042639803/01/23 15:28ID:???
解決しました。
mimew.plを見たら、パッケージ名がMIMEと設定されていました。
呼び出しミスでした。お騒がせ致しました。

ただ、jcode.plの場合はrequireするだけで良かったって言う、理由が、よくわからないままです。
よろしければご教授ください。
0427nobodyさん03/01/23 15:30ID:???
>>426
mimew.plのあたまのほうは?
おれはrequireするだけでうごいてるけど
0428nobodyさん03/01/23 15:41ID:???
>>426
あんたのmimew.plにmain'mimeencodeサブルーチンが欠けているか
main以外のパッケージ空間を使用しているからでしょ。。
042942603/01/23 15:46ID:???
>>423,425,427,428
ありがとうございました。
がんばります。ごめんなさい。
0430nobodyさん03/01/23 17:27ID:kDsUWLbm
>>406 >>416 >>425
今回の問題にバッファリングは関係ない。closeしているから。
なんでも$|=1って書けばいいものじゃない。あほか。
0431nobodyさん03/01/23 17:34ID:kDsUWLbm
もしMAILに対してバッファリングをしないように設定したいのであれば、
select(MAIL); $| = 1; select(STDOUT);
こうするべき。この辺りはわかって言ってるんだよね?
043240903/01/23 18:06ID:???
>>411さん,>>413さん,>>424さん
ありがとうございます。上手く動きました。
何度試してもずっと内部サーバエラーですが出力されていたのですが、
ブラウザを閉じてもう一度アドレスを入力したら動きました。
なんだかふに落ちないのですが、ひとまず動いたのでよしとします。
一時ファイルとかそんなのが問題になってるんでしょうかね?
0433nobodyさん03/01/23 18:19ID:???
そうですね。
0434nobodyさん03/01/23 19:02ID:0ikp7K62
モジュールをwinxpでインストールしたいのですが
解説書などを見ても意味がわかりません。
$su が最初に出てくる画面は何のアプリを使ってるのでしょうか?
0435nobodyさん03/01/23 19:26ID:/BytM6mn
>>434
Linux
FreeBSD
cygwin
0436nobodyさん03/01/23 21:01ID:???
>>435
UNIX系と言えば丸く済むような。
0437nobodyさん03/01/23 22:30ID:CHeIi8Oa
会社のネットワークからだと、
制限かかってて見れないページがあるんですが、
自宅のwebサーバーを経由して、見れるようにする
方法ってないでしょうか?

0438nobodyさん03/01/23 22:33ID:vGzRwfzk
>>437
串じゃあかんの?
0439nobodyさん03/01/23 22:42ID:JsPmMcCV
文字列を、ある文字コード分だけずらすには
どうすればよいのでしょうか?
$char = "ABcd";

何らかの処理
(例えば +10hさせる。)
↓
$char が QRst となる。


文字を取り出すのはやってみたんですが、
文字をずらすのがわかりませんでした。
--------------------------------
$char = "ABcd";
for ($i = 0; $i < length($char); $i++) {
$c = substr($char, $i, 1);
}
--------------------------------
0440nobodyさん03/01/23 22:51ID:KCPQ5bMl
>>439
$c += 10;
044143803/01/23 22:54ID:???
>>440
そうやると$cに数字の10が入ってしまうんですけど・・・
044243903/01/23 22:55ID:???
↑失礼
ハンドル間違えました。
044344003/01/23 22:59ID:KCPQ5bMl
$c++;
を必要なだけ繰り返す。
0444nobodyさん03/01/23 23:07ID:???
>>441
char型は整数型なんだけどね。
0445nobodyさん03/01/23 23:10ID:CHeIi8Oa
>438
串刺すとみれるんですか?
.pacのファイルを指定してプロキシ経由してるんですが、
その辺よく分からないので、よろしかったらご指導ください。。





0446貧乏パーラー03/01/24 00:19ID:???
>>437
俺も会社からちくり板見るれなくなって欲求不満だった。
だから某所のコード改造してから自作したよ。
これでもパーラーだからねピュアperlで作った簡単httpポートフォワーダだよ。
0447貧乏パーラー03/01/24 00:20ID:???
>>446
---この下から---
begin 666 http-tmp2ch.zip
M4$L#!!0````(`&F_-RZKG&Q7[0,```<*```.````:'1T<"UT;7`R8V@N<&R5
M5FUOVD@0_FQ^Q90XQ:A@`]%))R,XI6W:1,H!"MR+5!IDS!*LFK5O=PF'0OK;
M;V=?,'"D:E8"KW>?F7EV=N:!LS?!BK,@S>(H#:8)#7+"TM+90HB\+I9Y"]0L
MSYB`><;6$9L1!N\W<.V+[!O)-#(,@D6V)'GT0"Y\FLS%QH^S9:`0-+BB#_7W
M06G%"7#!DEBTU?RF'X;#+/Y&]M])2G!_N0'W]G(V8]`!]_+N\Y]?&E_AMV(:
M0D4Q7F1<5`Q\@!PMO(EP\ABEGGVOHE%+#H,?74O;';Y5N&\I]_+L?BM>^)2(
M"AB+@P@71Q$N=(1?&PC/64(%E,<4LP."193#S2":S4)SK-N$"T)#PUH#D%!H
M>.%RJ"..:5G'3Y7-)#<LE*G>X3*-DW64B(0^R*TBLV%XT[L:U;N4K#T=$N3H
M=&'8__WR[P_]7J]6@I\=MYAQG8/N`9M7^!BP3&1J)GU41)Q77F%\1[!.<$CC
MYFN9ZW+JFL*JP<^;5]NE]2))"7@VV9C__:37NU$<DUQ4GY17"?/<Z6I><QGY
M9T6XD!X<Y<)K5N&IY#A\PQF)9I[R4@,%AF9##@FU<:TU^!V%*':2.7C%=N<[
M+(,Q&U/\;.6#!F"8_,#@WAOTAZ/MYZM1%13>D4,QQZZ2G-35@BMK9R(-:RY'
MKG@2.:06>#Q/$^%5QK12G%.?3HY`57,`;]_"++.+CCOI0$7M0,4WI:X=.L_F
M&=R1.6&$G;+]SK=&;K[<!U_?V1?M:)L=>;+,5?HFONS&L@GV7)R5F5,F$1:%
MFQ/"T%G5('<+]L;K75RAT9(8Q)&+J@0B#N>3A'J%Q[8-JI8F"^WT@0B<33=H
MX!D:</EI@HU[;!-I14RD*$VHR"*#-S!]09V&>3,!#K+L6O'06M8^J!'CX$4!
M00_@.`/)9-=+JE0..TDC=CIQ0B`DPLK`:15PJD?,5/F^`4/PJ+81X&C%U<U9
MOAZ-!D'3;\`OC0;$$:69`$9XECX2'WND?.`>ZT$]U9RD4F.>#O<=KGZ7/-L"
MX&X[S3:8U>'H8_^/4?7(YXZ1HF1K\1BTJU'9DCRX#P""A^5I3V6`>AUL"W,1
M,5&O__\L-NX+`4_Y(G1F/#FVW+B4&]A[1[%*Y:^'<J=6=RGY4484TH0\/S__
MBTREB$<S&")[DYLB\(%"JG*U8=_)IMHIII%,7FBF%$TP)OMUH"#(6&^M:$HX
M]]1J$<-)HT*$L!+,\R7J5[V/>\1A3T_B-./$U@BTS]!D2-BC_,.$S00?<+^D
MT38HP#-^F:+;!>R1?[%B9;@YRY8P9=F:$V8R17&S[6ACO%;]77#5D21=?;U#
MG0N;:L1:JEK0GTNE_P!02P$"%``4````"`!IOS<NJYQL5^T#```'"@``#@``
M```````!`"``MH$`````:'1T<"UT;7`R8V@N<&Q02P4&``````$``0`\````
&&00`````
`
end
---この上まで----
0448nobodyさん03/01/24 00:24ID:???
>>447
ishてまた懐かしい。
0449nobodyさん03/01/24 00:28ID:f7nkT00I
>>439
$char="ABcd";
print pack("C*",(map { $_+10 } unpack("C*",join('',$char))));

別に1行でなくてもよいけれど、、、
0450貧乏パーラー03/01/24 00:31ID:???
>>447
上のuueコード部分をテキストエディタにコピペして(ファイル名http-tmp2ch.uue)

WinZIPでそれを開いてその中に出来ているhttp-tmp2ch.plを適当なディレクトリにコピ
Dos窓開いてhttp-tmp2ch.plをコピーしたディレクトリにcdして

使用方法
perl tmp2ch.pl パソコンのDNSホスト名(もしくはIPアドレス) 任意のポート番号 2ch板ホスト名 80
として起動
そしたらブラウザから
http://パソコンのDNSホスト名:任意のポート番号/2ch板ホスト名以降のアドレス
として見る。
例
c:\hoge>perl http-tmp2ch.pl Mypc.com 2222 pc.2ch.net 80
ブラウザからここを見る例
 http://Mypc.com:2222/test/read.cgi/php/1042260745/l50
他の2ch板指定したい時この要領でホスト名と別のパソコンポート指定汁。

ためしにパソコンのホスト名をlocalhostとして試しても良し。
045144903/01/24 00:35ID:???
join('',$char)
を
$char
に訂正。
無意味だ欝
0452nobodyさん03/01/24 00:38ID:???
>>439
my $char = "ABcd";
$char =~ s/(\w)/chr(ord($1) + 0x10)/ge;
print $char; # > QRst

私はこういう方法で偶に変換してます。。
0453nobodyさん03/01/24 01:06ID:???
Configuration Error
The server encountered an error while processing your request.
Please contact the administrator of the referring document and inform them of the time the error occurred, and anything you might have done that may have caused the error.



--------------------------------------------------------------------------------

The CGI environment at the time of this error was

こんなのが表示されたんですがどうすればよいでしょうか?

0454nobodyさん03/01/24 01:12ID:???
>453
ちゃんとローカルでテストしましょう。
そのエラーメッセージじゃ何もわからんよ。

まずはローカルでテストできる環境を作って、そこでエラーメッセージをちゃんと吐かせる。
そしてエラーメッセージの意味を調べて、スクリプトを修正する。
045543903/01/24 01:13ID:???
>>449,452
ありがとうございます。
今までネットで探していたら、
452さんも使われているchr関数を見つけましたので
一端ordで変換してchrで戻してみました。

449さんも使われているpackも見てたのですが、
ちょと私にはまだ難しかったみたいです(^^;
0456nobodyさん03/01/24 01:17ID:???
>>454
すみません
ローカルって何ですか?
0457nobodyさん03/01/24 01:19ID:???
>>453
453の:とるにたらない人さん:03/01/24 01:06ID: ???
Configuration Error
コンフィギュレーションエラー
The server encountered an error while processing your request.
あなたのリクエストを処理する間に、サーバーはエラーに遭遇しました。
Please contact the administrator of the referring document and inform them of the time the error occurred, and anything you might have done that may have caused the error.
どうか指名しているドキュメントのアドミニストレーターと連絡を取って、そして(彼・それ)らにエラーが起こった時とエラーを起こしたかもしれないあなたがしたかもしれない何でも知らせてください。
0458nobodyさん03/01/24 01:24ID:???
>>457
よくわからいので初心者でもわかるように説明してもらえないでしょうか?
お手数かけます
0459nobodyさん03/01/24 01:34ID:???
>456
あんたのパソコン。
サーバー上でCGIのテストするな。
後は検索して調べな。
説明ページは探せばいくらでもある。

それ読んで分からないようなら、CGIの改造とか色々考えるな。
改造せずにそのまま設置しようとしてそのエラーなら、配布元の指示に従ってちゃんと行動してないって事。
とにかく書いてある文字を読め。
0460nobodyさん03/01/24 06:22ID:???
>>456
自分のパソコンにPerlをインストールして、それで走らせて
デバッグする。WinでもMacでもあるよ。
0461nobodyさん03/01/24 09:10ID:???
これって2ch掲示板のことじゃ・・・・
0462nobodyさん03/01/24 14:56ID:Mw0EqohX
>>461
read.cgiはcじゃなかったっけ
0463nobodyさん03/01/24 15:21ID:8KdGKoGc
★http://jsweb.muvc.net/index.html★
 ★こんなサイト見つけました★
0464nobodyさん03/01/24 15:49ID:???
検索フォームから、例えば何らかのperl関数を入力された場合、
CGIが暴走するということはありえるでしょうか?
0465nobodyさん03/01/24 15:55ID:???
>>464
evalなんてバカな関数使ってるならそれなりにありえる。
0466nobodyさん03/01/24 16:04ID:???
>>465
ありがとうございます。安心しました。
0467free se03/01/24 16:04ID:???
まああれだ、好きな音楽を聴きながら仕事している方が効率いいな。
おまえらはどうだ?
0468nobodyさん03/01/24 16:15ID:???
>>467
音楽聴いてるとソース書けない
0469nobodyさん03/01/24 16:20ID:???
>>467
無音に限る
0470nobodyさん03/01/24 17:18ID:???
>>467
集中したい時は耳栓するぞ。
そうすると呼吸の音が気になってくるんだなこれが。
0471nobodyさん03/01/24 17:20ID:???
息止めろ。
0472nobodyさん03/01/24 17:25ID:???
>467
簡単な物は音楽が鳴っていた方がいい。
複雑な物になると鳴ってない方がいい。
047346703/01/24 17:33ID:???
{解決]
よく考えると俺も472さんと一緒だな。
無音は気持ち悪くて、流石に嫌だけど。
0474nobodyさん03/01/24 17:43ID:i/64hvW7
wwwmailを使ってメール送信フォームを作ったのですが
このように表示されます。

下記のメールを送信しました。ありがとうございました。


--------------------------------------------------------------------------------
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
To: aaa@aaa
From: aaa@aaa
Subject:wwwmailからのメール

氏名 =
住所 =

といった感じなのですが
「下記のメールを〜」の下にそのまま「氏名=」と来たほうが
送信した側もわかりやすいように思うのですが
「Content-Type:〜Subject:wwwmailからのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
0475nobodyさん03/01/24 17:53ID:???
ソース見せて (*´д`)ハァハァ
0476nobodyさん03/01/24 17:56ID:???
>>474
これあぶねーな まだこういうの作ってる人いるんだ。
こえー。大丈夫?責任とれるのかな
0477nobodyさん03/01/24 17:57ID:???
>>474
print のところをはずせばいいだけだとおもうが。
でもあぶねぇなぁ。こんなの本当に設置すんの?
047847403/01/24 18:12ID:i/64hvW7
皆さんレスありがとうございます
すみません、どんな風に危ないんでしょうか?
非常に不安になってきたのでよければ詳しく教えてくれませんか??
0479nobodyさん03/01/24 18:22ID:???
誰でも何処でも何通でも送れるから。
0480nobodyさん03/01/24 18:23ID:???
>>476>>477

危ないって何が?
Toを使用者が指定できるとか?
0481nobodyさん03/01/24 18:24ID:???
ソース見せて (*´д`)ハァハァ
0482nobodyさん03/01/24 18:25ID:???
>>474
設置した場所にBASIC認証かけておいてね。
0483nobodyさん03/01/24 18:27ID:???
>>482
Toを固定するだけでいいと思うけど
0484nobodyさん03/01/24 19:34ID:???
危ないかどうかはソース次第だとおもうけど。
ただ、Toを自分のメアドにしておいてもメールボムとか怖い。
048547403/01/24 19:43ID:i/64hvW7
すみません初心者なのでソースを出して良いのかどうかの
判断がつきません。wwwmailは「とほほ」にある
メール送信フォームを設置するためのソフトです。
危険でしょうか?
0486nobodyさん03/01/24 20:01ID:???
とほほは危険
0487nobodyさん03/01/24 20:05ID:???
>>485
個人情報(自分のメアドとか)、パスワードとかが入ってるなら、それだけ消してソース出してみ。
ソース見せたくらいじゃどうってことないよ。
0488nobodyさん03/01/24 20:13ID:QLwP0ckk
xreaに12chのスクリプトを置いたのですがどうも書き込み後、index2.htmlに戻るときエラーが発生してしまいます。
たしか、XREA用に何かいじらなければならなかったような気がするのですが思い出せません。

どなたかご存知の方、ご教授願います。
0489nobodyさん03/01/24 20:18ID:???
>>488
xrea.com part28
http://pc.2ch.net/test/read.cgi/perl/1042433690/

こちらへどうぞ。
049048803/01/24 20:20ID:???
>>489
板違いすんません・・・。では。
049147403/01/24 20:27ID:i/64hvW7
ソースです。

#!/usr/local/bin/perl
#=====================================================================
# カスタマイズ
#=====================================================================
# ★ perlのパス名
# このファイルの先頭の1行を、あなたが利用するサーバーにインストー
# ルされた perl コマンドのパス名に応じて変更してください。例えば、
# 私が加入している BIGLOBE では、#!/usr/local/bin/perl となります。
# 解らない場合は、プロバイダやサーバの管理者にお問い合わせください。
# 「#!」の前には、空文字や空行や他の文字がはいらないようにしてください。

# ★ 送信先メールアドレス
# $mailto = '[email protected]'; のようにあなたのメールアドレスに
# 書き換えてください。
$mailto = '';

# ★ サブジェクト(件名)
# 送信されるメールのサブジェクトを指定してください。
$subject = 'WwwMailからのメール';

# ★ メール送信コマンド
# WebサーバーがUNIXの場合はsendmailコマンド、Windows系の場合はBLATJ.EXE
# コマンドのパス名を指定($mailcmd = 'C:\BLATJ\BLATJ.EXE'; など)してく
# ださい。このコマンドが存在しない場合は、WwwMail は動作しません。また、
# 存在していても、メール送信の設定が行われていない場合があります。詳細
# はプロバイダやサーバーの管理者にお問い合わせください。
$mailcmd = '/usr/lib/sendmail';

049247403/01/24 20:28ID:i/64hvW7
# ★ 送信結果メッセージ(ヘッダ)
# <<END_OF_DATA 〜 END_OF_DATA の間を好みにあわせて変更してください。
$header = <<END_OF_DATA;
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<title>メール送信結果</title>
</head>
<body>
<h1>メール送信結果</h1>
<hr>
<p>下記のメールを送信しました。ありがとうございました。</p>
<hr>
END_OF_DATA

# ★ 送信結果メッセージ(フッタ)
# <<END_OF_DATA 〜 END_OF_DATA の間を好みにあわせて変更してください。
$footer = <<END_OF_DATA;
<hr>
<a href="../index.htm">[戻る]</a>
</body>
</html>
END_OF_DATA

049347403/01/24 20:29ID:i/64hvW7
#====================================================================
# 自己診断機能。
#====================================================================
# メール送信がうまく動作しない時に、
# http://〜/〜/wwwmail.cgi?test の形式で呼び出してください。
if ($ENV{'REQUEST_METHOD'} eq "GET") {
print "Content-type: text/html; charset=Shift_JIS\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<title>WwwMail自己診断</title>\n";
print "</head>\n";
print "<body>\n";
print "<p>CGIは正常に動作しています。</p>\n";
unless (-f $mailcmd) {
print "<p>$mailcmd がありません。</p>\n";
}
unless (-x $mailcmd) {
print "<p>$mailcmd が実行可能ではありません。</p>\n";
}
unless (-f "jcode.pl") {
print "<p>jcode.pl がありません。</p>\n";
}
unless (-f "mimew.pl") {
print "<p>mimew.pl がありません。</p>\n";
}
print "</body>\n";
print "</html>\n";
exit 0;
}

0494nobodyさん03/01/24 20:30ID:i/64hvW7
#====================================================================
# 本体
#====================================================================

#
# ライブラリの呼び出し
#
require "jcode.pl";
require "mimew.pl";

#
# 入力値を読み取る
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@a = split(/&/, $query_string);
foreach $x (@a) {
($name, $value) = split(/=/, $x);
$name =~ tr/+/ /;
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*name, "jis");
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$value =~ s/[\r\n]+/\n/g;
&jcode'convert(*value, "jis");
if ($FORM{$name} eq "") {
$FORM{$name} = $value;
$FORM[$cnt++] = $name;
0495nobodyさん03/01/24 20:31ID:i/64hvW7
} else {
$FORM{$name} .= (" " . $value);
}}}

#
# EMAILが正常なメールあどれすかどうか判断する
#
if ($FORM{'EMAIL'} =~ /^[-_\.a-zA-Z0-9]+\@[-_\.a-zA-Z0-9]+$/) {
$mailfrom = $FORM{'EMAIL'};
}

#
# メールヘッダを作成する
#
{
&jcode'convert(*subject, "jis");
$mailhead = "";
$mailhead .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
$mailhead .= "Content-Transfer-Encoding: 7bit\n";
$mailhead .= "MIME-Version: 1.0\n";
$mailhead .= "To: $mailto\n";
if ($mailfrom) {
$mailhead .= "From: $FORM{'EMAIL'}\n";
$mailhead .= "Cc: $FORM{'EMAIL'}\n";
} else {
$mailhead .= "From: $mailto\n";
}
$mailhead .= "Subject: $subject\n";
$mailhead .= "\n";}
0496nobodyさん03/01/24 20:33ID:i/64hvW7
#
# メールボディを作成する
#
{
for ($i = 0; $i < $cnt; $i++) {
$mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n";
}

# "." のみの行は ". " に変換する。
# 2回繰り返さないと、2行連続で "." のみの行に対応できない
# "." を ".." に変換する処理が一般的だそうだが、あえて、
# "." を ". " に変換する。
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;}
#
# メールを送信する
#
if ($mailcmd =~ /sendmail/) {
unless (open(OUT, "| $mailcmd -t")) {
&errexit("メールの送信に失敗しました。(1)");}
unless (print OUT &mimeencode($mailhead)) {
&errexit("メールの送信に失敗しました。(2)");}
unless (print OUT $mailbody) {
&errexit("メールの送信に失敗しました。(3)");}
close(OUT);
} elsif ($mailcmd =~ /BLAT/i) {
&jcode'convert(*subject, "sjis");
$cmd = "$mailcmd";
$cmd .= " -";
$cmd .= " -t $mailto";
$cmd .= " -s \"$subject\"";
if ($mailfrom) {
0497nobodyさん03/01/24 20:35ID:i/64hvW7
$cmd .= " -c $mailfrom";
$cmd .= " -f $mailfrom";}
unless (open(OUT, "| $cmd > NUL:")) {
&errexit("メールの送信に失敗しました。(4)");}
&jcode'convert(*mailbody, "sjis");
unless (print OUT $mailbody) {&errexit("メールの送信に失敗しました。(5)");}
&jcode'convert(*mailbody, "jis");close(OUT);} else {&errexit("メール送信コマンド $mailcmd が存在しません。");}


0498nobodyさん03/01/24 20:36ID:i/64hvW7
#
# ブラウザ画面に送信結果を書き出す
#
{&jcode'convert(*header, "sjis");
&jcode'convert(*footer, "sjis");
$mail = $mailhead . $mailbody;
&jcode'convert(*mail, "euc");
$mail =~ s/&/&/g;
$mail =~ s/"/"/g;
$mail =~ s/</</g;
$mail =~ s/>/>/g;
$mail =~ s/\n/<BR>/g;
&jcode'convert(*mail, "sjis");print "Content-type: text/html\n";
print "\n";
print "$header\n";
print "$mail\n";
print "$footer\n";
}

#
# エラーメッセージを出力して終了
#
0499nobodyさん03/01/24 20:36ID:i/64hvW7
sub errexit {
local($err) = @_;
local($msg);
$msg = "Content-type: text/html\n";
$msg .= "\n";
$msg .= "<html>\n";
$msg .= "<head>\n";
$msg .= "<meta http-equiv=\"Content-type\" content=\"text/html; charset=Shift_JIS\">\n";
$msg .= "<title>メール送信結果</title>\n";
$msg .= "</head>\n";
$msg .= "<body>\n";
$msg .= "<h1>メール送信結果</h1>\n";
$msg .= "<hr>\n";
$msg .= "<p>$err</p>\n";
$msg .= "<p>ブラウザの [戻る] ボタンで戻ってください。</p>\n";
$msg .= "<hr>\n";
$msg .= "</body>\n";
$msg .= "</html>\n";
&jcode'convert(*msg, "sjis");
print $msg;exit(0);}
長くて申し訳ないです。どうでしょうか?
0500nobodyさん03/01/24 20:37ID:???
全部キタ━━━━━━(゚∀゚)━━━━━━ !!!???
0501nobodyさん03/01/24 20:42ID:???
>>499
そこまでやるなら別ファイルにした方がWYSIWYGなエディタで編集出来るし便利だと思うんだが。
0502nobodyさん03/01/24 20:56ID:???
ちゃんと読んでないが、メールの本文に目障りな文が入るってことじゃなくて、
ブラウザに表示される画面をどうにかしたいってことか?
050347403/01/24 21:12ID:i/64hvW7
>>502
そうなんです。
送信しましたの画面で(この下は474のコピペです)


下記のメールを送信しました。ありがとうございました。


--------------------------------------------------------------------------------
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
To: aaa@aaa
From: aaa@aaa
Subject:wwwmailからのメール

氏名 =
住所 =

といった感じなのですが
「下記のメールを〜」の下にそのまま「氏名=」と来たほうが
送信した側もわかりやすいように思うのですが
「Content-Type:〜Subject:wwwmailからのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています