75件中 1~10件  1 2 3 4 5 6 7 8 次へ >

e();の拡張
2010年08月12日 phpCakePHP

一覧表示の時に値が0とかの場合に”-”とか非表示にしたりとかするために毎回条件分岐とか面倒なので
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でセッション処理
2010年07月23日 php

cakePHPでのセッションに関して
リダイレクト等でsession_idが取れない場合

beforeFilter(){
	var_dump(session_id());//空になっています
	exit();
}

beforeFilter(){
	$this->Session->read();//単純なsession_startだと新規のセッションになってしまいます
	var_dump(session_id());//正常な値が入る
	exit();
}

特定のコントローラでのみMySQLのwait_timeoutを設定する
2010年06月22日 phpCakePHP

MySQLのwait_timeoutは、MySQLにアクセスしてからクエリ破棄までの時間を設定できる。
CakePHPの特定のコントローラからDBにアクセスしたときにだけ、wait_timeoutを設定するには、beforeFilterなどで次のようにすればよい。

$this->Model->query("SET wait_timeout={$wait_timeout}");

ユーザからのアクセスは早めに破棄したい…でもバッチ処理は早めに破棄すると困るなんて時に使えます。

外部にある画像の取得
2010年06月02日 php

リモートにある画像(http://~)のサイズを調べる機会があったので。
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
2010年04月07日 phpCakePHPモデル

よく失念するのでメモ
$w = array("id"=>1 );
$f = array( "count"=>"count + 1");
$this->Model->updateAll( $f, $w );

ディレクトリの自動生成サブルーチン
2010年04月05日 phpサブルーチン


	# ディレクトリが無ければ生成する
	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
		
	}

階層のあるディレクトリを一括で生成してくれるサブルーチン。



キャッシュによる怪奇現象
2010年03月02日 phpCakePHP

CakePHPで複雑怪奇な現象の原因はたいていキャッシュです。
久々に悩まされたのでメモしておきます。

【現象】
同じモジュールをブラウザから叩いたときとコマンドから叩いたときで動作が違う。

【原因】
コマンドラインから叩く場合、テーブルにカラム追加した場合などはモデルのキャッシュを1度消さないと新しいカラムが認識されません。
なぜブラウザからだと認識されるのかは謎です。

html::dateTimeのオプションで表示の上限と下限が指定できない
2010年02月25日 phpCakePHP

■\\cake\libs\view\helpers\form.php
$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レコードリスト
2010年02月12日 携帯メール配信

確認できる、携帯アドレスのMXレコードをまとめました。

[参考]
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には気をつけましょう
2009年11月11日 php

最短コードを書こうと思うあまりに、狙いとは違う動作をしてしまう事があります。

ちょいとやってしまったので、皆さんにも気をつけて頂きたい。

やろうとした事


指定配列の中から値に一致するキーを抽出->削除

実際に書いたコード


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なら、何事も無く一つ目のコードで済むのですが…



というわけで初歩の初歩的な問題ですが、返り値の把握をするのは大変なので、気をつけて下さいねーって事で。
1 2 3 4 5 6 7 8 次へ >