PHPのfgetcsvで日本語が正しく取得できない場合

Posted in PHP on 12 月 25th, 2009 by msng – Be the first to comment

fgetcsv でデータを取ろうとしても
環境によって日本語が正しく取得できないことがあった。

ローカルの開発環境だとちゃんと取れるのに
本番サーバにアップすると変になる。

全然取れないのならまだわかるんだけど、
ちゃんと取れることもあれば
空っぽになることもあるという状態。

どうやらこれが原因だったらしく、

PHP: fgetcsv - Manual

注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。

ロケールを設定したらうまくいった。


setlocale(LC_ALL,'ja_JP.UTF-8');

携帯サイトのキャッシュコントロール

Posted in 携帯 on 1 月 21st, 2009 by msng – Be the first to comment

携帯サイトでは、動的に出力されるページでも
キャッシュが残っていて前回と同じ表示になってしまうことが多い。

なのでヘッダにこれをいれてキャッシュ回避。


<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-chache" />
<meta http-equiv="expires" content="-1" />

うまくいきました。

CakePHPの $this->data の中身の行方

Posted in CakePHP on 8 月 11th, 2008 by msng – 1 Comment

CakePHP 1.2.0.7296 で起きたこと。

$this->data はビューからも呼び出せるけど
なぜか消えちゃうデータが。

ビューから$this->data を呼ぶと、
なぜか全角文字が消滅する。

同じフォームから半角英数字を入れたら
普通に受け取れるのに、
全角文字をいれたら空になってる。

何ですかこれは。

手元の環境でそうなっているだけなのか
常にそうなるのか
そもそも仕様なのかはわからない。

ともかくメモ。

CakePHP 1.2 のRC1が出てる

Posted in CakePHP on 6 月 11th, 2008 by msng – Be the first to comment

CakePHP のバージョン1.2.0.7125 RC1 が出てる。
Release Candidate(リリース候補)ね。
安定版まであと一歩ですか。

CakePHP: Securityコンポーネントが動かない

Posted in CakePHP on 3 月 12th, 2008 by msng – Be the first to comment

バージョン 1.2.6311 にて。
動かないというより、token はセットされてるのに全部弾かれてる。

今のところ原因不明です。

CakePHP: $this->Model->del()で削除できない件

Posted in CakePHP on 3 月 12th, 2008 by msng – 1 Comment

これも 1.2.6311 固有の不具合だと思われ。

データベースによって、
$this->Model->del()
が動作する場合としない場合がある模様。

MySQL についていえば、
5系はいけるけど4系はダメなのかな?
テストまでしてないからわかりません。

で、これは 1.2.6311 の
cake/libs/model/datasources/dbo_source.php
が吐き出す SQL に問題がある模様。
新しいソースを持ってきたら直った。

まあβですから。

CakePHP: tmpディレクトリの中身に注意

Posted in CakePHP on 3 月 4th, 2008 by msng – Be the first to comment

CakePHP は tmp ディレクトリに書き込みを行うので
PHP 実行者の権限で書き込みができるようにする
(実際にはなってなくても一応動くみたいだけど)
のだが、なぜかそうすると router が見つからないというエラーが出ていた。

Fatal error: Undefined class name ‘router’ in /home/***/***/cake/dispatcher.php on line 333

書き込み可にしたらエラーが出るという
よくわからない事態にしばらく悩んでいたのだが、
実に簡単な理由だった。

ローカルでテストしたときに tmp/cache にできていたキャッシュファイルが
そのまま一緒にアップロードされて、
それを利用しようとしていたせい。

  • tmp/cache/models
  • tmp/cache/persistent
  • tmp/cache/views

の3つをカラにして、解決。

CakePHP: 対象データがなかった場合のFindとFindAllにおける戻り値の違い

Posted in CakePHP on 2 月 29th, 2008 by msng – Be the first to comment

CakePHP で使うモデルのメソッド Find と FindAll で、対象データがなかった場合は戻り値が少し違う。

Find と FindBy の場合、対象データがなかったら false が返ってくる。

それに対して FindAll と FindAllByの場合は false ではなく空の配列が返ってくる。

ということはどういうことかというと、

if (!$this->User->FindAllById($id)) {
    //対象データがなかった場合の処理
}

なら期待どおり動くが

if ($this->User->FindAllById($id) === false) {
    //対象データがなかった場合の処理
}

ではダメということ。

Find, FindBy なら false が返ってくるからどっちでもいける。

対象データの存在確認をするなら findCount で調べればいいわけで、そのために findAll を使うことはないかもしれないけど、例えば

$users = $this->User->FindAllByGroupId($group_id);
if ($users === false) {
    //対象データがなかった場合の処理
}

は、ついやってしまいそうな気がする。しない?

WordPressでドメインを変更するとき

Posted in WordPress on 2 月 28th, 2008 by msng – Be the first to comment

まあ当たり前なんだけど、やってしまったのでメモ。

このブログじゃないんだけど、WordPress でつくったもののサブドメインを変えたら管理画面にアクセスできなくなった。というよりブログ自体まともに表示されなくなった。

WordPress は URL を管理画面の「各種設定」→「一般設定」で設定するようになっていて、ログインするための画面や CSS ファイルなどの場所もそれを見てリダイレクトなり読み込みなりしている模様。

なので WordPress でドメインを変更するときは、先に両方のドメインでアクセスできるようにしておいてから、そのあと管理画面で設定するのがいいかな。

CakePHP: viewで使われる__(’文字列’)

Posted in CakePHP on 2 月 28th, 2008 by msng – Be the first to comment

view でやたら

__('文字列')

っていうのが出てくる(アンダーバー2つね)から何かと思ったら、 国際化のための関数らしい。

» CakePHP のおいしい食べ方: CakePHP1.2の簡単国際化

単語を置き換えるだけでいい部分は、これをやっとくといいかな。