zend lucene search property check | php
1月 29th, 2012
__issetもないようなのでチェックできないと思っていましたが、以下の方法でプロパティの存在確認が出来ました。
$names = $hit->getDocument()->getFieldNames();
if(in_array(’title’, $names)) $item['title'] = $hit->title;
if(in_array(’price’,$names)) $item['price'] = $hit->price;
property_exists | php
1月 25th, 2012
プロパティの存在判別が出来ないのかという話です。
http://www.php.net/manual/ja/function.property-exists.php
> isset() とは対照的に、 プロパティの値が NULL の場合でも property_exists() は TRUE を返します。
これだと思ったら
> property_exists() 関数は、マジックメソッド __get を使ってアクセスするプロパティを検出することはできません。
むー。
stdClassの場合。
$o = new stdClass();
var_dump($o->abc);
// PHP Notice: Undefined property: stdClass::$abc in test.php on line 5
// NULL
var_dump(isset($o->abc));
// bool(false)
var_dump(property_exists($o,’abc’));
// bool(false)
$o->abc=null;
var_dump($o->abc);
// NULL
var_dump(isset($o->abc));
// bool(false)
var_dump(property_exists($o,’abc’));
// bool(true)
__get __setを書くと・・・
class myClass{
private $data = array();
public function __set($key,$value){
$this->data[$key]=$value;
}
public function __get($key){
[...]
php zend Lucene pagination
1月 24th, 2012
http://framework.zend.com/manual/1.11/en/learning.lucene.pagination.html
なんとなくコメントが面白いので。
検索結果のidだけキャッシュしておいて
次ページのときは、idからデータを取得しろというだけですが
この結果のインスタンスのサイズが半端ないので、全部キャッシュするのは無理です。
とりあえず、速度だけ計ってみました。
getDocument 100回
0.10254192352295 sec
0.093567132949829
0.091049194335938
search + 100データ取得 + 1000idをcache
0.86610412597656 sec
0.6905689239502
0.69413304328918
ということで、検索は、キーワードやデータ量でかなり変わりますが、getdocument100回のほうが速いことは分かりました。
ページングとキャッシュを実装しました。
基本的には、ページング以外にキャッシュが利用されることは稀なので、memcachedのメモリは少なめに設定です。
Redis + predis | memcachedの代わりにRedisを使ってみる。
1月 20th, 2012
http://redis.io
http://redis.io/clients
memcachedを利用していた表示データをredisにしてみます。
消えても良いのですが、データが出来るまで寂しいので。
daily rankingやpublic activityとか
*永続的なmemachedですが、メモリーサイズより大きいデータは扱えないので、あくまでもmemcachedの代替。Virtual Memory機能はあるが非推奨。
1. redis install
# yum list redis
redis.x86_64 2.0.3-2.el5 [...]
PDOのdsnにcharset が必要だった。|mysql php
12月 26th, 2011
mysql:host=slave.mysql.tranode.com;dbname=tranode;port=99999;charset=utf8;
みたいな。
charsetを指定しないと文字化けした。phpからだけ見てるとわからないけど
mysqlから直接見ると文字化けしてたので、文字コードが間違えて入ってるっぽい。
gettextで他言語対応 | php
12月 11th, 2011
index.phpに以下のように
<?php echo _(’Here is top page.’); ?>
xgettext index.php –from-code=utf-8 -o messages.pot
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid “”
msgstr “”
“Project-Id-Version: PACKAGE VERSION\n”
“Report-Msgid-Bugs-To: \n”
“POT-Creation-Date: 2011-12-11 18:13+0900\n”
“PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n”
“Last-Translator: FULL NAME \n”
“Language-Team: LANGUAGE \n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; [...]
PHP Fatal error: Class ‘Memcache’ not found | memcached php
11月 21st, 2011
PHP Fatal error: Class ‘Memcache’ not found
memcached , memcacheがあるので、memcache入れ忘れているときこうなります。
pecl memcachedしか入っていないとき
$ php -i | grep -i memcache
/etc/php.d/memcached.ini,
memcached
memcached support => enabled
libmemcached version => 1.0.2
Registered save handlers => files user memcached tokyo_tyrant
pecl memcache を入れる!
$pecl install memcache
/etc/php.d/memcache.ini に
extension=memcache.so
として保存
$ php -i | grep -i memcache
/etc/php.d/memcache.ini,
/etc/php.d/memcached.ini,
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 [...]
convert utf-8 to sjis filter for mobile | zend filter
11月 21st, 2011
mixiモバイルがsjisなので、フィルターを入れる。
SJISに変換するfilterを作る。
http://framework.zend.com/manual/ja/zend.filter.writing_filters.html
class Lib_Filter_Encoding_Utf2sjis implements Zend_Filter_Interface
{
public function filter($value)
{
return mb_convert_encoding( $value, ‘SJIS’, ‘UTF-8′ );
}
}
viewにsetFilter
$view->setFilterPath(’/mylib/grow.dev/Lib/Filter/Encoding’,'Lib_Filter_Encoding’)->setFilter( ‘Utf2sjis’ );
(zend通すときはnamespace使わない。
PHP namespace autoloader
10月 20th, 2011
サービスごとのコードを切り分けるのにnamespaceを使おうかと
http://www.php.net/manual/ja/language.namespaces.php
http://www.php.net/manual/ja/language.namespaces.faq.php#language.namespaces.faq.shouldicare
さて構造は。
http://d.hatena.ne.jp/sotarok/20101208/1291739722
普通に使ったら問題なさそうだけど。
今から作る部分だけ切り替えていくか悩もうかと思ったけど、
悩むまでもなく変えるべきみたいなのでとりあえず入れてみる。
autoload非推奨でspl_autoload_registerを使うと。
http://php.net/manual/ja/language.oop5.autoload.php
http://php.net/manual/ja/function.spl-autoload-register.php
set timeout Zend_XmlRpc_Client
9月 4th, 2011
PHP Fatal error: Uncaught exception ‘Zend_Http_Client_Adapter_Exception’ with message ‘Read timed out after 10 seconds’
default timeout is 10 seconds.
i set timeout to 60secs with zend_httd_client
$httpClient = new Zend_Http_Client();
$httpClient->setConfig(array(’timeout’ => ‘60′));
$xmlrpcClient = new Zend_XmlRpc_Client(’http://blog.bbtune/’,$httpClient);