Archive for the ‘php’ Category

 

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;

Read full article | コメントは受け付けていません。

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){
[...]

Read full article | コメントは受け付けていません。

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のメモリは少なめに設定です。

Read full article | コメントは受け付けていません。

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 [...]

Read full article | コメントは受け付けていません。

PDOのdsnにcharset が必要だった。|mysql php

12月 26th, 2011

mysql:host=slave.mysql.tranode.com;dbname=tranode;port=99999;charset=utf8;
みたいな。
charsetを指定しないと文字化けした。phpからだけ見てるとわからないけど
mysqlから直接見ると文字化けしてたので、文字コードが間違えて入ってるっぽい。

Read full article | コメントは受け付けていません。

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; [...]

Read full article | コメントは受け付けていません。

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 [...]

Read full article | コメントは受け付けていません。

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使わない。

Read full article | コメントは受け付けていません。

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

Read full article | コメントは受け付けていません。

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);

Read full article | コメントは受け付けていません。