成長の果実

不完全でも良いから前に進む。


テーマ:
PHPのバージョン4と5のbasename関数では、ファイル名などの最初に、日本語などのマルチバイトがある場合はマルチバイト部分が消えてしまうバグがある。


そのため、外国人が作ったサービスでbasename関数が使われていた場合は日本語が扱えないことが常。


AjaXplorerなんかは優れたファイルマネージャーだと思うけど、basename関数のバグのせいでマルチバイトで始まるファイルのアップロードやダウンロードができないため、結構残念だったりする。



で、このbasename関数のバグはどうやらPHPのバージョン6では修正されるらしいとのこと。



修正されるらしいという情報だけで、実際現状で修正されているかの情報を見つけられなかったので自分で確認してみることにした。




以下、検証内容。


◎サンプルコード

<?php

echo basename("てすとtest.txt");
print "<br />";
echo basename("testてすと.txt");
print "<br />";
echo basename("test");
print "<br />";
echo basename("てすと");

?>




通常であれば、下記のように表示されるはず。

てすとtest.txt
testてすと.txt
test
てすと




ではまずPHP5から確認してみる。


◎PHP5

・詳細バージョン

# php -v
PHP 5.2.17 (cli) (built: Aug 31 2011 17:06:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies



・確認結果

成長の果実-basename_php5

想定通り、basename関数のバグで「てすとtest.txt」と「てすと」が正常に表示されていない。

相変わらず先頭がマルチバイトで始まるやつはダメ。








次にPHP6にて確認。


◎PHP6

・詳細バージョン

# php -v
PHP 6.0.0-dev (cli) (built: Feb 29 2012 23:02:36)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2009 Zend Technologies



・確認結果

成長の果実-basename_php6



正常に表示されてる!!!!!



ちゃんと修正されてるみたい。

これでPHP6では、basename関数については大丈夫そう。






ちなみに、PHP6の環境は下記の記事を参考に構築しました。


【コラム】PHP開発のエッセンス (2) PHP 6を先取り(1) - インストールの準備 | エンタープライズ | マイナビニュース
http://news.mynavi.jp/column/php/002/index.html





もう少しPHP6を使ってみて特に問題なく動作するようなら、どうしてもAjaXplorerをカスタマイズなしで使用したいとかいう特殊な場合にはPHP6で使っていいかも。


PHPは変なバグ多いね。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

てつこさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。