WEBの里 ~茨城県のWEBデザイナーの覚書~ -7ページ目

日本語メール送信(PHP)

PHPのメール送信では「sendmail」を使うと、とっても簡単。


【サンプル】

mb_send_mail("$mailto","$subject","$content","$mailfrom");


mb_send_mail("送付先","タイトル","メール内容","送信元");

これだけでメールが送れるので、かなり重宝しています。

でも、CC・BCC・添付資料とかは?となるとそれなりに大変になってしまう。


ファイル添付が必要になり、簡単に添付できるものはないかと

探していて見つけたのが「PHPMailer 」というライブラリ。


これを使うと、メールのCC・BCC・添付までかなり簡単にできる。ので覚書。


PHPMailer をダウンロード。※PHP4用、PHP5用とあるのでご注意。

●ダウンロードしたファイルを、解凍してサーバーに置く。

●あとは読み込んで下記のように設定。


【サンプル】

//ライブラリ読み込み
require("./phpmailer/class.phpmailer.php");


//言語設定、内部エンコーディングを指定する
mb_language("japanese");
mb_internal_encoding("EUC-JP");

//日本語添付メールを送る
$to = "
to@web.com "; //宛先
$subject = "タイトル・件名"; //題名
$body = "メール本文"; //本文
$from = "
from@web.com "; //差出人
$fromname = "差出人表示名"; //差し出し人名


$attachfile = "./file.zip"; //添付ファイルパス

$mail = new PHPMailer();
$mail->CharSet = "iso-2022-jp";
$mail->Encoding = "7bit";
$mail->AddAddress($to);
$mail->From = $from;
$mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","EUC-JP"));
$mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","EUC-JP"));
$mail->Body = mb_convert_encoding($subject,"JIS","EUC-JP");

//添付ファイル追加
$mail->AddAttachment($attachfile); //添付ファイルがないならここはいらない。
if (!$mail->Send()){
echo("メールが送信できませんでした。エラー:".$mail->ErrorInfo);
}


なんて簡単なんでしょう?!

mysql.phpとadmin.ini(MySQL)

【mysql.phpコード】 これはこのまま書けばOK。「ini」設定ファイルのパスはそれぞれで。

<?php
////////////////////////////////////
//データベース接続
class MySQL{
//===========================
// 変数宣言
//===========================
var $m_Con;
var $m_HsotName="";
var $m_UserName="";
var $m_Password="";
var $m_DataBase="";
var $m_Row=0;
//===========================
// コンストラクタ
//===========================
function MySQL(){
$filename="絶対パス/admin.ini";
if(!file_exists($filename)){
die("no_file online 60");
}else{
$fp=fopen($filename,"r");
if(!$fp){
die("no_open_DATABASE online 64");
}else{
$this->m_HsotName=trim(fgets($fp));
$this->m_UserName=trim(fgets($fp));
$this->m_Password=trim(fgets($fp));
$this->m_DataBase=trim(fgets($fp));
}
fclose($fp);
}
// MySQLへの接続
$this->m_con=mysql_connect($this->m_HsotName,$this->m_UserName,$this->m_Password);
if(!$this->m_con){
die("no_open_DATABASE online 76");
}
// データベースの選択
if(!mysql_select_db($this->m_DataBase,$this->m_con)){
die("no_choice_DATABASE online 80 DB:{$this->m_DataBase}");
}
}
//===========================
// SQLクエリの処理
//===========================
function query($sql){
$this->m_Rows=mysql_query($sql,$this->m_con);
if(!$this->m_Rows){
die("ERROR!! online 89 <br><b>{$sql}</b><br>" .mysql_errno().":".mysql_error());
}
return $this->m_Rows;
}

//===========================
// 結果をFETCH
//===========================
function fetch(){
return mysql_fetch_array($this->m_Rows);
}

//===========================
// 変更された行の数を得る
//===========================
function affected_rows(){
return mysql_affected_rows();
}

//===========================
// 列数
//===========================
function cols(){
return mysql_num_fields($this->m_Rows);
}

//===========================
// 行数
//===========================
function rows(){
return mysql_num_rows($this->m_Rows);
}

//===========================
// 検索結果の開放
//===========================
function free(){
mysql_free_result($this->m_Rows);
}

//===========================
// MySQLをクローズ
//===========================
function close(){
mysql_close($this->m_con);
}

//===========================
// エラーメッセージ
//===========================
function errors(){
return mysql_errno().": ".mysql_error();
}

//===========================
// エラーナンバー
//===========================
function errorno(){
return mysql_errno();
}
}
?>

【admin.ini】 これはそれぞれ違うよ。

localhost //これはそのまま
ユーザー名
パスワード
DB名


「ini」にはこれだけ書いておく。

ループ処理(PHP)

■for () ループ

for (初期値; 条件; 増分) {
break; // ループ脱出
continue; // 次のループへ
}

for ($i = 1; $i <= 10; $i++) {
$a[$i] = 2;
}

for ($i = 1, $j = 1; $i <= 10 and $j == 5; $i++, $j++) {
$a[$i] = ++$j;
}

for (;;) {
// 無限ループ
}

■while () ループ

while (条件) {
条件が真のときループ
break; // ループ脱出
continue; // 次のループへ
}

■foreach ループ (reset、while、each)

$d = array('abc', 'def', 'ghi');

reset($d);
while ($a = each($d)) {
print "<P>$a[0] - $a[1]</P>\n";
}

$d['key1'] = 'abc';
$d['key2'] = 'def';
$d['key3'] = 'ghi';

reset($d);
while ($a = each($d)) {
print "<P>$a[0] - $a[1]</P>\n";
}

■foreach ループ (PHP4)

$d = array('abc', 'def', 'ghi');

foreach ($d as $a) {
print "<P>$a</P>\n";
}

$d['key1'] = 'abc';
$d['key2'] = 'def';
$d['key3'] = 'ghi';

foreach ($d as $a => $b) {
print "<P>$a $b</P>\n";
}

■do () ループ

do {
break; // ループ脱出
continue; // 次のループへ
条件が真のときループ
} while (条件);

・ループが一度は必ず実行される。

■exit 脱出

exit; // PHP 脱出
return; // 関数脱出

日付・時間(PHP)

【現在時刻の取得】

//date関数を使う場合
date("Y-m-d H:i:s");
//strftime関数を使う場合
strftime("%Y-%m-%d %H:%M:%S");

【n日後、n日前の日付を求める】

/**
* 年月日と加算日からn日後、n日前を求める関数
* $year 年
* $month 月
* $day 日
* $addDays 加算日。マイナス指定でn日前も設定可能
*/
function computeDate($year, $month, $day, $addDays) {
$baseSec = mktime(0, 0, 0, $month, $day, $year);//基準日を秒で取得
$addSec = $addDays * 86400;//日数×1日の秒数
$targetSec = $baseSec + $addSec;
return date("Y-m-d H:i:s", $targetSec);
}

//2007年8月10日の30日後の日付を取得
//2007-09-09が表示されます
$dt = computeDate(2007, 8, 10, 30);
print("2007-08-10 + 30days = {$dt}<br />\r\n");

//2007年8月10日の2週間前の日付を取得
//2007-07-27が表示されます
$dt = computeDate(2007, 8, 10, -14);
print("2007-08-10 - 14days = {$dt}<br />\r\n");

【日付の比較を行う】

//2007-08-10と2007-07-31を比較します
//処理Aが実行されます
if(mktime(0, 0, 0, 8, 10, 2007) > mktime(0, 0, 0, 7, 31, 2007)) {
//処理A
} else {
//処理B
}

【2つの日付の差(何日間あるか)を求める】

/**
* 2つの日付の差を求める関数
* $year1 1つのめ日付の年
* $month1 1つめの日付の月
* $day1 1つめの日付の日
* $year2 2つのめ日付の年
* $month2 2つめの日付の月
* $day2 2つめの日付の日
*/
function compareDate($year1, $month1, $day1, $year2, $month2, $day2) {
$dt1 = mktime(0, 0, 0, $month1, $day1, $year1);
$dt2 = mktime(0, 0, 0, $month2, $day2, $year2);
$diff = $dt1 - $dt2;
$diffDay = $diff / 86400;//1日は86400秒
return $diffDay;
}

//2007年8月9日と2007年7月9日の差を求める
//31が表示されます
$days = compareDate(2007, 8, 9, 2007, 7, 9);
print("2007-08-09 - 2007-07-09 = {$days} days<br />\r\n");

//2007年1月10日と2006年10月10日の差を求める
//92が表示されます
$days = compareDate(2007, 1, 10, 2006, 10, 10);
print("2007-01-10 - 2006-10-10 = {$days} days<br />\r\n");

【任意の日付の曜日を取得】

//2007年8月10日の曜日を表示
//金曜日が表示されます
$week = array("日", "月", "火", "水", "木", "金", "土");
$dayOfWeek = date("w", mktime(0, 0, 0, 8, 10, 2007));
print("曜日={$week[$dayOfWeek]}<br />\r\n");


数値関数(PHP)

【数値関数】

srand 乱数初期化

rand 乱数発生

floor 切り捨て整数化

ceil 切り上げ整数化

round 四捨五入

sqrt 平方根

number_format 数値カンマ表記


【srand (乱数初期化)】

srand(time);

** 現在時間で乱数ジェネレータを初期化する。


【rand (乱数発生)】

$i = rand(0, 99);

** $i には、0 ~ 99 の乱数がセットされる。


【floor (切り捨て整数化)】

$i = floor(1.9);

** $i には、1 がセットされる。


【round (四捨五入)】

$i = round(1.526[, 2]);
** $i には、1.53 がセットされる。


$i = round(1.5);
** $i には、2 がセットされる。


$i = round(1.123, 2);

** $i には、1.12 がセットされる。

【sqrt (平方根)】

$i = sqrt(2);
** $i には、1.14... がセットされる。


【number_format (数値カンマ表記)】

$ss=number_format(10000);

** $ss には、10,000 がセットされる。