« 展示ルームVersion3B02 | メイン | 展示ルームVersion3B03 »

PHPにおける謎のFatal error

PHPの特定のバージョン、ビルドによるようですが、以下のようなエラーが出てしまうことがあるようです。

Fatal error: [] operator not supported for strings

これは要素を配列の最後に追加するという記述

$array[] = $var;

array_push() 等の関数の説明書にも正しいものとして記述されているのですが、何故かエラーになってしまうというものです。
私の場合は、Debianの

$ php -v
PHP 4.3.10-16 (cli) (built: Aug 26 2005 23:01:56)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

で発生しました。
うちの鯖のkonig(PHP 4.4.2)や、decalto(PHP 5.1.2)では発生しませんでした。4.3.10を使った事は殆ど無いので4.3.10固有のバグで世間的には処理済のことかもしれません。
ぐぐるとそのようなエラー表示になって止まってしまっているサイトも何箇所かあるようでしたが、日本語で対処方法が書いてあるサイトが見つからなかったのでメモ。

次のようなコードでディレクトリの一覧を取得しようとして、

//まずディレクトリ一覧を取得
while (false !== ($file = readdir($handle)))
{ 
	if ($file != "." && $file != "..")
	{ 
		if(is_dir($file))
		{
			$logdir[] = $file;
		}
	}
}
closedir($handle);

エラー
そこで

//まずディレクトリ一覧を取得
settype ( $logdir, 'array'); //変数の型を配列にする
while (false !== ($file = readdir($handle)))
{ 
	if ($file != "." && $file != "..")
	{ 
		if(is_dir($file))
		{
			array_push($logdir, $file);
		}
	}
}
closedir($handle);

で解決。

コメント

4.3.11でも、同様のエラーがでました。
同じく、array_pushで解決しました。謎ですね。
大変助かりました。ありがとうございます。

XREAで同様のエラーが出て困っていたところでした。
非常に役に立ちました。ありがとうございました。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)