2009.09.03

Category: CakePHP / Tags:

cakephp Behavior の動的呼び出し

環境によって少しずつ違うみたいなのでメモ、
php5の環境で
modelの中から、actsAsを使わずに呼び出す場合は、
$this->Behaviors->attach(’Convert’);
$this->getConvertData( $data );//getConvertDataは、ConvertBehaviorの中のメソット
で、OK。

2009.08.06

Category: PHP / Tags: ,

phpの try and catch のサンプル

挙動の確認の為のサンプル
ini_set("display_errors","on");
class a
{
function aa()
{
$bool = false ;
if($bool){
//何かの処理
}else{
throw new Exception('error message');
}
}
}
class b extends a
{
function bb()
{
try{
$a = new a();
$a->aa();
}catch(Exception $e){
throw $e ;
}
}
}
class c extends b
{
function cc()
{
try{
$b = new b();
$b->bb();
}catch(Exception $e){
$this->_catchError($e);
}
}
function _catchError($e)
{
$error = “”;
$error .= “
\n”;
$error .= “Catch error in “. $e->getFile() . “ on line ” . $e->getLine() . “
\n”;
$error .= $e->getMessage() . “
\n”;
$error .= “trace
\n”;
$trace = $e->getTrace();
foreach($trace as $key => $val){
$error .= ““. $val['file'] . “ on line ” . $val['line'] . “
.” in class = {$val['class']}”
.”, function = {$val['function']}”
.”, type = {$val['type']}”
.”, function ={$val['function']}”
// .”, args = ” . print_r($val['args'])
. “
\n”
;
}
print_r($e);
print $error ;
       // mailが飛べば本番も安心だね
// mail(’admin@ecamlpe.com’,'php error’, $error);
}
}
$c = new c();
$c->cc();

2009.07.16

Category: PHP / Tags:

自分メモ 配列と文字列の切り替え

/**
* 文字列を配列に変換 (ここに有るべきでない)
* @parame $str string 配列になるべき文字列_(アンダースコア)つなぎ
* @return array _(アンダースコア)をデミタリにされた配列
*/
function getStrToArray($str)
{
$ary = explode( “_”, substr($str,1,-1) );
$a = “”;
if( is_array($ary) ){
foreach( $ary as $value ){
$a[] = $value ;
}
}
return $a ;
}
/**
* 配列を文字列に変換 (ここに有るべきでない)
* @parame array _(アンダースコア)をデミタリにされた配列
* @return $str string 配列になるべき文字列_(アンダースコア)つなぎ
*/
function getArrayToStr($ary)
{
if( is_array($ary) ){
$str = “_”. implode(”_”,$ary) . “_” ;
}else{
$str = “__”;
}
return $str ;
}

2009.04.17

Category: PHP / Tags:

Hyper Estraier を phpからつかってみる(検索のみ)

http://page2.xrea.jp/
に、ノード API の Pure PHP クラスライブラリ EstraierPure があったので、これを利用して
Hyper Estraier をつかってみる。
でだしは、MTの検索が重いので、全文検索のnamazuを利用していたのだけど、つかいこなして
ないこともあって、いまいち検索結果がピンとこない。
てことで、文章ドラフトをつくれる、Hyper Estraierで、やってみようかとというところと,
PHP Namazu モジュールでは、URIを指定しての検索ができない(つまりはブロガー指定の検索ができない)ので、

一応、Cのソースまで見てみたのですが、実装ができてないみたいだったので、できるならごめんなさい。
自分で実装すれば、っていうのも今回はなしで。

P2Pあたりの機能で実装できそうなこちらにチャレンジしてみます。
ブログ登録があると自動で検索対象にしてくれるモジュールがあるのも決めてでした。
namazuだと、毎日indexの更新するcronが動くまでまたないといけなかったので。
下記にドキュメントはあるのですが
http://page2.xrea.jp/doc/all/index.php?package=Services_HyperEstraier
多くの人がとりあえず、indexの生成とかは、サーバーがわのシェルスクリプトとかでやって
検索インターフェイスの実装だけをしたいと思うので、(というかおいらが)その分のメモ書き
現状の検索は
html -> js(ajax) -> api -> namazu -> api -> js -> html
のながれで、jsから、apiにアクセスして、apiが内部でnamazuの検索結果を取得して、XML
に変換して返しているので、この aip の書き直しと namazuを hyper estraier への移行で
対応したいと思います。
Class HyperEstraier_Condition が検索で主に使われるクラスになります。
簡単なながれで、
1.検索のオプション値(検索ワード、表示順、取得数)を設置して、
2.検索メソット(serach)にアクセスして、結果を取得
3.取得したデータを加工して表示
  (xmlでも結果を取得できるので上手くいけばいらないかもしれない)
を想定
HyperEstraier_Conditionの初期値(つまりは、検索の初期値)は、下記の通り
//初期値
$this->phrase = null;
$this->attrs = array();
$this->order = null;
$this->max = -1;
$this->skip = 0;
$this->options = 0;
$this->auxiliary = 32;
$this->distinct = null;
$this->mask = 0;
それぞれ、setterとgetterのメソットがあるので、あとはそれらを利用して自由に検索してください。
簡易一覧 – そのうち適当な日本語に置き換える予定
function_name param の順です
//Set the search phrase.
set_phrase($phrase) (string $phrase A search phrase.) void
//Add an expression for an attribute.
add_attr($expr) (string $expr A search expression.) void
//Set the order of a condition object.
set_order($order) (string $order An expression for the order. By default, the order is by score descending.) void
//Set the maximum number of retrieval.
set_max($max) (int $max The maximum number of retrieval. By default, the number of retrieval is not limited.) void
//Set the number of documents to be skipped.
set_skip($skip) (int $skip The number of documents to be skipped. By default, it is 0.) void
//Set options of retrieval.
set_options($options) (int $options Options: * – ESTRAIERPURE_CONDITION_SURE’ specifies that it checks every N-gram key. * – ESTRAIERPURE_CONDITION_USUAL’, which is the default, * specifies that it checks N-gram keys with skipping one key. * – ESTRAIERPURE_CONDITION_FAST’ skips two keys. * – ESTRAIERPURE_CONDITION_AGITO’ skips three keys. * – “ESTRAIERPURE_CONDITION_NOID” F’ specifies not to perform TF-ID F tuning. * – ESTRAIERPURE_CONDITION_SIMPLE’ specifies to use simplified phrase. * – ESTRAIERPURE_CONDITION_ROUGH’ specifies to use rough phrase. * – ESTRAIERPURE_CONDITION_UNION’ specifies to use union phrase. * – ESTRAIERPURE_CONDITION_ISECT’ specifies to use intersection phrase. * Each option can be specified at the same time by bitwise or. * If keys are skipped, though search speed is improved, the relevance ratio grows less.) void
//Set permission to adopt result of the auxiliary index.
set_auxiliary($min) (int $min The minimum hits to adopt result of the auxiliary index. If it is not more than 0, the auxiliary index is not used. By default, it is 32.) void
// Set the attribute distinction filter.
set_distinct($name) (string $name The name of an attribute to be distinct.) void
//Set the mask of targets of meta search.
set_mask($mask) (int $mask A masking number. 1 means the first target, 2 means the second target, 4 means the third target, and power values of 2 and their summation compose the mask.) void
// getter methods
それぞれのgetter methods
function phrase()
function attrs()
function order()
function max()
function skip()
function options()
function auxiliary()
function distinct()
function mask()

上記の、設定がおわったら
EstraierPure_Node の search メソットになげれば、検索結果(EstraierPure_NodeResultのobject)が返ってきます。
get_doc
get_doc_attr
get_doc_attr_by_uri
get_doc_by_uri
あたりをつかって、加工すればOK

2009.01.31

Category: PHP / Tags:

PHP再起処理-MLから

——————————————————
$arr = array();
$a = “”;
func1($hogehoge,&$arr,$a);
function func1($hogehoge,$arr,$a){
foreach( $hogehoge as $key => $value){
if(is_array($value)){
func1( $value,&$arr,$a.”/”.$key);
}else{
array_push($arr,$a.”/”.$value);
}
}
}
——————————————————
foreach($arr as $value){
echo $value.”\n”;
}

2008.11.06

Category: PHP / Tags:

PHPのネタ帳-環境変数表示

phpinfoでもいいんだけどね。
echo "SERVER_SOFTWARE = ".getenv(SERVER_SOFTWARE)."
n”;
echo “SERVER_NAME = “.getenv(SERVER_NAME).”
n”;
echo “GATEWAY_INTERFACE = “.getenv(GATEWAY_INTERFACE).”
n”;
echo “SERVER_PROTOCOL = “.getenv(SERVER_PROTOCOL).”
n”;
echo “SERVER_PORT = “.getenv(SERVER_PORT).”
n”;
echo “REQUEST_METHOD = “.getenv(REQUEST_METHOD).”
n”;
echo “PATH_INFO = “.getenv(PATH_INFO).”
n”;
echo “PATH_TRANSLATED = “.getenv(PATH_TRANSLATED).”
n”;
echo “SCRIPT_NAME = “.getenv(SCRIPT_NAME).”
n”;
echo “QUERY_STRING = “.getenv(QUERY_STRING).”
n”;
echo “REMOTE_HOST = “.getenv(REMOTE_HOST).”
n”;
echo “REMOTE_ADDR = “.getenv(REMOTE_ADDR).”
n”;
echo “AUTH_TYPE = “.getenv(AUTH_TYPE).”
n”;
echo “REMOTE_USER = “.getenv(REMOTE_USER).”
n”;
echo “”REMOTE_ID” ENT = “.getenv(”REMOTE_ID” ENT).”
n”;
echo “CONTENT_TYPE = “.getenv(CONTENT_TYPE).”
n”;
echo “CONTENT_LENGTH = “.getenv(CONTENT_LENGTH).”
n”;
echo “PHP_SELF = $_SERVER[PHP_SELF]
n”;
echo “argv = $_SERVER[argv]
n”;
echo “argc = $_SERVER[argc]
n”;
echo “GATEWAY_INTERFACE = $_SERVER[GATEWAY_INTERFACE]
n”;
echo “SERVER_NAME = $_SERVER[SERVER_NAME]
n”;
echo “SERVER_SOFTWARE = $_SERVER[SERVER_SOFTWARE]
n”;
echo “SERVER_PROTOCOL = $_SERVER[SERVER_PROTOCOL]
n”;
echo “REQUEST_METHOD = $_SERVER[REQUEST_METHOD]
n”;
echo “QUERY_STRING = $_SERVER[QUERY_STRING]
n”;
echo “DOCUMENT_ROOT = $_SERVER[DOCUMENT_ROOT]
n”;
echo “HTTP_ACCEPT = $_SERVER[HTTP_ACCEPT]
n”;
echo “HTTP_ACCEPT_CHARSET = $_SERVER[HTTP_ACCEPT_CHARSET]
n”;
echo “HTTP_ACCEPT_ENCODING = $_SERVER[HTTP_ACCEPT_ENCODING]
n”;
echo “HTTP_ACCEPT_LANGUAGE = $_SERVER[HTTP_ACCEPT_LANGUAGE]
n”;
echo “HTTP_CONNECTION = $_SERVER[HTTP_CONNECTION]
n”;
echo “HTTP_HOST = $_SERVER[HTTP_HOST]
n”;
echo “HTTP_REFERER = $_SERVER[HTTP_REFERER]
n”;
echo “HTTP_USER_AGENT = $_SERVER[HTTP_USER_AGENT]
n”;
echo “REMOTE_ADDR = $_SERVER[REMOTE_ADDR]
n”;
echo “REMOTE_PORT = $_SERVER[REMOTE_PORT]
n”;
echo “SCRIPT_FILENAME = $_SERVER[SCRIPT_FILENAME]
n”;
echo “SERVER_ADMIN = $_SERVER[SERVER_ADMIN]
n”;
echo “SERVER_PORT = $_SERVER[SERVER_PORT]
n”;
echo “SERVER_SIGNATURE = $_SERVER[SERVER_SIGNATURE]
n”;
echo “PATH_TRANSLATED = $_SERVER[PATH_TRANSLATED]
n”;
echo “SCRIPT_NAME = $_SERVER[SCRIPT_NAME]
n”;
echo “REQUEST_URI = $_SERVER[REQUEST_URI]
n”;
?>

2008.11.06

Category: PHP / Tags:

PHPのネタ帳

自分と同じ階層の別のファイルを呼び込む
require_once dirname(__FILE__).’/exception.php’;

2008.06.10

Category: PHP, 未分類 / Tags:

PHPを出来るだけ早く処理するためのテクニック(トピックス)

1.ループ内の換算、減算は、「前置加算子、減算子」の方が「後置加算子、減算子」よりはやい
つまりは、++$i, –$i をつかえってこと。
2.ループの場合は、do-whileが、whileより、ちょこっとが早い。for文が一番おそい。
可視性をあげるためにも、whileを推奨
3.foreach と while(each()) は、foreachがはやい
4.foreach で、keyを取得しない froeach( $array as $value ){} だけの方が1.1倍~1.3倍早い。
参考URL
http://itpro.nikkeibp.co.jp/article/COLUMN/20070704/276650/

2007.08.01

Category: PHP / Tags:

php namazu のモジュールのありか

とりあえず、今日時点で、下記URLに存在します。
http://sourceforge.jp/projects/php-i18n/

2006.08.19

Category: PHP / Tags:

.htaccess での phpの設定

.htaccess でPHPの設定を変更する場合の書式は
php_flag と php_value を使う方法があります。
前者は、true or false (On or Off) の場合に利用して
後者は、設定値がある場合に利用します。

<IfModule mod_php4.c>
php_flag display_errors On
php_value include_path “.:/var/www/vhosts/www.hoge.com/html/php”
</IfModule>

の感じになります。

« Older Entries