サブノート

技術的なトピックが中心の備忘録

php

[PHP]配列取得後のインデックス指定でエラー

php

PHP 5.1.6 の場合、配列取得後に続けてインデックス指定をするとエラーになる。 Parse error: syntax error, unexpected '[', expecting ',' or ';' in /var/www/html/〜〜〜 この場合、一度変数に格納してからアクセスする必要がある。

[PHP][CakePHP]発行したSQLを確認する

実際に発行された生のSQL文を見たい場合。SQL実行後に getDataSource()->getLog()); //以外 debug($this->[Model名]->getDataSource()->getLog()); ?> を埋める。 SQL文のみ表示。 ' . $this->getDataSource()->getLog()['log'][2]['query']); ?>

[PHP][CakePHP]テーブルのカラム変更が反映されない

テーブルのカラムを追加したが、Insertできない事態が発生した。 原因は app/tmp/cache/models 内の cake_models_xxx_yyy が残っていたため。 ファイルを削除すればキャッシュが消えて、変更が無事反映された

[PHP]メモリ不足の回避

php

メモリ不足時に発生する PHP Fatal error: Allowed memory size of 〜〜〜 bytes exhausted (〜〜〜〜のエラー。php.ini に memory_limit = 512MBとしてapacheを再起動するか、 変更権限ない場合は該当箇所を暫定的に とすることで回避する。

[PHP]ファイルオープン時はエラーチェックを行う

php

ファイル読み書きの際は fopen() を使う。 「ファイルがない」「権限がない」等のエラー時に FALSE を返すので、チェックをしていないとその後の処理で Warning: fgetcsv() expects parameter 1 to be resource, boolean given in [ファイルパス] on line […

[PHP]JSON形式で返却する

php

json形式返却時のutil関数。

[PHP][CakePHP]アップロードされたファイルの改行コードを置換する

Windowsで作成されたファイルは改行コードがCR+LFなので、UNIX(LF)やMac(CR)だとうまく表示されない。 アップロードされたファイルの扱いをサーバのOSに依らず等しくするためにも、改行コードを揃えておく。

[PHP][CakePHP]DB接続先の切り替えを bootstrap.php で行う

DB接続先の切り替えをbootstrap.phpで行うよう編集する。./app/config/database.php の設定。 'mysql', : : ); var $product = array( 'driver' => 'mysql', : : ); /** DBの切り替え **/ public function __construct() { //cf. bootstrap.php $connec…

[PHP][CakePHP]レンダリング後(CTPファイルに変数埋め込み後)の内容をファイルとして保存する

CakePHPにおいて、views/layouts/top.ctp にレンダリングして画面表示する場合は autoLayout = true; $this->layout = 'top'; } ?> とする。一方、レンダリング後の内容をファイルに保存する(または、処理を加える)場合は autoLayout = false; // views/la…

[PHP]HTMLファイルのタブ・改行・コメントを削除する

php

HTMLファイルを読み込み、タブ・改行・コメントを削除することで容量を減らす。 CakePHP等でレンダリングした内容を加工する際にも使える。 /s', '', $html); ?>

[PHP]リクエストパラメータの取得

php

パラメータの取得方法。POSTリクエストの場合。 existsEmpty(array($text1, $text2))) { throw new Exception('Error: Missing Parameter'); } //処理 } c…

[PHP][CakePHP]実処理をコンポーネントに任せる

controllerは短いほうが良い。 リクエストからレスポンスまでの処理の流れが一覧できる程度の長さが理想。よって実処理はcomponentに任せる。 JavaのServiceのイメージ。任せることによって コントローラの肥大化を回避 できるだけでなく、 処理の共通化(複…

[PHP]複数の値を一気に代入

php

複数の値を1行で配列に格納する。 list($map['id'], $map['name'], $map['gender']) = array($id, $name, $gender);print_r($map); // =>Array ( [gender] => male [name] => myname [id] => 1 ) 別関数で複数値を取得する時に使える。 list($map['id'], $ma…

[PHP]for文色々

php

忘れがちなfor文。 インデックスを指定して値を取得する for($ii = 0; $ii < count($array); $ii++) { $value = $array[$ii]; //処理} 直接値を取得する foreach($array as $value) { //処理} 連想配列からキーと値を取得する foreach($map as $key => $valu…