ホームにもどる      「パソコンについて」にもどる

CGI
  1. sendmail を試す時、人に試しのメールを送るわけにいかないので、自分宛のメールで試すのが一般的である。自分のパソコンから、自分にメールを出すと、メールソフトは迷惑メールと判断し、受信トレイに見当たらないことが多い。受信トレイにメールが来ていないから、sendmailが正常に動いていないと考えてしまう。sendmailの設定を変えなければならないのかと考え不要な変更をしてしまうことがある。迷惑メールに入っていないかと確認することが大事である。
  2. sendmailを使う時、
    #!/usr/bin/perl -T
    と書いて、
    $sendmail = '/usr/sbin/sendmail';
    open(MAIL,"| $sendmail -t -i");
    で、sendmailを開こうとすると、
    Insecure $ENV{PATH} while running with -T switch at
    のエラーが出る。 -T をはずし、
    #!/usr/bin/perl
    とすると、動く。
  3. sendmailを使う時、
    print MAIL <<END;
      From: 試験太朗<shiken\@taro.com>
      To: shiken\@Shiken.com
      Subject: お礼
    END
    のように日本語をヘッダーに入れると文字化けすることがある。
    文字コードを変えておく必要がある。
    先頭に
    use Encode;
    を書いて、
    my $name = Encode::decode('utf-8', "試験太朗");
    $name = Encode::encode('MIME-Header-ISO_2022_JP', $name);
    my $orei = Encode::decode('utf-8', "お礼");
    $orei = Encode::encode('MIME-Header-ISO_2022_JP', $orei);
    print MAIL <<END;
      From: $name<shiken\@taro.com>
      To: shiken\@Shiken.com
      Subject: $orei
    END
    のようにする。
    試験太朗やお礼が入力したものでないなら、decodeはいらない。
  4. sendmail を使う時、メールの本文は、
    Content-type: text/plain; charset="UTF-8"
    のように文字コードを指定しておけば、JIS コード (ISO-2022-JP) にしなくても、文字化けせずに送れるようである。
  5. MariaDBと接続するには、
    use DBI;
    を先頭に宣言する。ユーザー名をtaro、パスワードをabcdefg、データベース名をShiken、テーブルをShiken_Dataとする。次のように記述する。
    my ($dbuser, $dbpass, $dbname, $dsn, $dsh, $sth, $sql, $result);
    ($dbuser, $dbpass, $dbname) = ("taro", "abcdefg", "Shiken");
    $dsn = "DBI:mysql:$dbname";
    $dsh = DBI -> connect ($dsn, $dbuser, $dbpass , {RaiseError => 0});
    {}の中はオプションでRaiseErro => 0 はクエリーなどでエラーが出た時に、例外を設けない設定である。
    SQLを実行するのは、この後に、例えばSELECT構文なら
    $sql = "SELECT * FROM Shiken_Data";
    $sth = $dsh-> prepare($sql);
    $result = $sth-& gtexecute;
    などと記述する。もしこれで文字化けになるなら、
    $dsh = DBI -> connect ($dsn, $dbuser, $dbpass , {RaiseError => 0});
    の後に、
    $sql = "SET NAMES utf8";
    $sth = $dsh -> prepare($sql);
    $result = $sth -> execute;
    を記述してから、SQLを実行する。
    もしこれでも文字化けになるなら、DBI -> connect にオプション mysql_enable_utf8 => 1 を追加し、次のように記述する。
    $dsh = DBI -> connect ($dsn, $dbuser, $dbpass , {RaiseError => 0, mysql_enable_utf8 => 1});

ホームにもどる      「パソコンについて」にもどる