cakephp

cakephp mysql 結局update文を繰り返すともりもりメモリが消費されていく件

cakephpのバッチの中で、saveメソッドでupdateを繰り返すと、どんどんメモリが消費されていく。んで、色々試したけど結局解決出来なかった。素のphp+mysql_queryメソッドでも同じ結果だった。php内であればガベージコレクタが働くけど、前のcurlやmysqlとい…

php プログラムがメモリリークしているかチェックする方法

vmstatのfreeを見れば良い。メモリリークしていればfreeがどんどん減っていく。(目的以外のプログラムが動いていないか(cronとかで)注意。) [root]# vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd f…

cakephp1.2 formヘルパーのactionを指定したい場合

formヘルパーを使っていてactionが意図したものにならない場合 create('Sample',array( 'action' => 'edit', 'type' => 'post' ))); ?> こう書いても、アクセス方法によっては <form id="SampleEditForm" method="post" action="/samples/edit/1"> みたいな感じでactionに余計なパラメータがつく場合などがある。 これを例えば</form>…

cakephp1.2 キャッシュエラーになる原因について

cakephp使っているとたまにキャッシュファイルがunlink出来なかったとかtouch出来なかったとか出る時がある。通常アクセスが多い場合等、同時アクセスが起きた時に発生する場合があるらしいが、別にアクセスはほとんど無いのにキャッシュエラーが頻繁に起き…

cakephp1.2 スマホ判定

appController内でRequestHandler読み込んでbeforeFilterの中で以下のようにする。 RequestHandler->isMobile()) { $this->view = 'theme'; $this->theme = 'mobile'; } こうするとviews/themed/mobile/controller/index.ctpみたいな感じでthemed/mobile内を…

cakephp キャッシュ周りがおかしい場合はキャッシュしないようにすること

モデルで少しトリッキーなことをしたらキャッシュが悪さをしてしまい機能によって動いたり動かなくなったりしてしまった。そういう場合はもうキャッシュ自体を無効にしてしまうことも検討すること。以下で無効にできる。

cakephp1.2 componentの__constructについてメモ

コンポーネントで初期化処理したい場合は__constructを使えば問題無い。[ステップアップ! CakePHP] Controller で Component を使う | バシャログ。 ただしここにもあるように通常はinitializeかstartupを使う。__constructとの違いはShellとかでcomponent…

cakephp1.2 Shellからモデルとコンポーネントを呼ぶ方法

コントローラーであれば$usesと$componentsを使うけど、Shellの場合は$usesは使えるけど$componentsは使えない、というなんとも中途半端な感じだったのでメモ。以下のようにする。 Sample = new SampleComponent($this); } } 資産…

cakephp1.2 componentの$enabledでNoticeが出る件

本来componentを使うと$enabledがセットされるんだけど、beforeFilter()の中でcomponentをnewしてしまうと、$enabledが定義される前にstarup()とかを呼んでしまい、Noticeが出るのでcomponentをbeforeFilter()の中でnewしないこと。$enabledはcomponentのsta…

cakephp1.2 database.phpのdefaultに設定されているDBのテーブルはModelファイルの作成が必須ではない

ClassRegistry::init('ModelName');こんな感じでmodelsフォルダに存在しないModelを読み込んでいた場合に、何故かエラーになる場合とならない場合があって1時間くらいはまってしまったのでメモ。どうやらdatabase.phpで$defaultに設定されたDBのテーブルだと…

cakephp1.2 通常のSQLとO/Rマッパーとのselectの結果の違い

今更だけどメモ。cakephpでO/Rマッパーというかfindとかした時の結果と、通常のsql(query)を実行した時の結果の違いについて。通常のsqlを使用した場合 sql $sql =<<<SQL select * from users u inner join posts p on p.user_id = u.id where u.id=1 SQL; pr($this->User->query($sql)); 結果 Array ( [0] => Array ( [u] => Array ( [id] => 1 [user_name] </sql>…

cakephp1.2 バッチ(Shell)からControllerのメソッドを呼びたい

Shell側は以下のようになる Users = new UsersController(); } function main() { $this->Users->func(); } } 通常ShellからControllerのメソッドを呼ぶような事はしないんだけど、今回はpro…

cakephp1.2 queryで更新系SQLを実行した時の戻り値はtrueではない

例えば以下のような処理があったとして query($sql, $param); sqlが正常に完了してもqueryの戻り値は【trueにはならず】に【空のarray()】が返る。 はい、1時間はまりました~。貴重な人生の1時間を無駄にしました~。空のarrayなので【if(!$ret)】とかで判…

cakephp1.2 モデルのリレーションを全解除する

AppModel.php public function unbindModelAll($reset = true) { foreach(array('hasOne','hasMany','belongsTo','hasAndBelongsToMany') as $relation){ $this->unbindModel(array($relation => array_keys($this->$relation)), $reset); } } 参考サイト モ…

cakephp1.2 findByIdにrecursiveを設定する

User->findById($user_id, null, null, -1); findByIdだけでなくfindByカラム名>であれば全部同じなのかも。参考サイト ku — cakePHPのfindByにrecursiveを設定する方法

cakephp1.2 複数の同一モデルデータを一括でバリデートすることはできない(多分)

これまでな~んどもおんなじことやってその度に調べて半年もすれば忘れておんなじことをな~んども繰り返すのでめんどくさいけどメモする。 例えばこんなデータ Array ( [0] => Array ( [Model] => Array ( [col1] => hoge [col2] => fuga ) ) [1] => Array …

cakephp1.2 updateはできる限りsaveを使うこと

saveでupdateする場合でid以外を条件にしたい場合、通常updateAllを使うんだけど、updateAllを使うと ・自動でサニタイズしない ・自動でmodifiedを更新しない ・値を'で囲まないといけない 等々煩わしすぎる。そのためできる限りidを指定してsaveのupdateを…

cakephp1.2 フォームのデフォルト値について

もう忘れたくないのでメモ。 以下のようなテキストボックスがあるとする。 create('huga')); ?> text('hoge')); ?> このフォームをpostしてエラーになってもう一度表示した場合、自動で入力した値がセットされる。 次にDBから取得した値をデフォルト値とした…

cakephp1.2 findでrecursiveを指定する

recursiveの指定の仕方を完全に忘れていて調べるのに5分くらいかかってムカッときたので次回は3秒で書けるようにメモ。書き方1 array( 'Model.id' => $id, ), 'recursive' => -1, ); $this->Model->find( 'all', $cond ); 書き方2 $id, ); // 第2引数はfie…

cakephp1.2 キャッシュについてまとめ

core.php

cakephp1.2 validateである値に等しいかどうかはcomparisonを使う

array( 'comparison' => array( // 1の場合 'rule' => array('comparison', '==', 1), 'required' => true, ), ), );

cakephp1.2 validateのrequiredとnotEmptyと値が配列の場合についての再考

無駄に悩んでしまったので改めてまとめる。値がセットされているかだけチェックしたい array( 'notEmpty' => array( // このルール名はなんでもいいのでruleに合わせておけばOK 'rule' => 'notEmpty', // ruleは必須 'required' => true, 'message' => '選…

cakephp1.2 paginateを使用する時のまとめ

cakephpでページング使用と思って、久しぶりだったので何を使えばよいか忘れてしまっていてpearのpagerにしようかと思ったけどやっぱりcakephp標準のpaginateにしようかと思ってやってみたんだけど実装までに4時間もかかってしまって鬱になってイラッと来た…

cakephp1.2 paginateでunbindModelする時は第2引数にfalseを設定すること

paginate実行する前にunbindModelする場合、必ず第2引数にfalseを設定して永続的に連結を解除すること。 そうしないと最初のcountの時だけ解除されて、データ取得する時は元に戻ってしまうらしい。参考サイト CakePHPのbindModelとunbindModel | 株式会社LIG

php セッションの有効期限を2038年以上にするとセッションクッキーになってしまう件

cakephp1.2でSecurity.level=lowにした上でsession_startすると、本来であれば有効期限が25年先となるはずが、有効期限がセットされずにセッションクッキーになってしまうという問題にぶち当たった。しかもphp5.1だと発生し、php5.2だと発生しない。色々試し…

cakephp1.2 フォルダを分けて同名のコントローラーを作りたい場合

調べたけどできなそう。 なので、フォルダを分けていたとしてもコントローラー名は重複させないこと。ちなみに、URLのコントローラー名の部分は被ってもroutesで制御できるので問題ない。 'user_histories')); Router::connect('/admin/histories/:action/*…

cakephp1.2 セッションの有効期限についてまとめ

通常のphpの場合、php.iniの以下の設定が有効期限に影響する session.cookie_lifetime = 0 session.gc_maxlifetime = 1440cookie_lifetimeはクッキーの有効期限(秒)となる。これが86400とかだと、クッキーのexpiresが1日後となる。0の場合は、セッションクッ…

cakephp1.2 session->flash()を1ページで複数使い分けたい場合

php Session->setFlash('テスト', null, array('class'=>'mb10'), 'test1'); $this->redirect('/'); html flash('test1'); ?>

cakephp1.2 prefixを無効にした場合のform->createのカスタマイズについて

前回の続きで「'prefix名' => true」とかにすると$form->createで勝手にprefixがつくのを防ぐことができるけど、今度は逆につけたい場合に困ってしまう。 create( 'Samples', array( 'action' => 'index', 'method' => 'post' ))); 上記で出力されるhtml↓ <form id="SamplesIndexForm" action="/samples/index" method="post"> </form>…

cakephp1.2 ルーティングの設定でform->createの際に自動でprefixがセットされるのを防ぐ方法

"Routes::connect設定時の$form->createや$html->linkの挙動について" フォーラム - CakePHP Users in Japan ここが参考になるroutes.phpの設定で「'prefix名' => true」とすると、$form->createした際などに勝手にprefixがセットされるのを防ぐことができた…