EC studio EC studio 技術ブログ

2007年08月01日投稿者:山本 正喜

PHP5の関数をPHP4で使う – PHP_Compat

とうとうPHP4が2007年末でサポートが終了されるそうです。
重大なセキュリティは2008年8月まで対応されるそうですが、
今年中にはPHP5へ全面移行した方が良さそうです。

オブジェクト指向関連の機能が大幅に強化され、
新しい関数なども多数追加されるなど、
いいことずくめのPHP5ですが、残念ながら
多くのサーバーではPHP4が根強く採用されています。

PHP4のサポート終了に伴い、順次PHP5への切り替えが
進んでいくと思いますが、PHP4の環境でも
PHP5の新機能を使ってみたい!という方に
PHP4でPHP5の関数を使う方法をご紹介します。

PHPには、PEARという公式ライブラリ集がありますが、
その中にPHP_Compatというライブラリがあります。

このライブラリを組み込むと、PHP5の関数をPHP4で動かしたり、
PHP4の関数をPHP3で動かすなどといった事ができます!
(実際には、同じ動作をする関数をPHPでエミュレート(擬似的に動作させる)しています)

使い方は、

  1. //ライブラリの読み込み
  2. require_once 'PHP/Compat.php';
  3. //使いたい関数をロード
  4. PHP_Compat::loadFunction('file_put_contents');

とするだけ。(簡単ですね!)
※PEARが組み込まれていない場合は、PEARのサイトよりダウンロードしてください。

↓共通で読み込むファイルなどにこう書いておくと便利です。

  1. //PHP4の場合、PHP5の関数をロード
  2. if (!version_compare("5.0.0", phpversion(),"<")){
  3.     require_once 'PHP/Compat.php';
  4.     PHP_Compat::loadFunction('file_put_contents');
  5.     PHP_Compat::loadFunction('...');
  6.     PHP_Compat::loadFunction('...');
  7.     PHP_Compat::loadFunction('...');
  8. }

こんな感じで書いておけば、環境がPHP5に切り替わった時は
読み込まれなくなるので、コードの修正なく移行できます。

あくまでPHPによるエミュレートなので、組み込み関数の様に
速度は期待できませんが、PHP5になればそれも解決できるので、
PHP5の環境を想定しつつもPHP4でも動くようにするには
非常に便利です。

ただ、このPHP_Compatで使用できる関数が大量にあるので、
どの関数を読み込めばいいの?と悩んでしまうかと思います。

そこで、EC studioオススメのPHP_Compatで使用できる
PHP5の関数をご紹介します!

file_put_contents

文字列をファイルに書き込みます。
PHP4までだと、

  1. $filepath = "text.txt";
  2. $data = "EC studio";
  3.  
  4. if ($fp = fopen($filepath,"w")){
  5.     flock($fp,LOCK_EX);
  6.     fputs($fp,$data);
  7.     flock($fp,LOCK_UN);
  8.     fclose($fp);
  9. }

と書いていたのが、

  1. $filepath = "text.txt";
  2. $data = "EC studio";
  3.  
  4. file_put_contents($filepath,$data);

こう書けます。
PHP4にあるfile_get_contentsの書き込み版ですね。

file_get_contentsfile_put_contentsを使えば、
ファイルポインタを使わないでファイル操作を行うことが
できるので、非常に便利です。

※ただしこれらの関数はファイルの内容を一度に読み込むため、
大きいデータを扱う場合は、ファイルポインタを使った
書き方をおすすめします。

PHP::Compatでロードするには

  1. PHP_Compat::loadFunction('file_put_contents');

とすればOKです。(他の関数も同様)

htmlspecialchars_decode

HTMLタグをエスケープする関数、htmlspecialchars
元に戻す関数です。

PHP4では多くの方がunhtmlspecialcharsみたいな関数を
自作していたかと思いますが(笑)、PHP5からは
ネイティブでこの関数がサポートされました。

  1. $escaped_html = "&lt;p&gt;EC studio&lt;/p&gt;";
  2.  
  3. //エスケープを解除
  4. echo htmlspacialchars_decode($escaped_html);

http_build_query

これは使う機会はそう多くないですが、
知っておくと非常に楽ができる関数です。

連想配列を渡すと、GETパラメータの文字列にして返してくれます。

  1. $params = array(
  2.             "act" => "view",
  3.             "type" => "account",
  4.             "username" => "ecstudio"
  5.             );
  6. echo http_build_query($params);

この出力結果は

act=view&type=account&username=ecstudio

となります。
データを持たせてリダイレクトさせたい時など、

  1. header("Location:".$url."?".http_build_query($params));

こうやって、さっとパラメータを作れてしまいます。
個人的に結構お気に入りの関数です。
(ちょっとしたシリアライズにも使えます)

str_ireplace

これは、str_replaceをよく使う方には
なんでいままで無かったの?と思う関数だと思います。

文字列置換のstr_replaceは頻繁に使うかと思いますが、
大文字小文字を区別するので、場面によっては使いづらく、
preg_replaceを使わなければいけない場面が多くありました。
(正規表現関数は重いのでなるべくなら使いたくないところです)

  1. $str = "Hello EC studio";
  2.  
  3. //大文字小文字区別なく置換
  4. echo str_ireplace("hello","Hi",$str);

※PHP_Compatの場合でも、ソースコードを見ればわかりますが、
str_ireplaceは正規表現関数を使わずに実現されています。

PHP5からはこのstr_ireplaceで大文字小文字区別なく置換できます。

stripos

strposの大文字小文字区別しない版です。
strposは文字列中に特定の文字列が含まれるかを
確認する時に良く使われる関数です。

---- 少し話しそれますが

文字列の存在確認にはstrstrが使われるケースも多くありますが、
strposの方が動作が速いのでこちらが推奨されています。

php.netのstrstr関数のリファレンスより引用

注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より早く少ないメモリを使用する strpos() を代わりに使用してください。

strposでの存在確認は、

  1. $str = "Hello EC studio";
  2. $text = "EC";
  3.  
  4. if (strpos($str,$text) !== false){
  5.     echo $str."の中に".$text."があります!";
  6. }

こういう構文を使います。
strstrに比べるとわかりづらいですが、、、
すぐに慣れると思います。

---- 戻ります

いままでPHP4の時にはstrtolowerや正規表現などを
使わなければいけなかったのが、これで出来るように
なるので便利です。

  1. $str = "Hello EC studio";
  2. $text = "hello";
  3.  
  4. //大文字小文字区別なく文字列があるかチェック
  5. if (stripos($str,$text) !== false){
  6.     echo $str."の中に".$text."があります!";
  7. }

※この関数も、str_ireplace同様PHP_Compatでは
正規表現を使わず実現されています

----------------------------------

以上、PHP_CompatによるPHP5の便利関数の紹介でした。

PHP_Compatは、PHPで書かれているので、
実際の関数の動作を勉強するにも役立ちます。
(PHPのC言語で書かれたソースコードを読むのは大変ですし、、)

PHP4を使われている方は是非使ってみてください!


関連した記事:
投稿者
人気のエントリー
カテゴリー
最近のエントリー
アーカイブ
Copyright© ChatWork, All Rights Reserved. secured by ESET.