« 子供の無邪気な意見 | トップページ | 語学の勉強が進まない »

2012年7月19日 (木)

PHPの勉強でハマった事

現在、PHPを勉強するため、Mac上に開発環境を構築してます。
・Mac OS X Lion 10.7.4 (Xcode 4.2.1)
・apache2 (2.2.21: OS標準:/usr/sbin/httpd)
・php5 (5.3.10: OS標準:/usr/bin/php)
・MySQL55 (5.5.25: MacPorts:/opt/local/lib/mysql55/bin/mysqld)
・NetBeans 7.1.2

NetBeansのおかげで効率良くソースを書くことができ、動作確認も簡単です。
動かない例題もあったけど、工夫して何とかこなしてます。
そんな便利な環境なのですが、うっかりハマって悩んだ事が2つあります。

1. DateTime()のタイムゾーンによる影響

現在の時刻を取得する場合、

$now = new DateTime();

とシンプルに記述できるのですが、これがFatal errorになります。
理由は、PHP5.3からタイムゾーンの取得に関して仕様変更があったようです。
Mac OS Xのターミナルから確認すると、環境変数TZは存在しません。
/etc/php.iniの[date]セクションもコメントのままです。なので、

[date]
date.timezone='Asia/Tokyo'

のように、既定のタイムゾーンを指定しておけば、期待通りに動作します。

2. preg_match()の正規表現

※ここから先はLion以降でないと正しく表示されません。

エスケープ文字を表現するのに、'\'(バックスラッシュ)を用います。
Windows環境が長かった僕は、'¥'(円記号)で代替するものだと思ってました。
※もし、'\'と'¥'が同じ表示に見えてるなら、この問題は発生しません。

NetBeansも初期状態はShiftJISなので、普通に常識の範囲かと。

preg_match('/^¥w{3,20}$/', $user_name)

これで、$user_nameが3〜20文字に収まるが確認できるのハズなのですが…
$user_nameに何を与えても、まったくマッチしません。

OS標準のPHPの不具合なの?と悩みましたが、MacはWindowsじゃないもの。
ウムラウトが[option]キーで入力できるなら、もしかして…
やっぱり、バックスラッシュも[option]+[¥]で入力できます!

'¥'をバックスラッシュに変更したら、今度は正常動作しました。
Encodingでハマったのは初めてかも。
UTF-8とShiftJISの混合が多くなるので、新しいOSでは注意しなきゃ。

(追記)
手持ちのOSとブラウザの組合せを全部試したら、この状態はLionだけだった。
この記事はLionのFirefoxで修正してるんだけど、ちゃんと区別されてるなぁ。

« 子供の無邪気な意見 | トップページ | 語学の勉強が進まない »

仕事部屋」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/564846/55230577

この記事へのトラックバック一覧です: PHPの勉強でハマった事:

« 子供の無邪気な意見 | トップページ | 語学の勉強が進まない »

2014年11月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
サイト内検索
ココログ最強検索 by 暴想

Twitter

開発Twitter

無料ブログはココログ