【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/01/11 13:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
あとは>>2-10にまかせた。
0467free se
03/01/24 16:04ID:???おまえらはどうだ?
0471nobodyさん
03/01/24 17:20ID:???0472nobodyさん
03/01/24 17:25ID:???簡単な物は音楽が鳴っていた方がいい。
複雑な物になると鳴ってない方がいい。
0473467
03/01/24 17:33ID:???よく考えると俺も472さんと一緒だな。
無音は気持ち悪くて、流石に嫌だけど。
0474nobodyさん
03/01/24 17:43ID:i/64hvW7このように表示されます。
下記のメールを送信しました。ありがとうございました。
--------------------------------------------------------------------------------
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:???0478474
03/01/24 18:12ID:i/64hvW7すみません、どんな風に危ないんでしょうか?
非常に不安になってきたのでよければ詳しく教えてくれませんか??
0479nobodyさん
03/01/24 18:22ID:???0481nobodyさん
03/01/24 18:24ID:???0484nobodyさん
03/01/24 19:34ID:???ただ、Toを自分のメアドにしておいてもメールボムとか怖い。
0485474
03/01/24 19:43ID:i/64hvW7判断がつきません。wwwmailは「とほほ」にある
メール送信フォームを設置するためのソフトです。
危険でしょうか?
0486nobodyさん
03/01/24 20:01ID:???0487nobodyさん
03/01/24 20:05ID:???個人情報(自分のメアドとか)、パスワードとかが入ってるなら、それだけ消してソース出してみ。
ソース見せたくらいじゃどうってことないよ。
0488nobodyさん
03/01/24 20:13ID:QLwP0ckkたしか、XREA用に何かいじらなければならなかったような気がするのですが思い出せません。
どなたかご存知の方、ご教授願います。
0489nobodyさん
03/01/24 20:18ID:???xrea.com part28
http://pc.2ch.net/test/read.cgi/perl/1042433690/
こちらへどうぞ。
0491474
03/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';
0492474
03/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
0493474
03/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$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 .= " -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/64hvW7local($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:???0502nobodyさん
03/01/24 20:56ID:???ブラウザに表示される画面をどうにかしたいってことか?
0503474
03/01/24 21:12ID:i/64hvW7そうなんです。
送信しましたの画面で(この下は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からのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
MySQLは3.23.52、PHPは4.2.3PHPです。
はっきり言って初心者なんですが、実用化を目指して勉強がてらデータベースを作ろうとしてスクリプト書いてました。
メモ帳使っての手書きスクリプトですが、アップロードしてみたらソコソコいけそうな感じでした。
ですが、あげたスクリプトを色々いじっているうちに変になってしまい収拾がつかなくなってしまったので全てのテーブル名を確認して
それらを全て削除したいのですが、やり方が分かりません。
色んなホームページを回ってみると出ているのですが、その殆どが個人のPC上で行う方法が多いので、はたしてそのスクリプトが正しいのか分かりません。
実際実験してみてもうまくいかないので、多分ちょっとばっかり違うのでしょう。
TELNET接続も経験がないのと第一に使えないので、そのやり方も採れません。
テーブルを全て見るためのスクリプトと削除のためのスクリプトを教えてもらえないでしょうか?
ちなみに私が色々見て回ってこうかなと思って書いたものは…
<?
$hostname="localhost"; $port="3306"; $database="abcdefg";
$username="abcdefg"; $password="hogehoge";
$conn = mysql_connect($hostname,$database,$password);
mysql($database,"SHOW TABLE");
?>
…で最後の行を色々見たものをコピペって試しています。
0505nobodyさん
03/01/24 21:44ID:???# ブラウザ画面に送信結果を書き出す
って行があるだろ。その下あたりを修正すりゃいい。つかPerl勉強してこい。
>>504
SHOW TABLESと DROP TABLEを繰り返しするのじゃダメ?
うまくいかないって言われても…
0506504
03/01/24 22:05ID:+KMlj8qB上に書いたので繋がらないので分からないんですよ。
mysql($database,"CREATE TABLE $table( no int not null AUTO_INCREMENT,
hoge varchar(100),PRIMARY KEY(no))");
でちゃんとテーブル作れるんですがね。
0509nobodyさん
03/01/24 23:43ID:???何度も繰り返しになるが、テストはローカルでやれ。
アップしてテストをするな。
0510504、506
03/01/24 23:57ID:???今となっては同感です。
だからこそ、サーバー上のを見つけて削除したいんです。
0511nobodyさん
03/01/25 00:18ID:???だから、消し方もローカルでテストしてやりなさいって。
まずはローカルで同じ様なデータ作って消すやり方探せばいいでしょ。
ローカルなら、他人への迷惑をあまり考えずに色々と手探りで試せるんだから。
それはやってるのか?
0513nobodyさん
03/01/25 00:28ID:???0514504、506、509
03/01/25 00:33ID:???サーバー上でしかできないので、サーバーにアップしてやるしかないのです。
0515nobodyさん
03/01/25 00:50ID:???一生、悩んでなさいってこった。以後放置願います>all
0516nobodyさん
03/01/25 00:52ID:???PHP + MySQL
http://pc.2ch.net/test/read.cgi/php/983250751/
【PHP】質問スレッド Part6
http://pc.2ch.net/test/read.cgi/php/1038988518/
mysql ヘルプ!
http://pc.2ch.net/test/read.cgi/php/1011683282/
0518ビビオパーラー
03/01/25 01:10ID:???PHPはようしらんが、、
http://search.net-newbie.com/php/ref.mysql.html
ここみたか?
で〜
>$hostname="localhost"; $port="3306"; $database="abcdefg";
>$username="abcdefg"; $password="hogehoge";
>$conn = mysql_connect($hostname,$database,$password);
↓
$conn = mysql_connect($hostname,$username,$password);
mysql_select_db($database)
>mysql($database,"SHOW TABLE");
↓
$result = mysql_query("SHOW TABLES");
while($row=mysql_fetch_row($result)) {
mysql_query("DROP TABLE $row[0]");
}
でダメかな?
ていうかPHPスレで聞け!perlなら
use DBI;
$dsn="DBI:mysqlPP:abcdefg:localhost";
$dbh=DBI->connect($dsn,'abcdefg','hoge');
$sth=$dbh->prepare('SHOW TABLES');
$sth->execute;
while(@row=$sth->fetchrow_array) {
$dbh->do("DROP TABLE $row[0]");
}
かな?
0519474
03/01/25 01:48ID:YsIz1kts>>508
助言を見まして検索したところ
&jcode'convert(*subject, "jis");
$mailhead = "To: $mailto\n";
# if ($FORM{'EMAIL'} ne "(unknown)") {
# $mailhead .= "Cc: $FORM{'EMAIL'}\n";
# }
こうすれば問題ないですか?
なんとなくまずいのはわかるのですが
良ければ詳しく教えていただけますか?
0521nobodyさん
03/01/25 13:31ID:???Webデータの取得にLWP::Simpleのget()を使いたいのですけど、
このモジュールはcgiを許可しているフリーのhosting service
には入れてないことの方が多いのでしょうか? あるいは有料の
hosting serviceであれば入ってるでしょうか?
0523nobodyさん
03/01/25 17:23ID:???有料のトコなら管理者に頼めば入れてくれるかもしれないけど、
必要なモジュールは基本的には自分でインストールするもの
と考えたほうがいいよ。
http://search.cpan.org/author/GAAS/libwww-perl-5.69/
0525nobodyさん
03/01/25 18:29ID:???ダミーのモジュールを入れておいて優先順位?
0527初心者です。
03/01/25 18:44ID:WHb7ynpfCGI.pmを使用してて
perlに -w でCGIを実行すると
$data = param("form_name");
でフォームからデータを受け取って
このデータを下記のように条件式にかけると
if ( $data eq "hoge" ) {
}
ってやると
Use of uninitialized value in string eq at ./test.cgi line 8
ってWARNINGでるんですけど
このWARNINGださないようにするためにはみなさんどうしてます?
0529nobodyさん
03/01/25 19:05ID:J+PAIJA/違う。比較演算子は未定義値に使ってはいけない。
file?form_name=
で呼ばれたら、$dataは'' (空文字列?)だけど、
file?hoge=fuga
で呼ばれたら、$dataはundefになる。
つまり、こう書いておけばいい。
$data = '' unless defined $data;
0530nobodyさん
03/01/25 19:18ID:???おまけ:
undef, '', 0 はifに入れてみるとはみんなFALSEになるんだけど、
違うものだと思え。
よくある間違いで、
if (! $name) { error('名前を入れてちょ'); }
これは、$nameを0にできない。こう書くべきだね。
if ($name eq '') { ... }
0532nobodyさん
03/01/25 19:19ID:???入れてみると、みんなFALSEになる
0534nobodyさん
03/01/25 20:04ID:???普通こうします。。
0536nobodyさん
03/01/25 20:30ID:TLIt72nGreturn(next);
ってできますか?
0538nobodyさん
03/01/25 20:51ID:???みたいな感じになるはずだ。
0539nobodyさん
03/01/25 21:05ID:TLIt72nG0540 521
03/01/26 04:49ID:???ことをしたいのですけど、LWP::Simpleモジュールを使わなくても
可能でしょうか?
0542nobodyさん
03/01/26 10:04ID:???ログインができないんです。
if ($USER_DATA[0] eq $PW) {
ログイン完了
}
else {
パスワードちがう
}
とこのようにしているんですが、パスワードが合っていても違うという画面が出てしまいます。
出力して調べてみましたが
もちろん、$USER_DATA[0]と$PWの値は一緒でした(調べたときは両方に'a'という文字列をいれた)。
・・・どうすれば、きちんとした分岐結果が出るでしょうか?
ifの使い方が間違っているんでしょうか
0546nobodyさん
03/01/26 11:44ID:P6Egn5Az文字に改装を加えて投稿するにはどうすれば良いのでしょうか。
タグは使用不可で、スクリプトはCOMCHATです。
もし板違いだったらすいません。
0548nobodyさん
03/01/26 12:18ID:P6Egn5Az他の常連さんが成功してるみたいなので。。
0550nobodyさん
03/01/26 12:30ID:P6Egn5Azあまり喋らないので、気まずい...
0551nobodyさん
03/01/26 12:47ID:zx28i3UHhttp://ginrai.hp.infoseek.co.jp/
0552nobodyさん
03/01/26 12:58ID:10NDG8/sなんでもかんでもダブルクオートで囲むのはよろしくない。
それに、今はそれは全然関係ない。
>>542
自分が問題だと思っている部分だけじゃなくて、全体を出してみろ。
0553nobodyさん
03/01/26 16:22ID:???0554nobodyさん
03/01/26 17:09ID:???時間を決めて実行するための仕組み。
専用レンタルサーバとかじゃないと使えないから気にしなくていい。
スレ的には、「ある時間にCGIを実行したいんだけど」な気がするから、
「CGIが読み込まれたときに時間をチェックして実行するかどうか決めろ」
0555nobodyさん
03/01/26 17:56ID:lX4NK7pu0556nobodyさん
03/01/26 18:44ID:bvYo1DgEそもそもCGI使えないだろ
0558nobodyさん
03/01/26 22:37ID:???0560nobodyさん
03/01/26 23:30ID:2o0R3o6+小数点以下切捨てということで、
$tax = int($5*$total/100);
という感じでやっているのですが、
小数点以下四捨五入で・・・とするにはどうしたらいいのでしょうか?
初歩的な質問ですいません・・・。
0563560
03/01/26 23:47ID:???ありがとうございます!!!
$tax = int(($total * 0.05) + 0.5);
↑ちなみにこの2重括弧はやっぱり付けた方がいいんですか?
$tax = int($total * 0.05 + 0.5);
だけだとだめですか?
■ このスレッドは過去ログ倉庫に格納されています