あまり使わない関数
array_filter()
空の要素が混じっているのを取り除く
$arr = array(1,2,,3,,4,5,,,,6);
$result = array_filter(arr,”array_null_del"));
//配列中の空を削除
//trueを返せばその値だけ$resultに入る
function _array_null_del($v){
if($v == null || $v == ""){
return false;
}
return true;
}
$resultの中はarray(1,2,3,4,5,6)となる
何のときに使用したのかわすれたが、配列の空の要素だけ取り除きたかった時があったのでメモ書き。
CakePHPをダウンロードして解凍して展開後のお話。
URLがどのように解釈されているかのお話。
【.htaccess】と【index.php】
この2つの組み合わせが3つ存在します。
1つ目:CakePHP直下
2つ目:app直下
3つ目:webroot直下
それぞれの【.htaccess】の中身が下記になります。
【CakePHP直下】
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
【app直下】
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
【webroot直下】
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
【.htaccess】ファイルの設定により、
http://URL/controller/action/param
となっているURLでアクセスした場合、
http://URL/app/webroot/index.php?url=controller/action/param
と言うように解釈され処理が進んでいきます。
これには当然mod_rewriteや.htaccessが利用できる場合に限られますが、じゃー利用できない場合はと言うと、
【CakePHP直下】のindex.phpファイルがmod_rewrite・.htaccessの変わりを行います。
そして解釈されたURL(http://URL/app/webroot/index.php?url=controller/action/paramの形)は
【webroot直下】のindex.phpファイル内でDispatcherに渡されて,URLからコントローラー・モデル・ビューを判断し、それぞれのインスタンス生成が行われます。
この時、命名規則に関する処理は【inflector.php】と言うファイル内で解決されています。
単語の先頭を大文字にしたり複数形の処理もここで行われています。
personがなんでpeopleって解釈されるか疑問だったんですよねー
ちなみにdispatcherとinflectorのファイルの場所は
cake/dispatcher.php
cake/libs/inflector.php
にあります。
app/config/core.php内の下記定数の値を0~3のどれかにを変更することで
cakephpのデバッグをコントロールできます。
Configure::write(’debug’, 0~3);
0:本番運用
エラー出力無し。
app/tmp/cache/models の中にDBスキーマのキャッシュファイルがあるが,
これは【1】以上にしないと更新されない。
【0】後にDBを変更したときは、手動でこのキャッシュファイルを消さないといけない。
1:開発用(PHPエラー出力)
error_reporting(E_ALL)
ini_set(’display_errors’, 1)
上記2つが内部的に実行されます。
2:開発用(1プラスDBクエリー情報の出力)
・ (default) 8 queries took 10 ms」クエリの数(8)と,合計時間(10ms)
・Nr 実行したクエリーの連番
・Query 実行したSQL文
・Error エラー情報
・Affected UPDATEやDELETEの際は,影響した行数、 SELECTの場合は結果の行数
・Nom. rows 結果の行数
・Took (ms) DB上でのクエリの実行時間
3:開発用(2プラスコントローラーのオブジェクト情報)
ビューかコントローラーに記述する必要がある。
これはあまり使用しないでしょう。オブジェクト情報が見たければ、その都度pr($this)など記述
すればいいと思います。
ubuntu9.10
数年ぶりのリナックス。
viのコマンドもすべて忘却。
コマンドメモ、とりあえずメモ。
あとから整理する、と思う。
マウントされているUSBなどの情報一覧。 どのデバイスが使われているのか見る時 スーパーユーザーじゃないと表示されない fdisk -l フォルダやファイルのパーミッションまで見れる ls -l どっとから始まるファイルなども表示 ls -a スーパーユーザーに変身 このコマンドの後パスワード聞いてくる sudo su 現在実行中のプロセス表示 ps ax ps ax|grep firefox プロセスを停止 kill 上記プロセス番号 IPアドレス確認 ifconfig 画面のTOPからの入力になる Ctrl+l 自動起動されているものを見る 3,4,5がonで自動起動されている chkconfig --list ----------------------samba---------------------- サンババージョン確認 vは大文字 smdb -V /etc/samba/smb.conf smb.conf設定ファイル 強制的にパーミッション777で共有を作成する時 read only = No force create mode = 0777 force directory mode = 0777 guest only = Yes ユーザー追加 smbpasswd -a ユーザー名 サンバ再起動 sudo /etc/init.d/samba restart ----------------------vim---------------------- インサートモードに移行 i コマンドモードに移行 ESCボタン 上書き保存 :w 上書き保存+終了 ZZ ページ下送り Ctrl+d ページ上送り Ctrl+u x カーソル位置の文字を削除 dd 行の削除 p 削除データの貼り付け u 編集の取り消し / 文字の検索 ? 逆方向の文字の検索 a コマンドモードから入力モードに切り替え(カーソル位置の後ろから文章を追加) i コマンドモードから入力モードに切り替え(カーソル位置の前に文章を追加) o コマンドモードから入力モードに切り替え(カーソル位置の行の次の行に追加) R コマンドモードから入力モードに切り替え(カーソル位置の文章を置き換え) Esc 入力モードからコマンドモードに切り替え :w→Enter viを終了せずにファイルを保存 ZZ ファイルを保存しviを終了 :q !→Enter ファイルを保存せずにviを終了
app/config/core.php ファイル内の
Configure::write(’debug’, 2);
この設定が2以上で発行されたSQL文がページの下部に表示されます。
発行されたSQL文をファイルに取得します。
①
cake/libs/model/datasources/dbo
┃
┗dbo_mysql_log.phpを作成
<?php
uses("model".DS."datasources".DS."dbo".DS."dbo_mysql");
class DboMysqlLog extends DboMysql{
var $queryNo = 1;
function execute($sql){
$ret = parent::execute($sql);
if(defined("LOG_SQL") && LOG_SQL){
$this->log(sprintf("%d.%s",$this->queryNo,$sql),LOG_DEBUG);
$this->queryNo++;
}
return $ret;
}
}
?>
--
②app/config/database.php
┃
┗’driver’ => ‘mysql_log’,にする
var $default = array( 'driver' => 'mysql_log', 'persistent' => false, 'host' => 'localhost', 'login' => 'verynight', 'password' => 'xxxxxx', 'database' => 'database', 'prefix' => '', 'encoding' => 'utf-8' ); --
③定数LOG_SQLをapp/config/bootstrap.phpにてdefineする
これで
app/tmp/logs/debug.log にSQL文が出力される。
出力内容を見やすくカスタマイズするには①のdbo_mysql_log.phpファイルにて
function showLog()をオーバーライドしてゴリゴリ書くらしい。