February 2008

February 29, 2008

mysql export as csv

セル内の改行コードと行区切りのための改行コードのアレがうまくいかず、とりあえずstr_replace()で対処することに。
改行コードはとりあえずwindowsに合わせ'\r\n'に。

SQLでエクスポート
SELECT * FROM tblname
  INTO OUTFILE '/path/to/output.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n';
なんかおかしいセル内改行コード置換
$contents = file_get_contents("/path/to/output.csv");
$replaced = str_replace("\\\r\n", "\r\n", $contents);


February 28, 2008

pgpool - connection pooling

$ tar zxvf pgpool-3.4.1.tar.gz
$ cd pgpool-3.4.1
$ ./configure \
--prefix=/usr/local/pgpool \
--with-pgsql=/usr/local/pgsql
$ make && make install

$ cd /usr/local/pgpool/etc
$ cp pgpool.conf.sample pgpool.conf
$ vi pgpool.conf
listen_address = '192.168.0.50'
port = 5433
backend_port = 5432
enable_pool_hba = true
num_init_children = 10
max_pool = 20

$ cp pool_hba.conf.sample pool_hba.conf
$ vi pool_hba.conf
host   all   all   192.168.0.0/24   trust
$ ../bin/pgpool -n &

--- Benchmark ---
$ ab -n 500 -c 100 -k http://www.example.com/testapp
[ PostgreSQL-8.3.0 ]
Requests per second:    127.55 [#/sec]
Time per request:       7.840 [ms]
[ PostgreSQL-8.3.0 (connection pooling) ]
Requests per second:    181.14 [#/sec]
Time per request:       5.521 [ms]
[ MySQL-5.0.41 ]
Requests per second:    186.16 [#/sec]
Time per request:       5.372 [ms]


February 26, 2008

in_array

in_array()には第3引数にtrueを渡すこと。
$a = array("0");
var_dump(in_array(false, $a));  // true

$a = array("0");
var_dump(in_array(false, $a, true));  // false

$a = array(true);
$o = new stdClass();
var_dump(in_array($o, $a));  // true

$a = array(true);
$o = new stdClass();
var_dump(in_array($o, $a, true));  // false


February 23, 2008

__destruct

__destructは複数回コールされることがある。
1回しか実行されたくない場合はチェックが必要。
public function __destruct()
{
  static $flag = false;
  if ($flag) return;

  // process

  $flag = true;
}
リクエスト終了時に(1回だけ)実行したいということならシングルトンにしてregister_shutdown_function()を使うのが良いのかも。
class Singleton
{
  private static $instance = null;
  
  private function __construct() {}
  
  public static function getInstance()
  {
    if (self::$instance === null) {
      self::$instance = new self();
      register_shutdown_function(array(self::$instance, "shutdown"));
    }
    
    return self::$instance;
  }
  
  public function shutdown()
  {
    
  }
}


February 21, 2008

empty

empty()で0と"0"はtrue。
マニュアルちゃんと読めばいいことだが、若干直感に反する(特に"0")ので少しはまった。

trueを返すのは
null, undefined, array(), false, 0, "", "0"


February 20, 2008

listener could not find available handler

ORA-12516: TNS:listener could not find available handler with matching protocol stack

プロセスを多くすることで対処。
他DBのMAX_CONNECTIONSみたいなものかな。

alter system set processes=300 scope=spfile

静的パラメータの変更にはscope=spfileを用いる。
次回起動時からも有効なようだ。



February 19, 2008

__destruct, __sleep

__sleepは__destructより後に呼ばれるようだ。
まあ、少し考えればそうか。

Sabel

Sabel PHP Frameworkを開発しています。
http://www.sabel.jp/

Search
Categories
Tags
Recent Articles
Archives