Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

Exifを処理する

2009/02/25 | PHPライブラリ

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

PHP5ってほんと便利。新しい関数を見つけるたびに思う。

今日見つけたのはExifを扱うライブラリ。最近のデジカメでは大抵採用されている、画像ファイルにデータを付加するための約束事。JPEGとTIFFに対応しているらしい。いつも思うことだけど、JPEGが先かExifが先か(鶏が先か卵が先か、みたいな)。

PHP5ではExifも読むことができる。一番簡単なのはExif拡張モジュールを使うこと。外部ライブラリなしでExifを読むことができるのだけれど、–enable-exif付きでPHPコンパイルされている必要がある。意外とレンタルサーバとかだと敷居が高いかもしれない。調べてみると他にも方法がある。sourceforgeに登録されているPELというライブラリだ。

http://pel.sourceforge.net/

すべてPHPのみで実装されているらしい(Exif拡張モジュールなしでやってるのかな・・・すごい)。名前からしてJPEGとExifのためのライブラリだろう。ソースを読めばExifとJPEGの知識が増えそうだ(読まないけど)。最近のデジカメでも携帯のカメラでもいろんな機能が付いてるので、画像だけで、GPS位置情報とかも取得できるかもしれない。まぁ、そういう必要に迫られて調べているので、時間を作ってスクリプトを一つ書いてみることにしよう。

処理速度の高速化その1

2009/02/24 | 高速化

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

最近は処理速度の高速化をいろいろ考えることがある。

高速化といってもいろいろある。実際に速度自体が変わっていなくても、気分的に早く動いているように感じさせる場合もあれば、実際に処理速度を改善させる場合もある。前者でいえば、例えばクリックして次の画面が出るまでの間、「Now Loading」を表示させたりする。処理速度自体はまったく変化がないが(むしろ遅いか)、何らかの視覚的なアクションによってストレスを軽減させるのがいい例だ。最近はAJAXを使って、非同期通信かつインタラクティブな構成を検討することも多い。

後者は実際に処理速度向上を図る方法。わかりやすい例で言えば、プログラム内に無駄な処理があれば、それを削除することによって少し速くなるはずだ。あとSQL文の実行に時間がかかる場合がある。そんなときはSQL文を見直すだけで速度向上につながることがある。

今日は後者のお話。最近Web APIを使ったウェブアプリを各機会が多い。一つのPHPプログラムにアクセスした際に、複数のAPIをコールして処理することもあるわけだが、普通に記述するならfile_get_contentsを数回書けばいい(実際そうは書かないけれど)。でもこれだと、当たり前だけれどfile_get_contentsの回数分だけ処理に時間がかかる。でも、一度に複数のAPIコールを実現することができる、といわれるとちょっと興味をそそられる。PHP5からはそんな機能が実装されているらしいのだ。記事元はこちら

PHP5にはcURL関数群に新しくcurl_multi_を接頭辞に持つ関数がいくつか追加されている。まさしく「curlをmultiに実現する」ための関数群だ。PHPのマニュアルから引用すると、

// cURL リソースを作成します
$ch1 curl_init();
$ch2 curl_init();

// URL およびその他適切なオプションを設定します。
curl_setopt($ch1CURLOPT_URL“http://www.example.com/”);
curl_setopt($ch1CURLOPT_HEADER0);
curl_setopt($ch2CURLOPT_URL“http://www.php.net/”);
curl_setopt($ch2CURLOPT_HEADER0);

// マルチ cURL ハンドルを作成します
$mh curl_multi_init();

// ふたつのハンドルを追加します
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
// ハンドルを実行します
do {
    
curl_multi_exec($mh,$running);
} while (
$running 0);

// ハンドルを閉じます
curl_multi_remove_handle($mh$ch1);
curl_multi_remove_handle($mh$ch2);
curl_multi_close($mh);

すごーい。こんなことが本当にできちゃうんだなぁ、驚いてしまった。こういう情報ってもっとどんどん世の中に出回ってくればいいのに・・・。最近PHPのMLもろくに読んでいないので、情報を見つけられないでいるだけかもしれない。やっぱり業務に追われるってのはよくない。マニュアルも定期的に目を通さないと、だな。

simpleXMLがすごく簡単

2009/02/22 | XML

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

PHP4の時代はXMLを扱うのが簡単ではなかった。必ず何かツールを使わないといけなかった。そんなPHP4も去年ついに開発を終了したので、ようやく重い腰を上げてPHP5に移行。超使いやすくなったといわれているPHP5のXML関連関数を今頃使い始めたのだが、これがまた簡単。

simplexml_load_fileとかするだけで、XMLツリーをオブジェクトに格納してくれる。

しかもオブジェクト内を書き換えてXMLを吐き出すこともできる。もっと早くに乗り換えていればよかったよ、PHP5。ただ唯一XMLのタグ名にコロン「:」があるとうまく扱えないことが気になった。最初、楽天ウェブサービスAPIからの戻り値を関数に放り込んでvar_dumpしたけど、オブジェクト内にぜんぜんメンバ変数が登録されていなくて、「手ごわい」と思ったんだけど。いろいろ実験して、ウェブ調べたらコロンが原因だってわかった。前向きな解決策はないようだけど、処理前に単にコロンを他の文字列に置き換えればOK。スマートではないけれど、これが確実っぽい。

時間に余裕ができたら、これを使って各種APIで遊んでみたい。


					


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524
守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524