date.timezoneを設定する

VMWareを使ったLinuxのテスト環境を作ったのだが、timezoneに関するPHPのWarningがうるさいので、対策メモ。

コマンドラインから、次のように入力すると、

php -r ‘phpinfo(); | more’

1ページ目に以下のようなWarningが表示される。

PHP Warning:  phpinfo(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead in Command line code on line 1

phpをディストリビューションのものを使っていれば出てこないんだろうけど、最新のバージョン& Zend Framework をyum管理で楽したい場合、外部リポジトリを使うことになり、多分同じ問題が出るんだろうな。

date.timezone か、date_default_timezone_set()関数を使って設定する必要がある。とな。

/etc/php.ini の中に、コメントアウトされた date.timezoneがあるので、コメントを解除して、値をセット。

date.timezone = Asia/Tokyo

Apacheを再起動すればOK

packaging the Zend Framework with Phar

eclipseを使ったphpの開発で、library に直接Zend Frameworkのファイル群を置かずに、svn のリポジトリサイズを小さく保つ方法は無いか模索してましたが、phar(PHp ARchive) を利用すれば、いけそうな感じです。

Zend Framework の libraryだけでも20MB以上あり、その中には大量のファイルやフォルダがあります。これを pharというひとつのまとまったファイルに固めて、eclipse のexternal library として使おうということです。

どうやらZend 公式の zend framework phar はなさそう。
そのかわり、ここで、phar を作るスクリプト(package.php)が公開されていました。1行目と最終行のタグと、途中の &lt; を “<”に置き換える必要がありますが、使い方は簡単。
あわせて stub.php というファイルをここから取ってきて、上記package.phpと同じ場所においておきます。

  1. zend frameworkと適当なところにダウンロードして解凍する。
  2. 解凍してできた、 ZendFrameowork-1.10.6フォルダあたりに、pakcage.phpとstub.phpを置く。
  3. /etc/php.ini を編集する。
    phar.readonly = On となっているのをOffにする。
  4. package.phpにオプションを指定して、実行
    #php package.php -s ./library/Zend -p zf-1.10.6.phar
  5. 出来上がったzf-1.10.6.pharをeclipseの external PHARs…で指定すれば完了。
  6. ZendX も同様にphar化できるようだ。

以下のようにすれば、普通にコードとして使えるようなので、サーバ環境でも使えるのかな。include ‘phar://zf.phar’;

お節介

最近、symfonyをさわってみてます。

チュートリアルを実際に試しながら動かしてみて、さらに変数名やテーブル構造を変えていじってみて、どうにもうまく動かない箇所があった。symfony というかDoctrineの挙動なのかな。

文章には、以下のように書かれている箇所がある。

Doctrine は titlenamesubject など説明用のカラム名を推測して、基本的な __toString() メソッドを提供しようとします。何かをカスタマイズしたい場合は、次のように独自の __toString() メソッドを追加する必要があります。

「title, name, subjectなど」、など?、などってなんだよ! Continue reading

正規表現地獄

SQL文をPHPの正規表現関数を使って書き換える。この正規表現がなかなかうまくかけなくてハマッタ。

元のクエリの対象部分はこんな感じ。

hoge LIKE ‘%bar%’ AND fuga LIKE ‘%www%’

お題は、ANDの前の部分( hoge LIKE ‘%bar%’) を捕まえて、以下のようにしたい。もちろんbar や wwwは不定。

(SELECT id FROM xxx WHERE hoge LIKE ‘%bar%’) AND fuga LIKE ‘%www%’

そこで、最初書いたパターンがこれ。

“hoge LIKE ‘%.*%’”

確かに最初はうまく動いているかに見えたんだけど、これだと、最初のお題の文章全体がヒットしちゃうのね。つまり、hoge LIKE ‘% の % から始まって、 www%’ の %までが 「.*」で表現されていることになる。結局お題の文章全体がヒットしてしまい、期待通りではないことが判明。 Continue reading