Archive for the ‘php’ Category

 

phpのnamespace+classを変数から使う場合。

9月 27th, 2012

http://www.php.net/manual/en/language.namespaces.faq.php クラス名を可変にするため、変数から利用するとき 普通にクラス名だけでは、ダメでした。 namespace A\B; use A\B as X; class Cclass{ } $c = new Cclass(); $c = new X\Cclass(); $c = new \A\B\Cclass(); $classname = ‘Cclass'; echo (class_exists($classname))?1:0; // 0 echo “\n”; $classname = ‘X\Cclass'; echo (class_exists($classname))?1:0; // 0 echo “\n”; $classname = ‘\A\B\Cclass'; echo (class_exists($classname))?1:0; // 1 echo “\n”; ということで、変数に入れるときは、namespaceも全部指定しないとダメでした。

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

kyototycoon /rpc/set で php curl が遅かった原因

9月 26th, 2012

追加問題発生。さてどうする。 apacheを介したときのphp+curlの挙動がおかしい問題です。 このままでは使えないので。。。いろいろ調べた結果 結論からになりますが、curl使うの辞めました〜 fsocketopenで自分でリクエストつくって流すだけです。 複雑な処理は何も無いので一瞬で完成。phpとcurlを弄った時間はムダでした。 速度には何の問題も無いです! colenc=Uの件もphp+curlの問題だったようです。BもUも速いです。 === ↓直ったと思ったら、apacheを介していると挙動が違います。 ↓php+curlのバージョンの問題とか何かの原因のようです。 結論から言うと colenc=U で urlencodeしたデータをpostしていたのが悪かったようで colenc=Bのbase64_encodeにしたら問題なくなりました。 colenc=Uで使ってみたのですが http://fallabs.com/blog-ja/promenade.cgi?id=99 を見直し、作者さんのサンプル通りにcolenc=Bに戻しました。 同じことやってるのにエンコードを変えるとcurlの挙動が変わっているようです。 curlのinfoの数値を colenc=U ["url"]=> string(34) “http://192.168.0.22:50821/rpc/set” ["content_type"]=> string(25) “text/tab-separated-values” ["http_code"]=> int(200) ["header_size"]=> int(144) ["request_size"]=> int(161) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(1.001801) ["namelookup_time"]=> float(1.9E-5) ["connect_time"]=> float(9.1E-5) ["pretransfer_time"]=> float(9.2E-5) ["size_upload"]=> float(1048) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> […]

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

php fopen r+ a+

9月 4th, 2012

http://www.php.net/manual/en/function.fopen.php 最近ファイル操作は、滅多に使わないからか忘れますね r+は、ファイルの先頭にポインター。 a+は、ファイルの最後にポインター。 ついでに、w+は、先頭にポインターされていて、内容削除。 確認。 0123456789と書いたファイルをfr fa fwで操作してみる $fr = fopen(‘./fr’, ‘r+’); $fa = fopen(‘./fa’, ‘a+’); $fw = fopen(‘./fw’, ‘w+’); echo “\nfr 3 chara : “; echo fread( $fr, 3 ); echo “\nfa 3 chara : “; echo fread( $fa, 3 ); echo “\nfw 3 chara : “; echo fread( $fw, 3 ); echo […]

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

php kyototycoon

8月 25th, 2012

ドラクエ10でもkyototycoonを利用しているとのことで 動かないのを上げておくのもなんだなと・・・更新してみました。 https://github.com/junichi-otake/php-kyototycoon colencのところを見るように更新しました。 簡単な動きは利用出来ますので、よかったら参考にしてください。

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

json_decode, unserializeの比較 | php

7月 3rd, 2012

ascii文字列10文字 json:0.00083112716674805 php :0.0003509521484375 2.3682065217391 日本語文字列10文字 $j=’”\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3053″‘; $p=’s:30:”あいうえおかきくけこ”;'; json:0.0024328231811523 php :0.00071287155151367 3.4127090301003 適当な配列+数字 $j='{“a”:1000,”b”:{“c”:999}}'; $p=’a:2:{s:1:”a”;i:1000;s:1:”b”;a:1:{s:1:”c”;i:999;}}'; json:0.0030450820922852 php :0.0014889240264893 2.0451561248999 decode変換はphpの方が速い。 ちなみに、json_encode, serializeは同じくらいでした。 こんな感じ。 json:0.026504039764404 php :0.02891993522644

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

Atom Feedを出力 | zend framework

6月 26th, 2012

http://framework.zend.com/manual/1.11/en/zend.feed.html http://framework.zend.com/manual/1.11/en/zend.feed.consuming-atom.html http://framework.zend.com/manual/1.11/en/zend.feed.writer.html atom feedを出力します。 // 空のfeedを作成 $feed = new Zend_Feed_Writer_Feed; $feed->setTitle(‘blog.bbtune’); $feed->setLink(‘http://blog.bbtune.com’); $feed->setFeedLink(‘http://blog.bbtune.com/atom’, ‘atom’); $feed->addAuthor(array( ‘name’ => ‘Junichi Otake’, ‘uri’ => ‘http://blog.bbtune.com’, )); $feed->setDateModified(time()); // エントリーを追加 $entry = $feed->createEntry(); $entry->setTitle(‘create an atom feed’); $entry->setLink(‘http://blog.bbtune.com/’); $entry->addAuthor(array( ‘name’ => ‘Junichi Otake’, ‘uri’ => ‘http://blog.bbtune.com’, )); $entry->setDateModified(time()); $entry->setDateCreated(time()); $entry->setDescription(‘generated a feed by zend framework zend_feed_writer’); $entry->setContent(‘generated a […]

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

strtotimeがズレたので、datetime::add、datetime:subに変更する | PHP

3月 30th, 2012

閏年のせい?で、strtotimeがなぜかズレました。ズレないはずなのですが。 (datetimeでも同じでした。) 3/30日に一ヶ月前を指定すると3/1になりました・・・ strtorimeの説明に この関数を使って日付の足し算や引き算を行うことはおすすめできません。 PHP 5.3 以降なら DateTime::add() や DateTime::sub() を、そして PHP 5.2 なら DateTime::modify() を使いましょう。 と書いてありました。 http://www.php.net/manual/ja/datetime.add.php Dateinterval interval_specの書き方 http://jp2.php.net/manual/ja/dateinterval.construct.php 一ヶ月と一日前を指定してみる。 $date = new DateTime(); $date->sub(new DateInterval(‘P1MP1D’)); echo $date->format(‘Y-m-d’) . “\n”; 3/30にこれで、2012-02-29 が返ってきます。

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

キーワードマッチ in_arrayと1byteインデックス比較 | php

3月 19th, 2012

簡単なキーワードフィルターを作ろうと思い。 in_arrayでも良いかなと思ったけど、1byteだけインデックスにしてみる。 キーワードを適当に、wikipediaから $members = array(‘岩佐美咲’,’多田愛佳’,’大家志津香’,’片山陽加’,’倉持明日香’,’元チームK 21位’,’小嶋陽菜’ … in_arrayはこれだけ echo $search_word . “\n”; $start = microtime(true); for($i=0;$i

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

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

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