Yearly Archives: 2009 - Page 3

Zend_Loader_Autoloaderの追記

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

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

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

[php]
require_once ‘Zend/Loader/Autoloader.php’;
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
[/php]

メモメモ。

ZendFrameWorkで日本語完璧メール

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]

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

さくらインターネット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

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

ZendFrameworkで作る『イマドキ』のWebアプリケーション:第5回 Zend Framework 1.8と新しいZend_Tool|gihyo.jp … 技術評論社

PHPImage via Wikipedia

ZendFrameworkで作る『イマドキ』のWebアプリケーション:第5回 Zend Framework 1.8と新しいZend_Tool|gihyo.jp … 技術評論社

1.8のzfコマンドでプロジェクトを作成した場合,UNITテスト用のディレクトリが作成されたり,基本的なエラー処理を行うエラーコントローラやビューが用意されるようになりました。プロジェクトを生成して自動的に作成されるデフォルトページも,テキストだけだったものがグラフィックを含んだページに更新されています。

うーむ。Zend Frameworkの進化はやりおる。自分の知識が1.0以前ぐらいで止まってる。
ここらで勉強しなおさないとなぁ。
勉強って言っても、自分が楽をするためにやるんだけどね。
100の苦労を取り除くために99頑張る。

Reblog this post [with Zemanta]

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

さくらインターネットで MySQL のバージョンを 4 から 5 に移行: PHPの種 ブログ
↑なんて感じでさくらインターネットでのMySQLを5に変えたのですが、これでmysqldumpが(文字コード的に)安定したということで、前諦めた自動バックアップを設定しておこうと思いました。

mysqldumpしてメールで送るうんぬんは今までも色んなところでやられていると思いますが、今回困った点としては

  • uuencodeの添付ファイルだとgmailでうまく扱えない

です。


~ | uuencode attached.file | mail -s attached.file hoge@gmail.com

なんてお手軽にしたかったんですが、どうもダメみたい。

で、普通に添付メールとして送れるコマンドを探していたらmuttやらemailやらあるものの、どうにもさくらインターネットのレン鯖に素直に入れられそうになかったので、phpでさくっと作ってみました。とりあえずZend Frameworkで。

このぐらいはワンライナーで作れそうですが、敢えて?のZend Frameworkで。Pear_Mailとかもきっとあるに違いないけど全く調べて無いです。きっとある。

[php]
set_include_path(
get_include_path() .
PATH_SEPARATOR . '[PATH TO ZENDFRAMEWORK]'
);

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

$opts = new Zend_Console_Getopt('m:');
if (!$address = $opts->getOption(‘m’)) {
echo(‘How to : mailto.php -m [mailaddress]‘);exit;
}

$mail = new Zend_Mail();
$mail->setBodyText(‘This is the text of the mail.’);
$mail->setFrom(‘somebody@example.com’, ‘Some Sender’);
$mail->addTo($address, ‘Some Recipient’);
$mail->setSubject(‘MYSQL DUMP’);
$mail->createAttachment(file_get_contents(“php://stdin”));
$mail->send();
[/php]

何も考えずにモジュールを持ってくるだけで簡単に作れますね。

Zend_Mail部分はZend Frameworkマニュアルそのまんまなので、本文や差出人とか、自由に変更してくださいね。添付ファイルに名前をつけたい場合は、マニュアルを参考に。

このスクリプトに標準入力からdumpを流し込みます。
スクリプトはmailto.phpと名付けてホームディレクトリに保存しました。

/usr/local/bin/mysqldump --opt -c -h [MySQL SERVER] -u [USERNAME] --password=[PASSWORD] [DB NAME] | gzip | /usr/local/bin/php ~/mailto.php -m [MAILADDRESS]

無事dumpしたgzファイルが添付されましたでしょうか。

上のコマンドが無事成功したなら、さくらコンパネからcronで登録しておきましょう!

ちなみに私はgmail宛に送信して、すぐにゴミ箱に行くようにフィルタリングしています。これなら30日は保存されますし、gmailの容量も食わないですしね。

さくらインターネットで MySQL のバージョンを 4 から 5 に移行

さくらインターネットで MySQL のバージョンを 4 から 5 に移行 – 転校生@Hatena

もう、まんま↑で私もMySQL4からMySQL5に移行しました。元々のデータがUTF-8で、mysqldump4をした際に出力されたSQLのエンコードがかな~り怪しかったですが、特に問題なくインポートできましたヨ。(たぶん)
かなりドキドキしましたが(^-^;

Zend_Loader::registerAutoloadは廃止

PHPの種 ブログ » require_onceでなくautoloadなんて記事を書いてましたが、Zend Framework 1.8.3でZend_Loader::registerAutoloadを使っていたら、

Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /home/php-seed/lib/php/zendframework/1.8.3/Zend/Loader.php on line 207

なんて言われてしまいました。registerAutoloadは廃止されるので、Zend_Loader_Autoloader使って!とのことです。

というわけで、さくっと

[php]
require_once ‘Zend/Loader/Autoloader.php’;
$autoloader = Zend_Loader_Autoloader::getInstance();
[/php]

変えておきました。とりあえずinclude_pathへのautoloadだけなら問題なし。詳しい使い方はマニュアルで!

SimpleXMLElement オブジェクトは serializeできない

SimpleXMLElement オブジェクトは serializeできない – phaのPHPとか自習室 – はてな自習室

なーんか、Zend_Cache_Classがうまく動かないなーと思ってたら、原因は別のところに。

SimpleXMLElement オブジェクトは serializeできないらしい。

OMG!
なんでそんな仕様に・・?

Zend_Form_Element_Hash

Zend Framework: Documentation

Zend_Form_Element_Hashなんて便利なものがあったのね。
いわゆるCSRF対策に一意のハッシュを組み込んでおく、例のやつ。

この要素は CSRF 攻撃からフォームを保護するものです。 送信されたデータがもとのフォームのユーザセッションからのものである (悪意のあるスクリプトからのものではない) ことを保証できるようにします。 これを実現するために、フォームにハッシュ要素を追加して あとでそのハッシュを検証するようにしています。

ハッシュ要素の名前は一意なものでなければなりません。 この要素ではオプション salt を使うことを推奨します。 名前が同じでも salt が異なればハッシュは衝突しません。

$form->addElement(‘hash’, ‘no_csrf_foo’, array(‘salt’ => ‘unique’));

salt は、後から setSalt($salt) メソッドを使って設定することもできます。

内部的には、この要素は一意な ID を

Zend_Session_Namespace を用いて保存しており、 送信されたときにその内容 (TTL が期限切れになっていないかどうか) をチェックしています そして、’Identical’ バリデータを使用して、 送信されたハッシュと保存されているハッシュを比較します。

‘formHidden’ ビューヘルパーを使用して要素をフォームにレンダリングします。

Identicalバリデータでチェックしてるはずなんだけど、エラーメッセージが

Value is empty, but a non-empty value is required

とか出ちゃうのは何故だろうか。何か間違えてるかな。。

FileMaker×PHPで作る、簡単・便利なWebアプリ

IMG_0020Image by Malabooboo via Flickr

【コラム】FileMaker×PHPで作る、簡単・便利なWebアプリ (1) まずは2大ライブラリを比較 | エンタープライズ | マイコミジャーナル

目のつけどころが良いですね:-)
fileMakerは結構使っているところが多いですからね。

Reblog this post [with Zemanta]