Posted on

PHPExcelをCakePHPで使ってみる(テンプレートの読み込み)

 弊社で帳票をPDFで出力する際には、大抵書式となるテンプレートファイルを先に読み込んで、必要な箇所にデータを出力して最終的に出来上がりのPDFファイルを生成という手順を踏みます。
 ですので、Excelファイルを作る際にもテンプレートの読み込みが必要だろうということで、これもサンプルを作りましたのでここに載せておきます。

 データを出力する部分とファイルに書き出す部分は同じですので、テンプレートファイルを読み込む部分を解説します。
 Excel2007形式とExcel95形式、両方まとめて載せておきます。

 まず、Excel95形式のテンプレート読み込みです。

$filename = "fruits.xls";
$uploadDir = realpath( TMP );
$uploadDir .= DS . 'excels' . DS;
$load_path = $uploadDir . $filename;
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load( $load_path );

 次は、Excel2007形式のテンプレート読み込みです。

$filename = "fruits.xlsx";
$uploadDir = realpath( TMP );
$uploadDir .= DS . 'excels' . DS;
$load_path = $uploadDir . $filename;
$objPHPExcel = PHPExcel_IOFactory::load( $load_path );

 $load_path にはテンプレートファイルのフルパスを与えてください。

 ここで帰ってきた $objPHPExcel で、データ書き込みやファイル生成を行ってください。

Posted on

PHPExcelをCakePHPで使ってみる(Excel2007形式)

 PHPExcelをCakePHPで使ってみるの記事ではExcel95形式(拡張子が.xls)のExcelファイルの出力について書きましたが、Excel2007形式(拡張子が.xlsx)の場合はどうなるのかが今回のお話です。

 Excel2007形式のファイルを出力する為のポイントはふたつです。
 ひとつ目は、出力ファイル名の拡張子を必ず「.xlsx」にしておくことです。
 ふたつ目は、出力する部分のコードを少し変えることです。
 具体的には、次のコードになります。

$objWriter = PHPExcel_IOFactory::createWriter( $objPHPExcel, 'Excel2007' );

Posted on

PHPExcelをCakePHPで使ってみる

 システムを作っていると、お客様からよく「このデータをExcelで使いたい」ということをお聞きします。
 大抵の場合CSV形式のファイルを出力して、それをExcelで読み込んで好きに加工して戴くのですが、やはりExcelの形式ではないので使い辛いと言われることがあります。
 そこで、Excelファイルを出力するようにしようということになり、PHPExcelというライブラリをCakePHPに組み込んで使うことにしました。

続きを読む PHPExcelをCakePHPで使ってみる

Posted on

CakePHPのsessionがcore.phpの設定より早く消える!

CakePHPのsessionってsessionデータに作成時間を保存しておき、読み出す時にcore.phpで設定した時間が経過していないかチェックしているんですね。
サーバー設定の方はさわりに行ってないみたいです。
core.phpの

Configure::write('Session.timeout', '120');
Configure::write('Security.level', 'medium');

で3時間以上あってもサーバーの

  • session.cookie_lifetime
  • session.gc_maxlifetime

の方が短ければガーベジコレクションでsessionファイルが消えるので予想より早くログアウトしたりします。
なので
bootstrap.phpに

ini_set("session.cookie_lifetime", 100 * Configure::read('Session.timeout'));
ini_set("session.gc_maxlifetime", 100 * Configure::read('Session.timeout'));

coreの値使ってサーバー設定をcore触るだけで設定できるようにしました。
(100掛けてるのはmediumの係数の100です。session.php見ましたが定数にはなっていない感じでした。)
バージョンは1.2.6です。

Posted on

CakePHPのtextareaの最初の改行コードがなくなる!

————–
\n
\n
テキストエリア内容
————–
のデータがあった場合

$form->input('Model.field', array('type' => 'textarea'));

で表示した場合、最初の改行コードがない状態でフォームに表示されます。
(下記のように2つある改行が1つになっています)

続きを読む CakePHPのtextareaの最初の改行コードがなくなる!

Posted on

CakePHPのqueryのキャッシュでハマる

モデルのquery関数を使ってループをまわしながら最大noをとってくる処理でハマりました・・・
query関数って$sql同じだった場合勝手にキャッシュを使って前回と同じ値を返すんですね。
通常はこれを回避する為に

$this->query($sql, false);

とすることで毎回最新データを取ってきてくれます。
デフォルトでキャッシュが邪魔だったので、app_model.phpで

function query() {
$params = func_get_args();
if (empty($params[1])) {
$params[1] = false;
} else {
if (is_array($params[1]) && empty($params[2])) {
$params[2] = false;
}
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return call_user_func_array(array(&$db, 'query'), $params);
}

query関数をオーバーライドしました。
バージョンは1.2.6です。

Posted on

CakePHPで携帯サイトを作成する

前回携帯サイトを作った方法だと、CakePHPのバージョンアップによって動かなくなってしまっていたので、新しい方法で作った覚書を残していきます。
今回は「CakePHP1.2ガイドブック」の携帯サイトを作成するを参考に作っていっています。
この方法だとcakeのバージョンによって動かなくなることは無いと思いますが、一応バージョンは1.2.3.8166で試してみました。
内容はほぼそのままなのですが、自分が分かりやすいようにコメントを付け加えていってます。

続きを読む CakePHPで携帯サイトを作成する

Posted on

php5.3の環境にCakePHPアップしたらDeprecatedエラーが・・・

php5.3の環境にCakePHPアップしたらDeprecatedエラーが出まくりだったのでメモ

開発環境から本番環境にソースをアップしてブラウザでアクセスしたら

「Deprecated: Assigning the return value of new by reference is deprecated in…」
のメッセージが大量に出た、どうもphp5.3からエラーの定義が変わったのが原因みたい。

どうも5.3からerror_reporting()に定義がかわり、E_ALL値が変更されたらしい。

PHP: 定義済み定数

cake/libs/configure.phpの297行目くらいに下記のコードを追加してエラーの出力を調整

if (isset($config['debug'])) {
if ($_this->debug) {
error_reporting(E_ALL);
//php 5.3のエラー出力調整(ここから追加)
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_DEPRECATED);
}
//php 5.3のエラー出力調整(ここまで追加)
Posted on

CakePHPでSSL認証とそうでない時の処理を振り分ける

ログインするときにSSL通信でログインするか普通の通信でログインするかを選べるようにして欲しいというお客さんの要望があったので今回はこんな感じのプログラムで対応しました。

やっている内容はログイン時にSSL通信でログインした時、Cake内の移動の際にSSL通信の場合はhttpsで移動するようにするという感じです。

続きを読む CakePHPでSSL認証とそうでない時の処理を振り分ける

Posted on

第2回CakePHP関西勉強会でLTしてきました

6月5日に第2回CakePHP関西勉強会に参加してきました。
今回の発表はかなりのグズグズになってしまいました。
まず体調が悪く血圧がかなり下がってしまっていて、発表中は景色が白く見えるぐらいもうろうとして何を話しているのかという感じになってしまいました・・・
次に発表のリハーサルの時は目の前のノートパソコンで動かしていたのですが、本番ではプロジェクタを見て操作をすることになり画面が見にくく操作が思うように出来ず、操作にだいぶ時間を取られてしまいました。
とりあえず発表内容のパワーポイントです。

とりあえず座標合わせライブラリの評判が良かったので、頑張ってソースを整理して公開できたらいいなと考えています。
発表してみて色々指摘を受けれたので、それを受けて今後作っていけたらと思います。