2017年08月 / 07月≪ 12345678910111213141516171819202122232425262728293031≫09月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2013.03.16 (Sat)

Mercury/32で空メールのテストしたい

PHPで空メール処理する機能作ったけど、ローカルでテストしたい。

って思ってxamppについてるmercury/32を使って、
特定メールアドレスのメールの受信をフラグにメールをPHPにパイプで渡して、
サーバーでaliasesで設定するので、phpファイル自体はそのまま使えるようphp内でphp://stdinで取得できて、
処理後にメールを削除する。

っていう定番な動きがmercury/32だとなかなかするっといかなかった。
てっきりaliasesに入れりゃ動くかなーとか思ってたけど全然ダメ。

コアモジュールのポリシーから引数渡してバッチ動かせるんだけど、これだと全部のユーザーのメールに対して動いちゃう。


調べたりした結果、ユーザー作る→ユーザー作るとメールフォルダ出来る
→フォルダ内のメールを全てphpに渡すバッチ作る→受信をフラグに動かすフィルタ使ってバッチ動かす
っていう方法がシンプルだったようで。

例)
メールアカウント:autorun@localhost
渡したいPHPファイル:D:\php\test.php
バッチファイル:D:\run.bat

1)受信用ユーザー作成(autorun)

2)ユーザーフォルダ内のメールを総なめするバッチファイルを作る

@echo off
SET DIRNAME=D:\xampp\MercuryMail\MAIL\autorun
FOR %%F IN (%DIRNAME%\*.CNM) DO (
TYPE %%F | D:\php\test.php
DEL %%F
)

DIRNAMEはユーザー作った時にできたフォルダ。環境に合わせる。
FORで.CNMファイルのみループ、windows7のコマンドではTYPEでファイル内を表示できるのでそれを利用してパイプで渡す。
最後に処理終わったらDELで渡し終わったファイル削除。
バッチなんでエラーコード返して処理分けとかも必要であれば追加できるとおもう。

3)フィルタリングルールで動かす条件追加
シンプルにToに「autorun@localhost」だったら
Action:Run a program
パラメータ:D:\run.bat
て感じにする。

これでautorun@localhostにメールがきたらバッチが動くんで受信して処理してファイル消えるはず。


こんなのにすごい時間食ってしまった・・・
スポンサーサイト


 |  19:32  |  PHP  |  トラックバック(0)  |  コメント(0)  |  Top↑

2013.03.13 (Wed)

Yiiでマイグレーションをテスト用dbで使う

Yiiでテスト用のdbを設定してテストしてると、DBを作ったりするマイグレーションもテスト用DBで使いたくなる。

コンソールでマイグレーションを反映させる場合
yiic migrate

だけど、別のDBに反映させたい場合はコマンドラインオプション
--connectionID=[id]
を使うんだがこのidがどこのどれと紐づくもんなのか最初わからなかった。
デフォルト値はdbでテストにはtestdbって入れろと書いてあっただけだったけどいれたらconnectionIDが無いって出るし。

調べたら
/protected/config/console.php
内のcomponentsに入れたdb設定と紐づく。
本番がmydb,テストがmydb_testだとしたらこんな感じで設定する。


<?php
return array(
'name'=>'My Console Application',
...
// application components
'components'=>array(
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=mydb',
'emulatePrepare' => true,
'username' => 'mydb',
'password' => 'pass',
'charset' => 'utf8',
),
'testyou_db'=>array(
'class'=>'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=mydb_test',
'emulatePrepare' => true,
'username' => 'mydb_test',
'password' => 'pass',
'charset' => 'utf8',
),
...
);


--connectionID=[id]のidにtestyou_dbを入れればテスト用に反映される。
yiic migrate --connectionID=testyou_db


※dbじゃない方、testyou_dbには
'class'=>'CDbConnection',
を入れないとこんな感じのエラー出る
exception 'CException' with message 'Object configuration must be an array conta
ining a "class" element.' in xxx\framework\YiiBase.php:193


 |  18:42  |  PHP  |  トラックバック(0)  |  コメント(0)  |  Top↑

2013.03.09 (Sat)

Yiiでテスト環境構築

windows7+xampp+yiiでPHPUnit+Seleniumのテスト環境を作るのに忘れそうなのでメモ。

まずpearでPHPUnit_Seleniumをインストール。
phpunitがバージョン古くて入らなかったのでpear upgrade でPHPUnitのバージョンアップもした。
phpunitのインストールに関してはこの辺のメモ通り

http://docs.seleniumhq.org/download/
↑ここからサーバー(Selenium Server)のやつをダウンロード。

コマンドプロンプトから
java -jar ダウンロードした.jar
を実行すると起動できる。

次、Yiiのyiic webappコマンドでウェブアプリ作った場合、protected/testsにテスト用のファイルが入っている。
その中の
「WebTestCase.php」の「define('TEST_BASE_URL'」をyiic webappで作った環境のindex-test.phpへのURLに合わせる。

tests/functional/SiteTest.php
自動で作られる↑をテストしてみたらうごいた。
languageをjaにしてたのでエラーメッセージが違って最初テスト通らなかったけど、動けばあとは安心かな。
これだとjavascriptも動くらしいのがうれしいな。


 |  19:24  |  PHP  |  トラックバック(0)  |  コメント(0)  |  Top↑

2012.11.27 (Tue)

EC-CUBEのsendRedirectで飛ばないで真っ白になる

EC-CUBEで
SC_Response_Ex::sendRedirect(CART_URLPATH);
みたいな感じでカート画面に飛ばしたりしたいのに、なんか画面真っ白で飛ばない場合

ソースファイルがBOM付きになってたせいでした。
BOM無しで保存したら飛ぶようになった。何回かはまってるこれ。


 |  19:21  |  PHP  |  トラックバック(0)  |  コメント(0)  |  Top↑

2012.08.17 (Fri)

PHPで独自ソート

PHPでシンプルなソートはsort()とかrsort()とか使えばいいんだけど、
連想配列やオブジェクトなんかを独自のルールでソートしたいなって時はusortとかつかう。

PHP: 配列のソート - Manual

PHP: usort - Manual

テーブルデータを連想配列やオブジェクトで複数取ったりとかした際に特定フィールドでソートしたいとかいうときに便利。

$dataをindexフィールドでソートしたい場合

/**
* $x['index']昇順
* @param array $a
* @param array $b
*/
function sort_Index($a,$b){
$v1 = intval($a['index']);
$v2 = intval($a['index']);
if($v1==$v2) return 0;
return ($v1<$v2) ? -1 : 1;
}
usort($data, 'sort_Index');


クラス内の関数使いたい場合は、array()でオブジェクト+関数名渡せばいいらしい

class MyClass{
// age昇順
function sort_Age($a,$b){
$v1 = intval($a['age']);
$v2 = intval($a['age']);
if($v1==$v2) return 0;
return ($v1<$v2) ? -1 : 1;
}
function getRows(){
$data = ...///データ取得処理
usort($data, array($this,'sort_Age'));
return $data;
}
}


PHP5.3から無名関数使えるので、出所が1か所の場合は

usort($data, function($a,$b){
$v1 = intval($a['index']);
$v2 = intval($a['index']);
if($v1==$v2) return 0;
return ($v1<$v2) ? -1 : 1;
});

さっぱりする。


 |  15:42  |  PHP  |  トラックバック(0)  |  コメント(0)  |  Top↑
 | BLOGTOP |  NEXT
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。