このブログを検索

ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2013/11/27

使って便利と思ったjenkins plugin

  • File System SCM :ファイルシステムをSCMとして利用出来ます。  
  • Jenkins Clone Workspace SCM :ワークスペースにあるファイルを次のjobに渡せます。Pipelineとかで最初にgitから取得して検証環境に反映したソースが渡せるから確実に検証したままのソースを本番に反映出来ます。  
  • Sidebar Link:左サイードバーに自由にリンクの追加が出来ます。
  • Config File Provider Plugin:configファイル等をjenkinsの中で保存出来ます。  
  • Publish Over SSH : sshでファイルを送る事が出来ます。 
  • Timestamper:output consoleに実行時間・経過時間を表示出来ます。
  • Configuration Slicing:複数のjobの設定を一括で変更できます。全ての属性ができるわけでは無いですが、結構な数が出来ます。  
  • Thin Backup:jenkinsの設定をバックアップしてくれる。 

2013/05/17

PHPUnit remote Debugging with NetBeans

reference site :
 http://blog.doh.ms/2011/05/13/debugging-phpunit-tests-in-netbeans-with-xdebug/

1. need to path-mapping at NetBeans(IDE)













2. must export below before phpunit
export XDEBUG_CONFIG="idekey=netbeans-xdebug"

3. and run phpunit  with --debug option.


<TroubleShooting>
1. error message "E: Could not connect to client. :-("
  - check  nmap -p 9000 192.168.56.1
    if closed, re-run netbeans.
http://pietervogelaar.nl/php-xdebug-netbeans-vagrant/#.UZX14yvOS3o

2013/04/18

php5.4 yum mysqlnd install

php5.4からmysqlndドライバーがデフォルトになったからというので
yumでphpをインストールしてもデフォルトで入ってくると思ったが違った。

分かりにくいのは「php54-mysql」と「php54-mysqnd」。
この2つは同時にインストールできない。

推薦のmysqlndをインストールしたいなら
 yum -y install php54-mysqlnd
で出来る。
確認はphpinfoの情報に「mysqlnd」があれば成功。

参考に
yum -y --enablerepo=remi install php54-mysqlnd
では依存モジュールでconflictが発生して出来なかった。

で次のURLを参考に入れなおし。
http://server-setting.info/centos/php54-install.html
  

 

2013/02/21

MongoDBのDateで検索する際の落とし穴

MongoDbはISODateとして残る。
javascriptのnew ISODate()で登録すると GMTで登録される。
#参考にGMTとUSTはグリニッジ標準時をご覧ください。

これをphpのstrtotime()とかで日付を取得して検索すると
GMTとJSTの+9時間の時差が出る。

参考にphp.iniに「date.timezone = Asia/Tokyo」があった。

例)
(1) new ISODate(2013-01-02 01:00:00) で登録
    GMTで登録される。すなわち JST 2013-01-01 16:00:00である。

(2) 以下のようにphpで検索条件を作る。
  $start_date = new MongoDate(strtotime('2013-01-02 00:00:00'));
  array("_id" => array ('$gte'=>$start_date));

  print( date('T Y-m-d H:i:s',$start_date->sec) ) ; -> JST 2013-01-02 00:00:00'と表示される。

上記(1)をmongoで見るとISODate("2013-01-01T01:00:00Z")のように見えるから
注意しないと間違ってしまう。

登録するときは+09:00した時間で登録するか
あるいは検索条件に−09:00にしないと。。
参考になるサイトをreferenceに貼っておく。

しばらくはphpでnew MongoDate()する際に以下の様にしてる。
$GMT_TimeZone = new DateTimeZone('GMT');
$start_date_Ymd = new MongoDate(
    DateTime::createFromFormat('Y-m-d H:i:s',
        date("Y-m-d 00:00:00", strtotime("-31 days")), $GMT_TimeZone)->getTimestamp() );


2013/02/14

MapReduceのjavascriptのデバッグ方法

Mapreduceのjavascriptの処理の途中の値を見たいときは。

mongo シェルから実行するときは普通に
 print("user_id =" + user_id);
のようにすればmongodのログに出力された。

PHPから実行したときは?
あとで確認する。

2013/02/08

TASK#2 PHPで年月日でGroup byしてカウントする方法


SELECT DATE_FORMAT(  `create_date` ,  '%Y/%m/%d %H:00:00' ), COUNT(user_id)  FROM user_table GROUP BY DATE_FORMAT(`create_date`, '%Y%m%d %H') の実装方法

(1)mapreduceでjavascriptのdateformatを使って文字列を日付に変換させようとしたが、次のエラーが出て失敗。
exception: map invoke failed: JS Error: ReferenceError: DateFormat is not defined nofile_b:1

CSVでデータをImportしたときは 
日付のGroup Byをしたい場合は「年/月/日/時/分/秒」等で分類して持った方がやりやすいかも。

 
(2)Mapreduce関数を利用した(Scopeも利用した)
// get yyyyMMddのScope機能も利用
$scopeFunction = "function (y,m,d) {
        if ( m < 10) {m = '0' + m;}
        if ( d < 10) {d = '0' + d;}
        return y + m + d;
    }";

$scope = new MongoCode($scopeFunction); // MongcodeでScopeを利用

// map 関数と reduce 関数を作ります
$map = new MongoCode("function() {

    var group_key = getYyyyMMdd(this.create_date_y,this.create_date_m,this.create_date_d);
    
    emit(group_key,1); }"); //GroupByのcreate_dateになるキー

$reduce = new MongoCode("function(k, vals) { 
    var count = 0; // 初期化
    for (var i in vals) {
        count += vals[i]; //count up
    }
    return count; }");
// phpのCommandで実行
$result = $db->command(array(
    "mapreduce" => "collection", 
    "map" => $map,
    "reduce" => $reduce,
    "scope" => array("getYyyyMMdd"=>$scope), // この設定に注意
    "out" => array("replace"=>"new_user_daily_count")
 ));

$cur_daily_counts = $db->selectCollection($result['result'])->find(); 

2013/02/06

TASK#1 MySQL -> mongodb

1. Export does User Data of MySQL in CSV.
( use "select * from table_name into outfile "path/to/export.csv" fields terminated by ',';)

2. I used "mongoimport".

CSV file
user_id, user_pw , name <- header
10, test_pw,名前1 <- row
20, test_pw,名前2 <- row

$ mongoimport --db bad_kpi --collection {CSV file name} --type csv --file {csv path} --headerline --upsert

in mongo
{"_id":ObjectID(xx1), "user_id":10, "user_pw":”test_pw”, ”name”:”名前1"}

{"_id":ObjectID(xx2), "user_id":20, "user_pw":”test_pw”, ”name”:”名前2"}

【参考】
(1)primary keyがひとつであれば”_id"に書き換えて出力するとmongoimportの--upsert だけで重複更新を防げる。
(2)更新されたデータのimportも--upsert を指定すると_idが一致するだけで更新される。

【注意点】
(1)CSVからのdate型のimportはやはり出来なかった。- ISODateを指定したらdateの文字になる。
−{"$date" : 111111111} はエラーとなる。
(2)ISODateの入力ができないから年月日をバラバラにしていれたら数字になった。
例)CSV -> mongodb
date_m : ”02” -> "date_m" : 2

mongodb With PHP 構築

  • 環境
    • OS: CentOS5.5
    • PHP: 5.3.14
    • ZendFramework : 2.3
  •  インストール方法
  • http://docs.mongodb.org/ecosystem/drivers/php/にあるどおりしたら簡単に「/usr/lib/php/modules/mongo.so」が出来た。
  • が、権限が「rw-r--r--」のまま。実行権限が必要ではないかと思いとりあえず権限を与える。
 
  • Connection check
    • http://www.php.net/manual/en/mongo.tutorial.phpの例のまましたらすんなり出来た。

2013/02/04

MongoDBを使う上の基本を勝手に決めてみた。

  • Reference
    http://docs.mongodb.org/manual/reference/
    • About BSON Document
      http://docs.mongodb.org/manual/core/document/
    • MongoDB Extended JSON
      http://docs.mongodb.org/manual/reference/mongodb-extended-json/ 

  • Use Cases
    http://docs.mongodb.org/manual/use-cases/

  • SQL to MongoDB Mapping Chart
    http://jp.docs.mongodb.org/manual/reference/sql-comparison/ 

  • PHP Manual
    http://www.php.net/manual/en/mongo.tutorial.php