2013年7月23日

CakePHPでDBサーバーが止まっていた(環境問題で動作できない)時のエラー

 CakePHPで作っているシステムの最終的なテストをしていた時に、MySQLのサービスを止めてからリクエストしてみたら、エラーの内容がブラウザに表示されてしまいまいた。
 当然、core.phpの'debug'は、「0」にしています。
 
 エラー時のStatck Traceと一緒にMysql.php内のDBへの接続情報(DB名、パスワードホスト名)つまり、database.phpの重要情報が表示されてしまいます。

 いろいろ調べて見た結果、core.phpの「Configure::write('Error', …」のlevelキーのE_ALLにチルダを付けてやることでtraceは出ないということがわかりました。

「この設定をしてもちゃんとerror.logには書かれるし、debug=2にした場合、ブラウザにも表示されるようなのでとりあえずは良しとします。」
(でもドキュメントを見ると、debug=0にしたときは、internal error になると書いてあるんだけど。てことは、errorのviewが表示されると思うんだけど…。違うのか?)


これは、levelキーに設定したエラーレベルの時にトレースに出力するという意味になるんでしょうか?

誰かお分かりの人がいましたら、アドバイスをお願いします。


変更前
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));

変更後
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => ~E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));


2013年7月21日

CakePHPでファイルダウンロードの仕方のメモ



下のコードでCSVファイルのダウンロードができる

環境
CakePHPのバージョンは、2.3.6。
Web(AP)サーバー:IIS7.5


  1. $download_data = ここにCSVファイルのイメージを設定しておく。

  2. $this->viewClass = "Media";
  3. $this->autoRender = false;


  4. $filename = sprintf("CSVファイル_%s.csv", date("Ymd_His"));
  5. header("Pragma: public");
  6. header("Expires: 0");
  7. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  8. header("Content-Type: application/force-download");
  9. header("Content-Type: application/octet-stream");
  10. header("Content-Type: application/download");
  11. header("Content-Disposition: attachment;filename=" . "\"".urlencode($filename)."\"" );
  12. header("Content-Transfer-Encoding: binary");

  13. $download_data = mb_convert_encoding($download_data, "SJIS-win", "UTF-8");
  14. echo $download_data;


3~4行目:おまじない。ページは返さないので。
7行目:ファイル名を決めています。
8~15行目:ダウンロードする為のヘッダ情報
14行目:ブラウザがIE(HTTP_USER_AGENT)の場合、ファイル名に日本語が含まれていると指定したファイル名にならないので、urlencodeする。
17行目:EXCELで開きたいCSVファイルなので、Shift-JISに変換する※1。
18行目:ブラウザに送る。

※1 別に、EXCELで外部データの取り込みでCSVファイルを読むんだったら、Shift-JISに変換する必要は無いんだが、普通の人は、ファイルをダブルクリックして開くので。そもそも一般人の中には、CSVファイルのことをエクセルファイルという人もいるし…。

2013年7月18日

インストールされているアプリのバージョン

 マーケットにリリースしているアプリのインストールされているバージョンが、一つ前ならまだしも、それ以前のバージョンの比率が多いと、やっぱり使われてないんだなーと実感する。

まぁ、ずっと放置していたのもそうだけど、もっと良い機能やつがたくさんあるし仕方ないが…。

VirtualBoxのvdiファイルをコピーして使う時の注意

 VirtualBoxのvdiファイルは、コピーして新しい仮想マシンにそのまま使うことができないので以下の手順で使えるようにする。
 これシないと、UUIDが同じだから使えない旨のエラーメッセージがでるので。


コマンド
C:\Program Files\Oracle\VirtualBox>VBoxManage internalcommands sethduuid vdiファイルのフルパス
UUID changed to:新しいUUID


これでテスト環境を何回でも作りなおすことができるぜっ!

終わらないWIndows Updateって。

 ここ、一週間くらい、Windows7のシャットダウンの時にWindows Updateが行われてるんですが、一向に終わる気配がありません。

 機能は、19:00くらいにシャットダウンして、朝の8:00くらいまでそのままにしていたんですが、3個中の2個目でずーっと止まってるみたい…。
 結局、電源断で終わらせてしまいました。いつか壊れるよこれ。

 .NET Framewrok 4.0のセキュリティパッチとか、Silverlightのセキュリティパッチらしいんです。

今日は、C:\Windows\SoftwareDistribution\Downloadを消してみたらどう?みたいな話を聞いたので試しに消してやってみます。

 また、8:00まで動いてたらどうしよう…。


「…」ばっかりだ。

2013/9/12
 WindowsUpdateが終わることがなかったWindows7を久しぶりに起動し、終了時に、アップデートの個数が、15個になっていました。
 あぁ、もう無理だと思って、一応終了まで待っていたら、15個全てのアップデートが完了してしまいました。
 
 新しいアップデートが発生すると正しくアップデートが行われるのでしょうか?
たまたま、システムファイルの整合性がとれたりしたのでしょうか?

 うーん、不思議だ。

2013年7月17日

IISで新しいサイトをつくったらポートを開けなさい。

 久しぶりに、IIS(7.5)でテスト用のサイトを作ったら、全然接続できない…。と思ったら。

いやーなに、ポート8000で作ったんだけど、ファイアーウォールに「ポート8000は、通してね」っていう設定を入れるのを忘れてた。

 古いWindows(IIS)のときは、こんな設定しなくてよかったんで、スルスル動いてたから良かったんだけど。

 Webサーバ立ち上げたりする人(テスト環境でも)は、動けばOKとかじゃなくて本来は、何をシないとダメかをちゃんと覚えて行かないとダメだね。

 さて、続きをするか。


2013年7月16日

 Equipmentの複数形は、Equipmentです

 英語しらないって怖い。

 CakePHPでプログラム書いてるんだけど、「設備」というつもりで作ったテーブルのテーブル名を「Equipments」ってしてたら、このモデルにアクセスすると、「Table equipment for model Equipment was not found in datasource default.」ってエラーが出るので悩んでたら、「Equipment」の複数形って、「Equipment」なんですね。

 モデルのnameに"Equipments"って設定したら動いたけど、ここは、テーブル名を「Equipment」に直すことにします。


 Equipmentの複数形は、Equipmentです!