サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
cake67.hatenadiary.org
CakePHPのSQL負荷が気になったので、開発サーバにスロークエリ入れてみました。 私が個人でしょぼしょぼ動かしてるだけのサーバ設定しても検出できるのか?という疑問が今まであったのですが、 MySQL5.1にすると、マイクロ秒単位、0秒単位にすれば全クエリのスロークエリを検出できると聞いて、MySQLのバージョンアップ決意しました。 漢(オトコ)のコンピュータ道: MySQL 5.1のスロークエリログ http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/log-tables.html http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/slow-query-log.html しかも、mysqlを稼動したままスロークエリ設定変更できるので、オンラインで「今のクエリ負荷みたい」
コントローラでは、$this->paramsで得られる値:例えば$this->params['prefix']や$this->params['admin']を、 コントローラ・コンポーンネント以外で得る方法。 コアユーティリティのRouterを使います。 【例】 $params = Router::getParams(); debug($params); exit;【出力】 Array ( [plugin] => links [controller] => links [action] => admin_edit [named] => Array ( [略] ) [pass] => Array ( [略] ) [prefix] => admin [admin] => 1 [form] => Array ( [略] ) [data] => Array [略] )
コントローラ名 $this->viewPath アクション名 $this->action あるいは コントローラ名 $this->params["controller"] アクション名 $this->params["action"]
XOOPSの全バックアップ&リストアの相談。 DBだけじゃなく、ソースもバックアップ必要なのだそうです。 追加ソースだけ、とかいうと帰って面倒なので、全ソースまるごとバックアップ。 でも、apache書込み関連で権限変更してるDIRもあるので、所有者情報と権限も保持したい・・・と言う感じ 検討結果の概要。 私が苦手のtar遣い;; 参考サイト:http://www.jp.freebsd.org/cgi/mroff.cgi?sect=1&cmd=&lc=1&subdir=man&dir=jpman-6.0.0%2Fman&man=tar バックアップは、そのソースに読込みアクセス権限あればOK ソースの親DIRで、以下の感じ tar zPcvf [tar.gz保存先DIR]/hogehoge.tar.gz ./[ソースDIR] 解凍は、root権限+pオプション 少々手こずったのがこっち。
コントローラの $this->set(〜〜)でセットした値を参照する属性 $this->viewVars[変数名] $this->viewVarsは配列なので、値のチェックは if (in_array('isOwner', $this->viewVars)や if ($this->viewVars['isOwner'] !== true) {などでできる。
CSRF対策のトークンチェックは、結局自作で入れる事にして、 Token作成およびチェックのコンポーネントとヘルパーを作成しました。 プラグインにまとめても良さそうなのですが、良い名称が思い浮かばないので保留 *1 (2011/2/10 コメント指摘を受けて修正しました) 作成したコンポーネントとヘルパーのソースは末尾。 Tokenコンポーネント Authコンポーネントの$ActionMapを見て、未設定/read以外(create, delete, update)のアクションであれば、POSTがある場合Tokenチェックを行なう。 Tokenがない、あるいは正しくない場合、処理停止。 Tokenヘルパー value=セッションIDのハッシュ であるhiddenタグを出力 暗号化はデフォルトmd5 コントローラ・ビュー側の対応 Tokenチェックはapp_controllerのbefore
shin1x1さんがtwitterで「ver1.3にこんな機能がある」とtwitterで呟かれていたのをみて、実際に使ってみました。 virtualField機能で、できること*1 定形の計算や文字列処理を、取得時にSQL内で行う SQL関数を直接指定 まずは、作成したMemberモデルに、元記事を参考に、$virtualFieldを設定して見ます*2。 app/model/members.php var $virtualFields = array( 'name' => 'CONCAT(Member.first_name, " ", Member.family_name)' );そして、bakeで作ったindex(members一覧)にアクセスすると、こんなSQLが出力されていました。 SELECT `Member`.`id`, `Member`.`first_name`, `Membe
CakeDC様配布の、CakePHP用タグ付けプラグイン TagsPluginを導入しました。 http://cakedc.com/downloads/view/cakephp_tags_plugin 導入時のトラブルや、実際の挙動、そしてタグ削除・タグクラウドを表示する際の疑問点などがあるので、それらについて記載します。 導入 導入方法は以下を参考にしました http://sonnygauran.co.cc/blog/2010/03/28/cakephp-tags-plugin-documentation/ ただし、書いてある通りに cake schemaを実行すると、エラーになりました。 [cake@cake databank]$ cake/console/cake schema create app -plugin tags Welcome to CakePHP v1.3.6 Con
下の記事で存在を知ったのですが、 CakePHPに、様々な「ちょっとした処理」を追加できる UtilsPlugin という便利なものが配布されています。 http://1-byte.jp/2011/01/06/open_trivist/ しかし、公式ページ(ver.1.1)や、READMEを読んでも、何にどうやって使うか、ちょっと分からない物もあります。 そこで、UtilプラグインVer.1.1で何ができるのか、自分なりにソースを解読したメモです。 PingBackやTinySluggable、Archive、Cleanup、Listなど、実際に使ってみたい機能もあったので、 実際に使用したら、具体的な導入方法を、別途記事にします。 また、UtilsPluginを配布しているCakeDC様では、他にも様々な、CakePHP用の便利なプラグインを開発&公開しています。 http://cake
CakePHPをver.1.3にアップしたのに伴い、 1.2時代から導入+拡張コンポーネント入れて独自遣いしていた、Mediaプラグインも、1.3b*1にアップデートしました。 その際の、トラブル解消過程のメモです。 * 注 1.「独自拡張」由来の不具合が混ざっているかもしれません。 2.アップデートしながらのメモなので・・・ひょっとすると、現状ではメモ外での修正しなおし・解決済み項目あるかもしれません・・・ 異論歓迎(^^;;) ベースCakePHPの1.2->1.3バージョンアップにともない、 Mediaプラグイン自体のソースも0.6->1.3(β)に置き換え。 しかし、それだけではエラーがでる箇所がありました。 Mediaプラグイン1.3で、公式ドキュメントなどが行方不明になってるので苦労しましたが、 ダウンロードされないdocディレクトリに、多少情報がありました。 https://
saveAll()を使うと複数のデータを一括で保存できます。 大変便利ですが、 セットするデータの形式に、注意が必要です。 CookBook記述 saveAll(array $data = null, array $options = array()) 次のいずれかの目的で使用します。 (a) 単一のモデルに、個別のレコードを複数記録する。 (b) あるレコードと同様に、関連したレコードも全て記録する。 http://book.cakephp.org/ja/view/1031/Saving-Your-Data 基本は以上の通りですが・・・ 単一のモデルに、個別のレコードを複数記録する場合 例えば、Userに複数のuser情報を一回で登録したい場合 1.第一引数は $data['User'] save()では$dataで渡すので、ここ間違えやすい。 2.$data['User']以下に、整数
ユーザ入力などから危険なHTMLタグおよび属性などを削除する正規表現。 preg_replaceで使用します。 不完全な箇所もあるかもしれないので、ご参考までに。 タグからstyle属性を削除 $pattern = '/style=[\"\']?[^>]*[\"\']?>/si'; $replacement = '>';もしstyleの後ろに他の属性があったら、それも削除されますが、 「使わないでください」とお願いしてる環境でそんなもの入れる方が悪い、と割り切りました(笑) タグからon****属性を削除 $pattern = '/on[\w]+=[\"\']?[^>]*[\"\']?>/si'; $replacement = '>';もしon****の後ろに他の属性があったら(以下同文) url(***)設定を削除する $pattern = '/url\(.*\)/'; $replace
主にCSRF対策目的で、SecurityコンポーネントのrequireAuthチェックを導入しました。 基本の導入はできましたが、対策した方がよさそうな懸念や、改善したい点もあり。 実装は、以下を参考にしました。 CakePHPでCSRF対策 - Shin x blog 違い ビューファイルへのToken埋め込み ver.1.2.5では、$form->create()および$form->end()が自動で行なってくれます。 というか、この2つを使わないとエラーになります。特に$form->end();。 $form->end();が発行するfieldトークン*1が、フォーム改ざんハッキング防止のカギなので、その意味でも$form->end();で閉じるのが鉄則です。 bakeが書いたview ver1.2.5では、bakeで作ったviewも$form->create()&$form->en
ACL入れようとしてますが、最後の(?)詰め、Controller側の設定でハマってます・・・ 検討&調査中のメモ。 (追記:解消しました。 解は「action」あるいは「crud」です) 参考サイトで、 AppController に $this->Auth->authorize = 'actions'; と入れておきます。とありますが、この方法だと、actionごとに全部aros_acos設定しなくてはならないようです。 controllerやModel単位でかけた設定だけでは、リダイレクトループのエラーになります。 アクション毎に全部ちゃんと設定いれようかなあ、と弱気になりつつ、$this->Auth->authorizeについて調査。 すると、例示に「modelを指定しなさい」的なことが書いてありました。*1 ACO を利用する時など、コントローラ中での処理を行わない場合はどうすれ
モデルの中で別のモデルを使う、という方法は既に紹介されています。 ひでぶろぐ。 containable で関連モデルを読み込ませない コントローラ側で別のモデルを使う方法も、ほぼ同様で実現できました。 例えば、UsersコントローラでPreUsersを参照する場合。 users_controller.php class UsersController extends AppController { var $name = 'Users'; var $PreUser; function set_pre_users() { App::import('Model', 'PreUser'); $this->PreUser = new PreUser(); } これで、users_controller.phpの任意のメソッド内で、 $this->set_pre_users();を行った後、 $thi
$form->inputでラジオボタンを出力するときに、初期状態で値をどれか選択済にしておく方法。 $form->radioによる方法は調べれば出てきますが、$form->inputは見当たらなかったので・・・ 結果論、$form->radioとほぼ同じでした。 Thanks for 「cakephpは困ったらソースコードを見に行けば、たいていのことは理解できる。可愛いヤツだ。」 $form->radioによる方法 [cakephp]cakephp1.2でラジオボタンを初期選択させる方法 CakePHP html ヘルパーでラジオボタンの選択状態 (checked) を指定する方法 | Sun Limited Mt. function radio($fieldName, $options = array(), $attributes = array()) の、$attributesに設定し
「IE”だけ”で、Javascriptの謎エラーが出るんだよ(苦悩)」 解決の一端。 IEが出す、”お困り” エラーメッセージの1つ。 「オブジェクトを指定してください。」 なにがやねん!!! ・・・と叫びたい気持ちを、IE8がで多少改善されてたので、なんとか抑えて(多少抑えず) ググると。。。 http://web-cre.jugem.jp/?day=20070529 「コマンドやコメントetcで、日本語を入れた場合。 <script>タグの属性にcharsetを指定しろ、ってことみたいです。 例えば <script type="text/javascript" src="./lib/js/trpgchat.js" charset="utf-8"></script> これで、今まで出ていた謎のIEエラーが、多数解消されました T-T
Javascriptで、PHPのvar_dumpっぽい事が出来ないかな~と思って探してみたら、 prettyprintというライブラリを見つけました。 JavaScriptのvar_dump·prettyPrint.js MOONGIFT http://github.com/jamespadolsey/prettyPrint.js 使ってみた感想。 PHP本家のvar_dumpよりも、キレイで見やすい! PHPのvar_dumpは、内容をstringベタ書きで出すので、 複雑になると、構造が非常にわかりずらくなります。 だから、「PHPのvar_dumpを忠実に再現」されると、 ある意味困る ^^; でも、prettyPrintは、 「ブラウザで見るphpinfoっぽく、var_dumpできる」*1 今後もっと使いやすいように、 var_dump名でextends関数など追加してしまいまし
CakePHPベースの自作アプリケーションのα版を公開環境においてみて一番問題だったのは、負荷でした・・・ アクセス〜表示に数秒かかるとは。 アプリ内部の追加や修正が一通り見込みついたところで、負荷対策開始。 手始めとして、実際に負荷を測定して「見える」状態にするために、Benchmarkコンポーネントを入れました。 ApachBenchは、おそらく要ログイン画面の測定ができないので・・・ 参考サイト pblo | ぴーぶろ : webデベロッパーの勉強メモとか Benchmarkコンポーネントは、以下のものを使用*1 http://blog.aidream.jp/cakephp/cakephp-benchmark-component-1366.html init.php(bootstrap.phpから読み込んでいるconfig)にベンチマーク実行定数を設定。 app_controller
mediaプラグインで、Versionファイルの設定はcore.phpに設定しますが、実際にどのように設定すればよいのか、主な例をまとめました。 プラグイン側のconfig/core.phpを改修するか、 bootstrap.phpでmediaプラグインのcore.phpを読み込んだ後で、Configure設定上書きで変更します。 設定の説明 キー('xxs'〜'xl') 設定名。任意で設定を増やす事も可能(要、viewソースの改修) 'convert' => $MimeType $MimeType形式で出力 'fitCrop' => array($width, $height) 幅$width, 高さ$height(px)に縮小/拡大してトリミング(原画の幅か高さの長い方をカット) 'fit' => array($width, $height) 幅$width, 高さ$height(px
CakePHPに、CAPTCHA機能PHPライブラリ「Securimage」を導入してみました。 ライブラリ設置 まず、ダウンロードしたSecurimageのパッケージを解凍して、以下のように配置。 /app /vendors /securimage securimage.php /webroot /captcha elephant.ttf 同梱のgdfonts, imagesを使う場合は、webroot以下に設置して、後述するようにコンポーネントでパスを設定します。 Captcha用コンポーネント作成 コンポーネント化の手順は以下を参考にしました CAPTCHAの導入方法[訂正] - ふと、思いついたんだ <?php /* * Captcha (Secure Image) */ class CaptchaComponent extends Object { function startu
以前、Session.saveを独自設定を指定して、セッション有効期限などを変更する方法を紹介しましたが、 この方法、セッションをDBあるいはキャッシュに設定する場合は避けた方が良さそうです。 実例 セッションのDB保存設定をベースに、session.cookie_lifetimeを0=ブラウザを閉じるまで に変更しています。 実装状態はこちら この設定で運用していたら、viewで$session->flash()した後もメッセージが消えず、 ログイン後もログインエラーメッセージが出続ける データセーブ後、別の画面に遷移しても保存完了メッセージが出続ける*1 などの現象が発生していました。 調べると、$session->flushで$_SESSIONからはMessageが削除されるのに、データベースのcake_sessionsでは削除されていません。 これが原因のようです。 解析 core
ちょっと思い立って、twitterのダイス振りbot探してみました。 ダイスとカードのロジックは持ってるのでそういうbot作ってもいいかなあ、と思ったのですが、発信のシステムとか考えないと難しいですね。。 見つけたbot _dice_bot http://twitter.com/_dice_bot 日本語。現在まさに開発中。期待大! フォロー必要 使用手順:リプライ+コマンド発信 → 一分後にリプライでダイス受信 [例] @_dice_bot 2d6 @cake67 [1][3] = [4] rollthedice Roll The Dice (@rollthedice) | Twitter オフィシャル解説 英語 機能充実 でも、説明通りコマンド打ってみたけど、動かなかった・・・何か間違ったのだろうか。。 フォロー必要 kukun99_trpg http://twitter.com/ku
Mediaプラグインによる画像のアップロード機能作成で、書いた記事のまとめリンクです。 Mediaプラグイン導入 mediaプラグイン導入(1) 基本的な導入 - 趣味の延長線 mediaプラグイン導入(2) 表示 - 趣味の延長線 保存 $fieldListチェック madiaプラグイン 応用(1) $fieldListチェックの設定 - 趣味の延長線 アップロードファイル名の変更 mediaプラグイン応用(2) アップロードファイル名の変更 - 趣味の延長線 アップロードファイルの種類・最大サイズチェック mediaプラグイン応用(3) ファイルチェック - 趣味の延長線 複数アップロード禁止 mediaプラグイン応用(7) 複数アップロード禁止 - 趣味の延長線 アップロードしたユーザの管理 mediaプラグイン応用(11) アップロードユーザ情報の追加 - 趣味の延長線 表示 画像
インストーラを作りたい。 できれば、サーバにソースをアップロード→ブラウザアクセス、一部データ(管理ID,パスワードなど)を入力→実行 で、できるだけ全てが済むようなインストーラを。 基本的なインストーラの作り方の一例を記載した記事を見つけたので、読解しつつ、ポイントまとめ。 Writing an installer for your CakePHP application - cakebaker 上記記事の内容を踏まえて見ると、CroogoやCandyCaneインストーラが、割と容易に理解できました。 基本インストーラについて フロー要約 1. route.php:app/tmp/以下に”インストール済み”目印のファイルがない場合、以下のinstallerコントローラ実行 2. indexアクション:特に処理なし。インストール開始メッセージ&ボタンでも表示するか? 3. database
Formヘルパーで、日時選択フォームの出力をカスタマイズする方法。 以下の参考サイト:dateTime()による指定方法をベースに、 input()による指定方法 および 月を英語以外で表示する方法 プルダウンの最初を空欄にする/しない方法 参考サイト CakePHP1.2 Form ヘルパーで日付のフォームを作る | Sun Limited Mt. $form->input('disp_date')の出力 以下の$options設定および追加CSSでカスタマイズした出力 echo $form->input('disp_date', array( 'label' => __('Date', true), 'default' => date('Y-m-d H:i', strtotime($this->data['Model']['disp_date'])), 'timeFormat' =>
主にACL関連のSQLでINDEX追加できる物が無いかを調査してみました。 参考 MySQLとオープンソースに捧げる毎日:MySQLチューニング - livedoor Blog(ブログ) MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.8.2 EXPLAIN 構文 MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.2.1.15 ORDER BY の最適化 MySQL逆引きクイックリファレンス―MySQL 4.0/4.1/5.0対応 作者: 山田祥寛出版社/メーカー: 毎日コミュニケーションズ発売日: 2006/12メディア: 単行本この商品を含むブログ (3件) を見る 結果、追加したINDEX CREATE INDEX model_foriegnkey ON aros (model, foreign_key); CREATE INDEX a
mediaプラグインの基本的な保存・表示周りを一通りできるようになりました。 「こんな事できないか」な課題はありますが、 多様な種類のファイルアップロードを一元的に扱えるのは魅力的。 設定などでカスタマイズできないか、検討してみます。 拡張が必要な物もありそうですが、 まずはmediaプラグインのオプション設定などで対応できる箇所から着手します。 手始めに、ファイルアップロード時の$fieldList設定のやり方を検討しました。 前の記事 mediaプラグイン導入(1) 基本的な導入 - 趣味の延長線 mediaプラグイン導入(2) 表示 - 趣味の延長線 保管時の$fieldList設定 Attachment自身については、$fieldList設定の必要は無いようです。 attachmentsの各項目は、mediaビヘイビアのbeforeSave()内で、全てblackListあるいはw
画像など、アップロードファイルを保存・表示するプラグイン「Media Plugin for CakePHP」を導入してみました。 個人的に、実際に使うには、若干機能追加が欲しい感じですが、まずは基本機能の導入から。 今回の目標 「ユーザのイメージ画像アップロード&表示」機能を追加 1ユーザが設定できるイメージ画像は、1種類 アップロード画面は、users/edit(ユーザ情報編集画面)とは別アクション(usersの項目を編集しない)。 CakePHPのバージョンは1.2.5 手間取った点 Formにtype => 'file'の設定ミス user_idの設定(usersの項目を編集しない画像設定アクションに設定したため) 参考サイト 手順 CakePHP1.2.3 MediaPluginをつかってみた - 忍び歩く男 - SLYWALKER http://d.hatena.ne.jp/ca
次のページ
このページを最初にブックマークしてみませんか?
『cake67.hatenadiary.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く