DBMS として MySQL を使用している場合は、対象テーブルが InnoDB 形式を使用している場合にのみトランザクションが使用できます。 例えば、指定idのデータを main1_table ⇒ backup1_table main2_table ⇒ backup2_table main3_table ⇒ backup3_table へ複製する場合、途中でエラーが起こった場合に処理を行う直前の状態に戻す方法。 $db->autoCommit(false); $sql = "INSERT INTO main1_table SELECT * FROM backup1_table WHERE id=".$_POST['id']; $res1 =& $db->query($sql); if($db->idError($res1)){ die($res1->getMessage()); } $sql = "INSERT INTO main2_table SELECT * FROM backup2_table WHERE id=".$_POST['id']; $res2 =& $db->query($sql); if($db->idError($res2)){ $db->rollback(); die($res2->getMessage()); } $sql = [...]
空メールでの自動入会プログラムを作っていて、Softbankのみ文字化けを起こした。 軽く調べた結果、Softbankは文字コードをJISにしないとだめらしい。 ということで下記のように送信手前でエンコードをJISに変換したら直った。 $headers = array(); $headers['From'] = $new_from; $headers['To'] = $recipients; $headers['Subject'] = $subject; $headers['Sender'] = $new_from; // 文字コード指定(JISに変換) mb_convert_variables( “JIS”, “auto”, $headers ); $body = mb_convert_encoding($body, “JIS”, “auto”); $mail = Mail::factory(‘sendmail’); $result = $mail->send($recipients, $headers, $body);
PHP×携帯サイトデベロッパーズバイブルを読んで、空メール送信をテストしてみたが、結構悩んだ部分が多かったのでメモ。 尚、テストはカゴヤサーバにて行なった。 稼働率99.999% レンタルサーバー顧客満足度No1 ■空メールを受け取るメールアドレスを準備する。 1. 新しいメールアカウントを作成 例)アカウント名.regist 2. アカウント名@収容サーバー名 に自動転送するように設定。転送後はメールサーバにメールを残さないように設定する。メールを残す設定にしてしまうと、メールBOXがいっぱいになった時に転送自体が停止されてしまい、送信者にエラーが届くことになる。 ※収容サーバー名はコントロールパネルから、システム > Webサイトを開き、基本情報に記載されている。 アカウント名はコントロールパネルにログインする時のアカウント名そのもの。 3. アカウント名.regist@kagoya.netへメールを送信して、まずはきちんとメールが届いているかテストする。 ■.forwardファイルを作成する。 1. 「.forward」と名前をつけたファイルを作成する。 2. 「”|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75″」と記述して保存。 これで届いたメールを.procmailrcファイルへ渡せるようになる。 3. ルートディレクトリ直下(public_htmlフォルダと同階層)にPUTする。 ■.procmailrcファイルを作成する。 1. 「.procmailrc」と名前をつけたファイルを作成する。 2. 下記を記述して保存。 SHELL=/usr/bin/sh PATH=/usr/bin:/usr/local/bin:$home/bin MAILDIR=$home/Maildir/ VERBOSE=YES LOGFILE=$MAILDIR/procmail`date +%Y-%m`.log :0 * ^To:.*アカウント名.regist@kagoya.net | /home/アカウント名/public_html/mailtest/empty_mail.php 3. ルートディレクトリ直下(public_htmlフォルダと同階層)にPUTする。 [注意] .forwordや.procmailrcなどのサーバーに置く設定ファイルは改行コードにLFを使う。CRLFを使うと動作しない場合がある。 HIDEMARUのように改行コードを指定して保存できるようなテキストエディタで作成するのがよい。 これでempty_mail.phpにメールを渡す準備が完了。 ■PEARライブラリのインストール 必要なのは下記2点。 1. PEAR::Mailライブラリ 2. PEAR::Mail_mimeライブラリ ※PEARライブラリのインストールは省略。もちろんサーバにインストール済みであればそれを利用すればよし。 ■empty_mail.phpの作成 1. 下記を記述して保存。 PHP×携帯サイトデベロッパーズバイブルに記載されているempty_mail.phpを保存して/home/アカウント名/public_html/mail/へアップロード。 [注意] 1. 「#!/usr/local/bin/php」を先頭に記述して保存しないと動作しなかった。サーバによっては「#!/usr/bin/php」となる場合もあり。 2. PEARライブラリをインクルードする際は、フルパスで記述しないと動作しなかった。これは自身で.htaccessによるPEARインクルードパスを設定していたからだと思う。 [...]
■SELECT系 // メンバー全員の情報を全て取得(ID昇順) function get_all_member(){ global $db; $sql = “SELECT * FROM member ORDER BY id ASC”; $list = $db->getAll($sql); return $list; } // IDを指定して一人のメンバー情報を全て取得 function get_one_member($id){ global $db; $sql = “SELECT * FROM member WHERE id = $id”; $list = $db->getRow($sql); return $list; } // IDを指定してメールアドレスを取得 function get_mail_address($id){ global $db; $sql = “SELECT mail [...]
pager(ページャー)機能を利用する際のメモ。※Smartyを利用した場合。 複数の画像を10枚ずつ表示させる場合。(全ての画像の大きさは統一) ・PHPファイル //画像名を配列に代入 $img = array(“img1.jpg”,”img1.jpg”,”img1.jpg”,”img1.jpg”,”img1.jpg”); $params=array( “perPage”=>10, “itemData”=>$img, “prevImg”=>”前のページ”, “nextImg”=>”次のページ” ); $o_page=Pager::factory($params); foreach($o_page->getPageData() as $listData){ $listDataList[]=$listData; } $currentPageID = $o_page->getCurrentPageID();//現在のページ番号 //表示するデータをSmartyに渡す $smarty->assign(“list”,$listDataList); $smarty->assign(“currentPageID”,$currentPageID); //ナビゲーションの作成 $navi=$o_page->getLinks(); $smarty->assign(“pageNavi”,$navi['all']); ・tplファイル <p class=”pagenavi”>{$pageNavi}</p> <hr /> {foreach from=$list item=”list” name=”listLoop”} <img src=”/images/{$list}” alt=”" width=”★★” height=”★★” /> {/foreach} <hr /> <p class=”pagenavi”>{$pageNavi}</p> </pre>
PEAR:NetUser Agent MobileでPCか携帯かを判別する。 <?php require_once ‘Net/UserAgent/Mobile.php’; $userAgent = Net_UserAgent_Mobile::singleton(); if ($userAgent->isNonMobile()) { echo ‘PCアクセスです’; } else { echo ‘モバイルアクセスです’; } ?>
