ホーム > アーカイブ > 2009-02

2009-02

symfonyでsqlを節約

doSelectJoinXXX()

っていう関数を使うと 2 つのテーブルを join した結果を SQL 1 本で取得できる。
この関数は schema.yml で外部参照を設定すると自動で生成される。

第18章 – パフォーマンス
続きを読む

symfonyでセッションを利用するときにやっといたほうがいいこと

ひとつは、セッション名の変更。

# apps/frontend/config/factories.yml
all:
  storage:
    class: sfSessionStorage
    param:
      session_name: my_cookie_name

もう一つは有効期限の設定。

# apps/frontend/config/settings.yml
all:
  user:
    class:       myUser
    param:
      timeout:   1800           # 秒単位のセッションの寿命

第6章 - コントローラレイヤーの内側

php のセキュリティをざっと理解するには↓↓

入門PHPセキュリティ
入門PHPセキュリティ
posted with amazlet at 09.02.24
クリス シフレット
オライリージャパン
売り上げランキング: 40453
おすすめ度の平均: 4.0

4 薄くて充実

symfony1.1でフロントと管理ツールの公開ディレクトリを切り替える方法

symfony の web ディレクトリはフロントとバックヤードで共通になってしまう。気持ち悪いので、切り替える方法を考えてみた。

まず以下のように backend ディレクトリを作成する。中身は web ディレクトリをそのままコピーする。


apps/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/
backend/  ← バックヤード用の公開ディレクトリを作成

次に、以下のように config/ProjectConfiguration.class.php の setup メソッドで公開ディレクトリを変更する。

# config/ProjectConfiguration.class.php
    [php]
    class ProjectConfiguration extends sfProjectConfiguration
    {
       public function setup()
       {
         $this->setWebDir($this->getRootDir().'/backend');
       }
    }

あとはドキュメントルートを backend に設定すれば、フロントとバックで別ディレクトリを利用できるはず。でも結局ドキュメントルートを切り替える必要がある。。

symfony×PHP [LLフレームワークBooks] (LLフレームワークBOOKS # 3)
森川 穣 亀本 大地 田中 正裕
技術評論社
売り上げランキング: 62157
おすすめ度の平均: 3.0

1 情報弱者向けの本
5 エッセンスがよくまとまっている

symfony1.1+oracle用のパッチファイル

symfony1.1 + oracle で propel:build-all を実行すると、propel:insert-sql でエラーが発生する。原因は、生成された SQL 内(data/sql/lib.model.schema.sql)のコメントがオラクルのコメントになっていないことと、テーブル名とカラム名がダブルコーテーションで囲まれていることです。

毎回 sql を修正しているわけにもいかないのでパッチを作って対応しました。
これで propel:build-all-load frontend みたいなコマンドもするっと実行できます。

symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
前田 雅央
ソフトバンククリエイティブ
売り上げランキング: 166284
おすすめ度の平均: 2.0

4 2冊目に買うべき本
1 この本は酷い
1 誤植が・・・

環境変数の NLS_LANG の使い方

環境変数の NLS_LANG って今までよくわかってなかった。

今日はまってやっと理解したのが、NLS_LANG はオラクルクライアント側の文字コードを指定するものだということ。オラクルはデータベースの文字コードと NLS_LANG を比較して異なる場合は、データベースにデータを格納する際にデータベースの文字コードに変換して格納するという機能がある。今回 NLS_LANG を間違ってデータベース側の文字コードを設定していたので、文字コード変換がされず不具合になっていた。

PHPfestチュートリアル:Oracle Database 10g Express EditionおよびZend Core for Oracle

Oracleデータベースは指定された文字セットで作成されます。 PHPでは、NLS_LANG環境変数を設定することで独自の文字セットを選択できます。 Oracleクライアント(PHP)のグローバリゼーション設定では、ロケールのための適切なデータ形式、Oracleのエラー・メッセージに使用される言語、言語のソートの順番などのデフォルト値を指定できます。 NLS_LANGは、Webサーバーを起動する環境で設定する必要があります。

dreamhost に redmine をインストール

dreamhost に redmine をインストールした。参考にしたのは Redmine - DreamHost

ほんとにこの通りにやったら動いた。ただ英語がちゃんと読めてなくてけっこうはまったのでつまづいた箇所をメモしておく。

  • 0. 基本は下の英語をよく読んで作業を進める
  • 1.2. 「Specify your web directory:」というドキュメントルートの設定項目が dreamhost のドメイン設定画面にあるので、そのドキュメントルートを「yoursubdomain.yourdomain.com」から「yoursubdomain.yourdomain.com/public」に変更する。
  • 12. .htaccess をこの 6 行で置き換えます。
  • 99. config/environment.rb の line:8「RAILS_GEM_VERSION」を 2.2.2 に変更します。これをしないとバージョンが一致しないエラーが発生しました。
1. From the Dreamhost control panel, create a new subdomain for the application such as yoursubdomain.yourdomain.com
        1. Make sure the domain supports “Ruby on Rails Passenger (mod_rails)?”
        2. Specify your web directory: /home/username/yoursubdomain.yourdomain.com/public
               * you must add the public!!!
  2. From the Dreamhost control panel create a new MySQL database named yourdatabasename
  3. ssh into your Dreamhost account
  4. cd ~/yoursubdomain.yourdomain.com
  5. svn export --force svn://rubyforge.org/var/svn/redmine/branches/0.7-stable ./
         * check http://www.redmine.org/wiki/redmine/Download for the latest version
  6. also watch out for permissions
         * chmod -v -R 755 ./*
  7. cd ~/yoursubdomain.yourdomain.com/config
  8. cp database.yml.example database.yml
  9. nano database.yml
        1. edit the database.yml config file with the appropriate info. Should be similar to the following
           production:
           adapter: mysql
           database: yourdatabasename
           username: yourusername
           password: yourpassword
           host: mysql.yourdomain.com
 10. cd ~/yoursubdomain.yourdomain.com/public
 11. cp dispatch.rb.example dispatch.rb
 12. nano .htaccess (replace with following text)
     Options +FollowSymLinks +ExecCGI
     RewriteEngine On
     RewriteRule ^$ index.html [QSA]
     RewriteRule ^([^.]+)$ $1.html [QSA]
     RewriteCond %{REQUEST_FILENAME} !-f
     ErrorDocument 500 "H2Application errorH2 Rails application failed to start properly"
         * replace the H2 with the proper HTML tag when you place it in the .htaccess
 13. cd ~/yoursubdomain.yourdomain.com
 14. from application root type
         * rake db:migrate RAILS_ENV="production"
 15. also type the following to load config defaults
         * rake redmine:load_default_data RAILS_ENV="production"
         * choose "en" for english
 16. browse to http://yoursubdomain.yourdomain.com

文字化けが発生しないか調べる時に入力する文字達

symfony × MySQL × Shift_JIS: 0×5c関連
symfonyで作成したテスト用アプリケーションで「ソ」一文字を登録。

PHPで名前を扱う場合、文字コード指定に注意が必要 - Affirmative Way
たつさき - Google 検索
髙(はしごたか), 﨑(たつさき)

symfonyでモバイル開発する際に参考になるだろうリンク

モバイル開発@symfony :: handsOut.jp がかなり良い感じ。以下コードを引用してみる。

apps/app_name/config/filters.yml

rendering: ~
web_debug: ~
security: ~
# generally, you will want to insert your own filters here
mobile:
  class: myMobileFilter
cache: ~
common: ~
flash: ~
execution:  

apps/app_name/config/autoload.yml

autoload:
  PEAR:
    name: PEAR
    files:
      Net_UserAgent_Mobile: /path/to/Net/UserAgent/Mobile.php

myMobileFilter.class.php (抜粋)

public function execute($filterChain) {
  // preFilter
  $request = $this­->getContext()­->getRequest();
  $response = $this­->getContext()­->getResponse();
  if ($this­->isFirstCall()) {
    $agent = @Net_UserAgent_Mobile::singleton();
    switch (true) {
      case $agent­->isDoCoMo():
        $carrier = 'docomo';
        $response­->setContentType('application/xhtml+xml; charset=Shift_JIS'); // 出力ヘッダを指定
        $response->addStylesheet('/path/to/docomo.css')// キャリア別のスタイルシートを指定
        break;
      case $agent­->isEzweb():
        $carrier = 'ezweb';
        $response->addStylesheet('/path/to/ezweb.css')// キャリア別のスタイルシートを指定
        // 中略
    }
    $request­->setAttribute('agent', $agent);
    $request­->setAttribute('carrier', $carrier);
    // sfPictogramMobilePlugin
    $pictogram = sfPictogramMobile::factory($carrier, 'utf­8');
    $request­->setAttribute('pictogram', $pictogram);
  }
 
  $filterChain-­>execute();
 
  // postFilter
  $content = $response­->getContent();
  $content = $request­->getAttribute('pictogram')­->replace($content);
  // 出力前に CSS をインライン展開
  if ($request­->getAttribute('carrier') == 'docomo') {
    $content = HTML_CSS_Mobile::getInstance()­->setBaseDir('/path/to/doc_root')­->apply($content);
  }
  $response­->setContent($content);
}

apps/app_name/templates/layout.php (抜粋)

<? include_partial('global/dtd'); ?>
<html xmlns="http://www.w3.org/1999 /xhtml" xml:lang="ja" lang="ja">
<head>

apps/app_name/templates/_dtd.php

<?php switch (sfContext::getInstance()­>getRequest()­>getAttribute('carrier')): ?>
<?php case 'docomo': ?><?php echo '<'; ?>?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "­//i­mode group (ja)//DTD XHTML i­XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i­xhtml_4ja_10.dtd">
<?php break; ?>
<?php case 'ezweb': ?>
<?php echo '<'; ?>?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "­//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml­basic.dtd">
// 以下略

他にも helper を使って、mailto や input 要素の問題などを吸収する方法や、モバイルのセッションを、SessionStorage を使って解決する方法が書いてある。

以下のファイルを作成、編集
apps/app_name/lib/helper/MobileHelper.php
apps/app_name/lib/myMobileFrontController.class.php
apps/app_name/lib/myMobileSessionStorage.class.php
apps/app_name/config/factories.yml

memokami::楽天テクノロジーカンファレンス「PHPで作る携帯サイト」 :: handsOut.jp もすごくいい感じ。

おちゃべり

おちゃべりが見たい!!星野真里はなんか良い感じです。

星野真里 オフィシャルブログ 「ことばあそび」 powered by アメーバブログ

さよならみどりちゃん [DVD]
ハピネット・ピクチャーズ (2006-02-24)
売り上げランキング: 1645
おすすめ度の平均: 4.0

4 星野真里がよい
4 さよならみどりちゃん
4 ヒリヒリする、恋のお話
4 漫画を読んでいた人にはおすすめ
4 14番目の月

所感

自分の書きたいコードを書け - 脱職業プログラマのすすめ - ひがやすを blog

自分の書きたいコードを書くというのは、人からやらされてるんじゃなくて、自ら動くということなのでそれなりに成長すると思う。自分のやりたいことをどれだけ実現していけるかっていうのは大事だなぁと思っています。

ホーム > アーカイブ > 2009-02

ぴくちゃー
ブログパーツ
あわせて読みたいブログパーツ
なかの人
携帯アクセス解析
Yahoo Widget

ページの上部に戻る