2009/11/17 火曜日

シリアライズした行データの復元 @ Zend Framework

Filed under: Zend Framework — ne-zu @ 19:53:33 このエントリをはてなブックマークに追加

Zend FrameworkでのZend_Db_Table_Row_Abstract型、シリアライズ(serialize,unserialize)するとテーブルのmetaデータを無くしてしまいます。

マニュアルを見ると

復元した行は、なぜ切断された状態なのですか?

シリアライズしたオブジェクトは、可読形式の文字列となります。 データベースのアカウントやパスワードといった情報を 暗号化せずにプレーンテキストにシリアライズして保存すると、 セキュリティ上問題となります。 そのようなデータを無防備な状態でテキストファイルに保存したりしたくはないでしょう。 またメールなどで攻撃者に覗き見られることも好まないはずです。 シリアライズされたオブジェクトは、 正しい認証情報を知らない限りデータベースにアクセスすることはできません。

Zend Framework: Documentation

と書いてあります。ごもっとも。テーブルデータを取り戻すには、

PHP:
  1. $rowClone = unserialize($serializedRow);
  2.  
  3. $bugs = new Bugs();
  4.  
  5. // この行をテーブルに再接続し、
  6. // データベースとの接続を復活させます
  7. $rowClone->setTable($bugs);
  8.  
  9. // これで、行の内容を変更して保存することができます
  10. $rowClone->bug_status = 'FIXED';
  11. $rowClone->save();

と、setTableで再接続させます。

rowsetごとキャッシュしてる場合は、

PHP:
  1. $rowset->setTable(new Bugs());

と、rowsetにテーブルのインスタンスを渡してやれば、再接続します。

英語ではReactivating a Row as Live Dataなどと書かれていますね。

行データをキャッシュから戻した場合は、リアクティベイティング(←言いにくい)をお忘れ無く!

2009/11/1 日曜日

Zend_Db_Table_AbstractでZend_Cacheを利用して負荷軽減

Filed under: DB, Zend Framework — ne-zu @ 11:09:09 このエントリをはてなブックマークに追加

オデの日記@WEB系: Zend_Db_Table_AbstractでZend_Cacheを利用して負荷軽減

で、このZend_Db_Tableですが、生成する度にdiscribetable()というメソッドが呼ばれテーブル情報を取得します。とても便利なのですが、都度DB接続が行われ非効率すぎるのでZend_Cacheを利用してデータをキャッシュさせておきます。
discribeTable()が走るタイミングは
・insert()
・find()
・info()
を呼んだ時だそうです。

というわけでキャッシュを組み込みましょう。

PHP:
  1. $frontendOptions = array(
  2.         'automatic_serialization' => true
  3.     );
  4.     $backendOptions  = array(
  5.         'cache_dir'                => TMP_PATH
  6.     );
  7.    
  8.     $cache = Zend_Cache::factory(
  9.         'Core',
  10.         'File',
  11.         $frontendOptions,
  12.         $backendOptions
  13.     );
  14.     Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);

2009/10/28 水曜日

Zend Frameworkで多対多のテーブルをMyISAMなどリレーション無しで扱う場合

Filed under: さくらインターネット, Zend Framework — ne-zu @ 16:25:55 このエントリをはてなブックマークに追加

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:: PHPの種 ブログ

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

で、ある程度Zend_Db_Tableで保管ができるので、それを利用させてもらいましょう。

PHP:
  1. class BugsProducts extends Zend_Db_Table_Abstract
  2. {
  3.     protected $_name = 'BugsProducts';
  4.     protected $_referenceMap    = array(
  5.         'Bug' => array(
  6.             'columns'         => 'bug_id',
  7.             'refTableClass'  => 'Bugs',
  8.             'refColumns'        => 'id',
  9.             'onDelete'          => self::CASCADE,
  10.             'onUpdate'          => self::CASCADE
  11.         ),
  12.         'Product' => array(
  13.             'columns'         => 'product_id',
  14.             'refTableClass'  => 'Products',
  15.             'refColumns'        => 'id',
  16.             'onDelete'          => self::CASCADE,
  17.             'onUpdate'          => self::CASCADE
  18.         )
  19.     );
  20. }

んで、リファレンスを貼られたほうのテーブルで

PHP:
  1. class Products extends Zend_Db_Table_Abstract
  2. {
  3.     protected $_name            = 'products';
  4.     protected $_dependentTables = array('BugsProducts');
  5. }

DependetTablesをクラス名で指定しておきます。

これでDeleteがCascadeされたりなど、Zend_Db_Table側でリレーションを保管してくれます。
そもそもInnoDBが使えればいいんですけどねえ。。

2009/10/23 金曜日

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:

Filed under: さくらインターネット, Zend Framework — ne-zu @ 23:09:07 このエントリをはてなブックマークに追加

Zend Frameworkで多対多のテーブルを簡単に扱う。: PHPの種 ブログ

RDBMS上でリレーションを組んでおけば、Zend_Db_Tableの設定で 親側のテーブルに $_dependentTables を指定しなくてもよいので楽です。

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

2009/10/18 日曜日

Zend Framework 入門に良い書籍は何か

Filed under: , Zend Framework — ne-zu @ 23:00:25 このエントリをはてなブックマークに追加

0.いくつのバージョンからがっつり使っていたZend Framework。いつのまにやら新機能が出過ぎててちょっとついていけなくなりつつあります。
まあ普通にMVCなフレームワークとして使っている分には問題ないハズなんですが、新しい機能はきっと便利に違いない!と思い、色々と再勉強している最中です。

勉強にはやはり書籍だろう!というわけで、Zend Frameworkの書籍を調べていたら、あるわあるわ。。
こんなに本が出るほどブームなのか?(^_^;

どれを読んでいいのかさっぱりわかりません。

これが最も売れているっぽいし、レビューも評価が高いけど、いかんせん2007年の出版では古いのではないか。
増刷時に加筆されてたりするのかな。

こちらはSmartyとの連携も載っているとか。今Smarty使ってないけど。

レビューに

最後にブログサイト構築ですが、問題なくインストールして試す事が出来ましたし、
ディレクトリ構造表がありますので設置も解かり易い様に思います。実践ソースも参考になります。

とあるのでかなり惹かれる。実際にブログレベルの動くサイトを構築できて、ディレクトリ構造表がついてて理解もしやすくなってるのは素晴らしいです。

これは2009年6月と非常に新しいですね。
目次とか索引だけですがAmazonで中身検索できてよいですね。
こういうのはやはり助かります。

PEARのサンプルも色々ついていて素敵!となるか。まあ実際Zend Frameworkだけでなく、PEARも使ってますからね。
pagerは未だにPEARのを使ってたりします。

と、どれを読んでいいかよくわからないことに。
そのうち読んで使った中身レビューを届けるつもりです。。

2009/9/23 水曜日

ZendFramework::エラーコントローラをモジュール毎に分ける

Filed under: Zend Framework — ne-zu @ 12:26:34 このエントリをはてなブックマークに追加

ZendFrameWorkでエラーコントローラを使おうとした時のお話し。 - 西新宿のプログラマの日記

モジュール毎にErrorControllerを分ける方法が私にもわからんのです。
Default見に行っちゃう。
DefaultのErrorController内で$this->_request->getParam('module')でも見て振り分けるしかないのかな。

2009/9/13 日曜日

Zend Framework ではじめる携帯サイト

Filed under: モバイル, Zend Framework — ne-zu @ 18:49:51 このエントリをはてなブックマークに追加

Zend Framework ではじめる携帯サイト - Devel::Bayside

ZFではじめる携帯サイト(PDF)

すばらしいまとめ。参考になります。

2009/8/9 日曜日

Zend_Loader_Autoloaderの追記

Filed under: Zend Framework — ne-zu @ 12:12:11 このエントリをはてなブックマークに追加

Zend Framework 2.0からはZend_Loader_Autoloaderですよ、という記事を書きましたが、自分で組み込んだライブラリや、Application/modelにパスを通していたファイルが自動で読み込めなくなったりしてました。
デフォルトの動作では'Zend_'や'ZendX_'というprefixのものしか自動で読み込まないとか。

れぶろぐ - [Zend] Zend_Loader_Autoloader クラスの正しい使い方

ので、パスが通っていれば自動で読み込みにいく、昔のregisterAutoloadのような設定にするには以下のようにします。

PHP:
  1. require_once 'Zend/Loader/Autoloader.php';
  2. $autoloader = Zend_Loader_Autoloader::getInstance();
  3. $autoloader->setFallbackAutoloader(true);

メモメモ。

2009/8/6 木曜日

ZendFrameWorkで日本語完璧メール

Filed under: メール, Zend Framework — ne-zu @ 16:14:31 このエントリをはてなブックマークに追加

Letter Carrier Delivering MailImage by Smithsonian Institution via Flickr

ZendFrameWorkで日本語完璧メール - Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

Zend Frameworkは相変わらず日本語メール微妙なんだろーなーと何も調べず外部ライブラリを当たっていたところ、上記Qdmailは素敵でした。

とりあえず使ってみましたが、問題無しです。
これからガツガツ使っちゃうかも!

デコメール対応らしいですが、今のところ使う予定はないなぁ。。

Reblog this post [with Zemanta]

2009/7/1 水曜日

さくらインターネットMySQLを自動バックアップして『暗号化』してgmailに送る

Filed under: MySQL, さくらインターネット, Zend Framework — ne-zu @ 13:09:52 このエントリをはてなブックマークに追加

さくらインターネットMySQLを自動バックアップしてgmailに送る: PHPの種 ブログで運用していたところ、記事にこんなコメントが。

ネットワーク越しにバックアップするとなると、何らかの暗号化をした方が望ましいと思いますが、何か良い方法はないものでしょうか。

確かに言われてみればそうですね。MySQLにブログデータしか入ってなかったので、セキュアな考えが抜け落ちてました。ありがとうございます。

さくらのレン鯖にはgpg2が入っているので、それを活用させてもらいましょう!

/usr/local/bin/mysqldump --opt -c -h [MySQL SERVER] -u [USERNAME] --password=[PASSWORD] [DB NAME] | /usr/local/bin/gpg -c --cipher-algo AES256 --batch --passphrase "[PASSPHRESE]" | /usr/local/bin/php ~/mailto.php -m [MAILADDRESS]

AES256で暗号化してから送るコマンドに変更です。gpgのデフォルトで出力結果が圧縮されるので、前回付けていたgzipはいらないでしょう。

復号も色々オプションを付けられますが、一番簡単なのは

$ gpg [filename]

です。

暗号化したら一応復号できるかどうかのチェックしておいてくださいね。

ちなみに共有鯖の悲哀か

Warning: using insecure memory!

と警告が出ることは避けられそうにないので、cronに登録する時は、

1> /dev/null

を追記しておくのが好ましいでしょうね。

次のページ »

Powered by PHP-SeeD and WordPress ME