page_adsence

2010年9月14日火曜日

doctrineで生成するschema.ymlに関して

symfonyのタスクでデータベース上に保存されているデータをfixture形式でダンプを取ってくれるタスクがあり、
それを実行してみた。

symfony doctrine:data-dump

すると、
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'v.id' ~
v.idってカラムがないらしい。
そもそもidなんてカラム作ってないのになんでこんなことになってるんだと思って調べてみたら、
エラーが出たのはViewの部分の記述だった。
そこで、schema.ymlを見てみた。
中を見てみると

VHoge:
  connection: doctrine
  tableName: v_hoge
  columns:
    id:
      type: integer(8)
      autoincrement: true
      primary: true
    fuga_id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      default: '0'
      notnull: true
      autoincrement: false
idってカラムがありました・・・。
なんでこんなカラムが追加されてるんだと思いながらも、削除してみた。
モデルも再生成して、もっかい実行。
同じエラーが・・・。
カラムは削除したはずなのになーと思いながらも、primaryがtrueになっているカラムがないといけないのではないかと思い、fuga_idのprimaryをtrueにして、モデルを再生成して実行してみたら成功しました。

どうやらschema.ymlには必ずprimaryがtrueになっているカラムが1つないとエラーになるみたいです。
あとでソースを追って、ちゃんとした原因を突き止めよう。

2010年9月9日木曜日

iphone4のケースが来た。

思ったよりだいぶ早かった。
到着予定日が10月1日だったのに、今日届いた。
iphone4の時もこのくらい早ければよかったのに…。

ケース自体はまぁまぁいい感じかも。
背面はプラスティックで、側面がシリコンになってる。
結構しっかり作りで以外だった。
今回頼んだケースは黒なんで、気分によって付け替えるとしよう。
とりあえずしばらくはこのケースを使ってみようと思います。

2010年9月8日水曜日

mb_strlenがUndefined function

フォームで入力された文字数チェックしようと思ってmb_strlenを使ったら、Undefined functionって出てきた。
あれっと思ってphpinfo見てみたら…。

ない!!

php-mbstringがインストールされてませんでした…。
最初の段階でちゃんとチェックしておかないと、後々面倒ですね。
yumからサクっとインストールして解決しました。

2010年9月5日日曜日

php.iniのX-Powered-Byについて

HTTPヘッダに付加されているX-Powered-By。
これにPHPのバージョンが表示されている。
セキュリティ面を考えると、サービスイン後のこういった表示は控えるべきだと思われる。
ってことで、その表示を出さないようにする方法は以下のとおり。

php.iniを以下のように書き換えてやればよい。

expose_php = On → Off

で、書き換え後に保存して、Webサーバーを再起動させる。
以上で完了。

2010年9月3日金曜日

symfonyのセキュリティの設定に関して

最近ちょくちょくsymfonyを触るようになってきたので、一度セキュリティに関して調べてみた。
今回気になったのは下記の記事。

http://blog.symfony.jp/2009/03/05/178

この記事ではsf_charsetがUTF-8で、なおかつescaping_methodをESC_ENTITIESにすると問題があるというものです。
古いバージョンのsymfonyではデフォルトがESC_ENTITIESになっていましたが、
1.2以降のsymfonyではデフォルト値がESC_SPECIALCHARSに書き換えられているようですので、
自分で意図的に変更しない限りはトラブルに見舞われることはないと思われますが、一応念のため記事にしておくことにしました。

symfonyでは標準でHTML出力のエスケープ処理が組み込まれており、テンプレートにスカラ、配列、オブジェクトのメソッド呼び出しの結果など、あらゆる値がエスケープされるようになっています。
そのエスケープメソッドがhtmlentitiesであると問題が発生するよということ。
このhtmlentitiesですが、マルチバイトでなければ何の問題もありませんが、
マルチバイトでUTF-8の文字コードの場合に未定義の文字参照が生成されてしまうおそれがあります。
こちらのブログでは「∵」(U+2235)がその該当の文字だということで、取り上げられています。

symfony1.4ではescaping_strategyはデフォルトtrue、escaping_methodもESC_SPECIALCHARSとなっているので、
特に心配する必要はありません。
とはいえ、古いsymfonyを使っている案件の更新とか、途中からアサインされた場合に設定がESC_ENTITIESになっている可能性が0ではないので、一応覚えておこうと思う。

・リファレンス
http://www.symfony-project.org/reference/1_4/ja/04-Settings#chapter_04_sub_escaping_strategy

2010年8月27日金曜日

symfonyのフロントコントローラーとrouting.ymlにはまった

symfonyでフロントエンドと管理画面のアプリを作成しようと思った時にrouting.ymlに記述した変数が取得できなくて、
なんで取得できないのかさっぱりわからなくて、いろいろ検証してみた。



最初の状態はこんな感じ

web/index.php ← フロントエンド用のフロントコントローラー
web/manager.php ← 管理画面用のフロントコントローラー


まず、新しくプロジェクト作成してまっさらな状態できちんと取れるか試してみた。

routing.ymlはこんな感じ

testIndex:
url: /test
param: { module: test, action: index }

test:
url: /test/:value
param: { module: test, action: index }


この場合は特に問題なく取得することができた。



次にルーティングのURLの階層を増やしてみたが、これも問題なかった。



testIndex:
url: /dummyA/dummyB/test
param: { module: test, action: index }

test:
url: /dummyA/dummyB/test/:value
param: { module: test, action: index }


管理画面用のフロントコントローラーの場所を一階層下に変えてみた。



web/manager/index.php


それに伴い.htaccessを書き加えた。



RewriteRule ^manager(.*)$ manager/index.php [QSA,L]


こうするとvalueが取れなくなった。

mod_rewriteのせいなのかもしれない。

が、これをどう書き直せばrouting.ymlがちゃんと取ってくれるのかがわからない…。

そこで、フロントコントローラーのファイル名と場所を元に戻し、.htaccessを以下のように修正してみた。



RewriteRule ^manager(.*)$ manager.php [QSA,L]


こうすると取得できるようになった。

とりあえずこれでよしとする。

2010年8月25日水曜日

symfonyのWebデバックツールに関して

symfonyでプロジェクトとアプリケーションを1つ作成すると、webディレクトリ以下にindex.phpなどのファイルができ、symfonyのデフォルトページを表示させることができるようになるが、この画面で使用されている画像や、webデバックツール(デバックモードで画面右上に表示されるツールバー)に使用されている画像などは初期状態ではパスが違っているため、読み込みできない。
違っている理由としてはスケルトンが用意されており、そこからパスを変更せずにコピーしてくるためである。
それを回避するために、シンボリックリンクを張っていたんですが、バーチャルホストのAliasに書くほうがすっきりしてていい気がしてきたので、これからはその方法でやっていきたいと思う。

2010年8月24日火曜日

iphone4のケースプログラムの注文成立のメールが来た。

お届け予定日は10月1日。
ケース1個届けるのにこんなに時間がかかるのか…。
まぁ、気長に待ってみます。

2010年8月23日月曜日

True Image Homeってかなり使えるかも

最近PCの調子があまりよくなくて、起動するまでにやたら時間がかかるようになってしまった。
1ヶ月前位に再インストールしたばかりなのに・・・。
再インストールはとても面倒な作業で、時間もかかる。
しかもその間は作業が一切できなくなってしまうというデメリットが大変多い。
とはいえ、毎回毎回アプリの起動に時間がかかったり、いきなりシャットダウンされたりとかってのはきつい。
なので仕方なく再インストールするんですが、その時間を極力すくなくできるツールを教えてもらいました。
それがTrue Image Homeです。
このソフトは現在の状況をそのままイメージにしてバックアップをとっておくことができるってソフトです。
で、このバックアップをリストアすれば、バックアップ取った状況が再現できる。
なので、OSを再インストールして、windows updateをして、必須アプリを一通りインストールした状態でバックアップをとっておけば、いつでもその状態に戻すことが可能になります。

2010年8月22日日曜日

再インストール時にやんなきゃいけないこと

1.iTunesのバックアップ
C:\Documents and Settings\ユーザー名\My Documents\My Musicの中のiTunesフォルダをバックアップ

2.Chromeのバックアップ
C:\Documents and Settings\ユーザー名\Local Settings\Application Data\Google\Chromeの中のUser Dataフォルダをバックアップ

3.Adobe製品ライセンス認証を解除する。
Adobe製品のいずれかを立ち上げて、ヘルプ→ライセンス認証の解除をクリック

4.VMWareのVirtual Machinesをバックアップ
C:\のVirtual Machinesをバックアップ

5.その他、必要なファイルをバックアップ

とりあえずこの程度。