|
e();の拡張
|
一覧表示の時に値が0とかの場合に”-”とか非表示にしたりとかするために毎回条件分岐とか面倒なので
e();に第二引数付けてDBint型の処理してみた。
\cake\basics.php
e();に第二引数付けてDBint型の処理してみた。
\cake\basics.php
/**
* Convenience method for echo().
*
* @param string $text String to echo
*/
# editer seki 2010/08/12 17:15
function e($text,$status=false) {
if(is_string($status)){
if(empty($text)){
echo $status;
}else{
echo $text;
}
}elseif($status){
if(!empty($text)){
echo $text;
}
}else{
echo $text;
}
}
|
beforeFilterでセッション処理
|
cakePHPでのセッションに関して
リダイレクト等でsession_idが取れない場合
リダイレクト等でsession_idが取れない場合
beforeFilter(){
var_dump(session_id());//空になっています
exit();
}
beforeFilter(){
$this->Session->read();//単純なsession_startだと新規のセッションになってしまいます
var_dump(session_id());//正常な値が入る
exit();
}
|
特定のコントローラでのみMySQLのwait_timeoutを設定する
|
MySQLのwait_timeoutは、MySQLにアクセスしてからクエリ破棄までの時間を設定できる。
CakePHPの特定のコントローラからDBにアクセスしたときにだけ、wait_timeoutを設定するには、beforeFilterなどで次のようにすればよい。
$this->Model->query("SET wait_timeout={$wait_timeout}");
ユーザからのアクセスは早めに破棄したい…でもバッチ処理は早めに破棄すると困るなんて時に使えます。
CakePHPの特定のコントローラからDBにアクセスしたときにだけ、wait_timeoutを設定するには、beforeFilterなどで次のようにすればよい。
$this->Model->query("SET wait_timeout={$wait_timeout}");
ユーザからのアクセスは早めに破棄したい…でもバッチ処理は早めに破棄すると困るなんて時に使えます。
|
外部にある画像の取得
|
リモートにある画像(http://~)のサイズを調べる機会があったので。
PATHがcake用になってるので直して使ってください。
PATHがcake用になってるので直して使ってください。
/*─────────────────────────────────────
* 外部にある画像のサイズを取得
─────────────────────────────────────*/
function remotefilesizes($urls=array()){
$size = 0;
foreach($urls as $k=>$v){
$size += remotefilesize($v);
}//foreach
return $size;
}
function remotefilesize($url,$tmp_image_dir=null){
if(!is_dir($tmp_image_dir)){
$tmp_image_dir = TMP . "images";
if(!file_exists($tmp_image_dir)){
mkdir($tmp_image_dir);
}
}
$file_path = $tmp_image_dir . DS . "tmp";
file_put_contents($file_path ,file_get_contents($url));
$size = filesize($file_path);
unlink($file_path);
return $size;
}
|
updateAll
|
よく失念するのでメモ
$w = array("id"=>1 );
$f = array( "count"=>"count + 1");
$this->Model->updateAll( $f, $w );
|
ディレクトリの自動生成サブルーチン
|
# ディレクトリが無ければ生成する
function checkDir($dir){
$dir_ary = explode("/" , $dir);
$new_ary = array();
foreach($dir_ary as $k=>$v){
if($v){
$new_ary[] = $v;
# cakePHP用。変なディレクトリを生成しないように
$tmp = "/" . implode("/" , $new_ary) ;
if(eregi(ROOT.DS , $tmp )){
if(!file_exists($tmp)){
mkdir($tmp);
chmod($tmp , 0777);
}
}
}
}//foreach
}
階層のあるディレクトリを一括で生成してくれるサブルーチン。
|
キャッシュによる怪奇現象
|
CakePHPで複雑怪奇な現象の原因はたいていキャッシュです。
久々に悩まされたのでメモしておきます。
【現象】
同じモジュールをブラウザから叩いたときとコマンドから叩いたときで動作が違う。
【原因】
コマンドラインから叩く場合、テーブルにカラム追加した場合などはモデルのキャッシュを1度消さないと新しいカラムが認識されません。
なぜブラウザからだと認識されるのかは謎です。
久々に悩まされたのでメモしておきます。
【現象】
同じモジュールをブラウザから叩いたときとコマンドから叩いたときで動作が違う。
【原因】
コマンドラインから叩く場合、テーブルにカラム追加した場合などはモデルのキャッシュを1度消さないと新しいカラムが認識されません。
なぜブラウザからだと認識されるのかは謎です。
|
html::dateTimeのオプションで表示の上限と下限が指定できない
|
■\\cake\libs\view\helpers\form.php
▼オプション
dateFormat : YMD or MDY or DMY etc..
timeFormat : 24 or 12
selected : 初期選択時間 => date("Y-m-d H:i:s");
options : $attributes('minYear' => date('Y'), 'maxYear' => date('Y') +1 , 'separator' => ' ');
# input から dateTimeに
Form::input
Form::dateTime
$this->input("Model/field",type="datetime");
▼オプション
dateFormat : YMD or MDY or DMY etc..
timeFormat : 24 or 12
selected : 初期選択時間 => date("Y-m-d H:i:s");
options : $attributes('minYear' => date('Y'), 'maxYear' => date('Y') +1 , 'separator' => ' ');
$this->input("Model/field",type="datetime","dateFormat"=>"YMDH","timeFormat"=>24,"selected"=>date("Y-m-d H:i",strtotime("+1 hour")),"options"=>$attributes,"empty"=>false);
# input から dateTimeに
Form::input
$this->dateTime($fieldName, $dateFormat, $timeFormat, $selected, $options, $empty);で渡しているので、
Form::dateTime
$attributes = array_merge(array('minYear' => null, 'maxYear' => null, 'separator' => '-'), (array)$attributes);
↓
$attributes = array_merge(array('minYear' => null, 'maxYear' => null, 'separator' => '-'), (array)$attributes, (array)$attributes["options"]);
と変更しなければならない
|
MXレコードリスト
|
確認できる、携帯アドレスのMXレコードをまとめました。
[参考]
http://www.1x1.jp/blog/2008/07/vodafone_local_mta.html
http://d.hatena.ne.jp/yoshi-ken/20080102
最終チェック日:2010/2/12
[参考]
http://www.1x1.jp/blog/2008/07/vodafone_local_mta.html
http://d.hatena.ne.jp/yoshi-ken/20080102
docomo.ne.jp mfsmax.docomo.ne.jp pipopa.ne.jp mailt2.pipopa.ne.jp ezweb.ne.jp lsean.ezweb.ne.jp disney.ne.jp mail.disney.ne.jp i.softbank.jp mx.mailsv.softbank.jp softbank.ne.jp mx.softbank.ne.jp c.vodafone.ne.jp mx.k.vodafone.ne.jp d.vodafone.ne.jp mx.k.vodafone.ne.jp h.vodafone.ne.jp mx.k.vodafone.ne.jp k.vodafone.ne.jp mx.k.vodafone.ne.jp n.vodafone.ne.jp mx.k.vodafone.ne.jp r.vodafone.ne.jp mx.k.vodafone.ne.jp s.vodafone.ne.jp mx.k.vodafone.ne.jp t.vodafone.ne.jp mx.k.vodafone.ne.jp q.vodafone.ne.jp mx.k.vodafone.ne.jp jp-c.ne.jp mx.k.vodafone.ne.jp jp-d.ne.jp mx.k.vodafone.ne.jp jp-h.ne.jp mx.k.vodafone.ne.jp jp-k.ne.jp mx.k.vodafone.ne.jp jp-n.ne.jp mx.k.vodafone.ne.jp jp-r.ne.jp mx.k.vodafone.ne.jp jp-s.ne.jp mx.k.vodafone.ne.jp jp-t.ne.jp mx.k.vodafone.ne.jp jp-q.ne.jp mx.k.vodafone.ne.jp willcom.com mail2.pdx.ne.jp wm.pdx.ne.jp mail2.pdx.ne.jp dk.pdx.ne.jp mail2.pdx.ne.jp di.pdx.ne.jp mail2.pdx.ne.jp dj.pdx.ne.jp mail2.pdx.ne.jp pdx.ne.jp mail2.pdx.ne.jp bandai.jp kid001.channel.or.
最終チェック日:2010/2/12
<?php
$fname = "a.tsv";
$fl = file($fname);
foreach($fl as $k=>$v)
{
//行のタブを分解
$column = explode("\t",$v);
$key = @trim($column[0]);
$value = @trim($column[1]);
$data[$key] = $value;
}
foreach($data as $k=>$v){
unset($ary);
getmxrr($k , $ary);
if(empty($ary) or $ary[0]!= $v){
@$str = "{$k} {$v} {$ary[0]}<br>";
echo $str;
}
}//foreach
?>
|
array_search->unsetには気をつけましょう
|
最短コードを書こうと思うあまりに、狙いとは違う動作をしてしまう事があります。
ちょいとやってしまったので、皆さんにも気をつけて頂きたい。
指定配列の中から値に一致するキーを抽出->削除
このコードは一見いけそうだけれども、array_searchで検索対象が無かった場合、falseを返します。
※PHP 4.2.0 以前は、nullを返していました。
ちなみに
検索対象がなくキーに0がある場合削除されてしまうので、一つ目のコーディングは危険であり、誤りと言えます。
よってめんどうですが、
返り値がnullなら、何事も無く一つ目のコードで済むのですが…
というわけで初歩の初歩的な問題ですが、返り値の把握をするのは大変なので、気をつけて下さいねーって事で。
ちょいとやってしまったので、皆さんにも気をつけて頂きたい。
やろうとした事
指定配列の中から値に一致するキーを抽出->削除
実際に書いたコード
unset($ary[array_search("hoge",$ary)]);
このコードは一見いけそうだけれども、array_searchで検索対象が無かった場合、falseを返します。
※PHP 4.2.0 以前は、nullを返していました。
ちなみに
$ary[false] === $ary[0] $ary[true] === $ary[1]それぞれ同じポイントを指します。
検索対象がなくキーに0がある場合削除されてしまうので、一つ目のコーディングは危険であり、誤りと言えます。
よってめんどうですが、
if($key = array_search("hoge",$ary)){
unset($ary[$key]);
}
とするのが、安全です。返り値がnullなら、何事も無く一つ目のコードで済むのですが…
というわけで初歩の初歩的な問題ですが、返り値の把握をするのは大変なので、気をつけて下さいねーって事で。



