mod_rewriteの設定でちゃんと処理されているのかを確かめたい時
http.confに以下2行を追加
RewriteLog "D:/xampp/rewrite.log" RewriteLogLevel 9
RewriteLog 以下は出力するログファイルのフルパス
CakePHPで不達メールの一覧を取得するモデルを作ってみた
お問い合わせフォームからメールを送信することもままあると思いますが、
不達メールの問題はついて回るかと思います。
そこでPOP3でメールサーバに接続し不達メールの一覧を取得するモデルを作ってみました。
<?php /** * 不達メールモデル */ class BounceMail extends AppModel { var $useTable = false; var $name = 'BounceMail'; var $mboxconnstr = "{メールサーバーホスト名:110/pop3}INBOX"; var $user = "ユーザー名"; var $passwd = "パスワード"; var $subject = "Undelivered Mail Returned to Sender"; function find($conditions = null, $extra = array()) { $records = array(); $mbox = imap_open($this->mboxconnstr, $this->user, $this->passwd); if ($mbox == false) { return $records; } $mail_check = imap_check($mbox); for($i=1;$i<=$mail_check->Nmsgs;$i++) { $headinfo = imap_headerinfo($mbox, $i); $bodyinfo = imap_body($mbox, $i); if ($headinfo->Subject == $this->subject) { $rtn = preg_match("/<.+@.+?>/", $bodyinfo, $rslt); if ($rtn == true) { if (is_array($rslt)) { foreach($rslt as $key=>$val) { if (!empty($conditions)) { foreach($conditions as $condition){ // 日付範囲指定の条件 if (isset($condition['dateFrom'])) { if (date("Ymd", strtotime($headinfo->date)) < date("Ymd", strtotime($condition['dateFrom']))) { continue 2; } } if (isset($condition['dateTo'])) { if (date("Ymd", strtotime($headinfo->date)) > date("Ymd", strtotime($condition['dateTo']))) { continue 2; } } } } $records[$i]["datetime"] = date("Y-n-j H:i:s", strtotime($headinfo->date)); $records[$i]["mail"] = rtrim(ltrim($val, "<"), ">"); break; } } } } } imap_close($mbox); return $records; } function paginateCount($conditions = null, $recursive = 0, $extra = array()) { $rslt = $this->find($conditions, $extra); $count = count($rslt); return count($rslt); } function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) { $rslt = $this->find($conditions, $extra); $records = array(); $end = $page * $limit; $start = $end - $limit + 1; $i = 0; foreach($rslt as $row){ if (++$i >= $start && $i <= $end) { $records[] = $row; } } return $records; } }
Chrome フォーム再送信の確認
セッション使っている時に戻るボタン押下で出る「フォーム再送信の確認」。
解決策をとりあえずメモ。
session_start()する前に、session_cache_limiter('none')とする
あまりお行儀のよい方法ではないらしい。
Googleカレンダーから祝日を取得して配列に展開するコンポーネントを作ってみた。
ここを参照して作ってみました。
国については適宜追加してください。
<?php class HolidayComponent extends Object { /** * 指定年の祝日リストを配列で取得します。 */ function getHoliday($year = null, $country = 'ja'){ $ret = array();; if(empty($year)){ $dateBegin = date( "Y-m-01" ); $dateEnd = date( "Y-m-t" ); }else{ $dateBegin = date( "Y-01-01", mktime( 0, 0, 0, 1, 1, $year ) ); $dateEnd = date( "Y-12-t", mktime( 0, 0, 0, 12, 1, $year ) ); } $query = "start-min=" . $dateBegin . "&start-max=" . $dateEnd . "&max-results=100"; switch($country){ case 'ja': $feed = "http://www.google.com/calendar/feeds/japanese__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; case 'us': $feed = "http://www.google.com/calendar/feeds/usa__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; case 'uk': $feed = "http://www.google.com/calendar/feeds/uk__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; case 'ch': $feed = "http://www.google.com/calendar/feeds/china__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; case 'ph': $feed = "http://www.google.com/calendar/feeds/philippines__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; default : $feed = "http://www.google.com/calendar/feeds/japanese__ja@holiday.calendar.google.com/public/full" . "?" . $query; break; } $xml = simplexml_load_file( $feed ); if(!$xml){ return $ret; } $ii = 0; foreach( $xml->entry as $entry ){ $gd = $entry->children( "http://schemas.google.com/g/2005" ); $attributes = $gd->when->attributes(); foreach( $attributes as $name => $value ){ if( $name == "startTime" ){ $ret[$ii]['date'] = "".$value.""; $ret[$ii]['title'] = "".$entry->title.""; $ii++; break; } } } usort($ret, array($this, "_cmp")); return $ret; } /** * 指定年の祝日リスト配列のソート */ function _cmp($a, $b) { if ($a['date'] == $b['date']) { return 0; } return ($a['date'] < $b['date']) ? -1 : 1; } }
ロりポップでsubversion
チカッパプランでSSHが使えてsvn関連のコマンドを使えるのでリポジトリを作ってみる。
サーバー側
2.リポジトリを初期化
svnadmin create repos/hoge --fs-type fsfs
3.trunk、branchs、tagsを作成
svn mkdir file://[フルパス]/repos/hoge/trunk -m "create trunk." svn mkdir file://[フルパス]/repos/hoge/branchs -m "create branchs." svn mkdir file://[フルパス]/repos/hoge/tags -m "create tags."
続いてクライアント側(TortoiseSVNを使用)
1.SSHクライアントの設定
TortoiseSVN同梱の「TortoisePlink.exe」(SSHクライアント)を利用
[TortoiseSVN]→[設定]→[ネットワーク]のSSHクライアントに
"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -P [接続ポート番号] -l [SSHアカウント] -pw [SSHパスワード]
2.チェックアウト
空フォルダを作りチェックアウト。
[TortoiseSVN]→[チェックアウト]
その際のリポジトリのURLは
svn+ssh://[SSHアカウント]@[SSHサーバー]/[リポジトリまでの絶対パス]/trunk
3.チェックアウトしたフォルダにバージョン管理するフォルダ、ファイルをコピー
4.コミット
これでいけるようです。
Backlogでsubversionの備忘
バージョン管理を始める際にやること。
1.Backlog上にリポジトリを作る。
2.自分のPCにsubversion用に空のフォルダを作る。
3.空のフォルダでチェックアウト。
4.チェックアウトしたフォルダにバージョン管理するフォルダ、ファイルをコピー
5.コミット
当たり前のことなんですが、いつもまごまごしてしまうのでメモしておきます。
CakePHPで普通のHtmlやPHPを配置する
ガッチリできあがったCakePHPで作成したサイトがあるとして、他で作った「普通に」作った簡単な問い合わせフォーム的なものをサブディレクトリに配置したい場合って結構あると思います。
その時は「.htaccess」を細工すればOK。
元の.htaccessが
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
で、普通のHtmlファイルを配置したいサブディレクトリを「XXXX」とすると
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/XXXX/(.*)$ RewriteRule ^.*$ - [L] </IfModule>
を先頭に追加して以下のようにする。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/XXXX/(.*)$ RewriteRule ^.*$ - [L] </IfModule> # Begin CakePHP <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>