PHP での DirectoryIterator+FilterIterator の動作に一貫性がありませんか?
質問
標準 PHP ライブラリ (SPL) の FilterIterator クラスを使用するスクリプトを作成しましたが、PHP 5.x バージョン間で異なる動作が発生します:( ここで accept() 関数:
public function accept()
{
$current = $this->current();
print_r($current);
return true;
}
PHP 5.3.1 の出力は次のとおりです。
DirectoryIterator Object
(
[pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.
[fileName:SplFileInfo:private] => .
[glob:DirectoryIterator:private] =>
[subPathName:RecursiveDirectoryIterator:private] =>
)
DirectoryIterator Object
(
[pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/..
[fileName:SplFileInfo:private] => ..
[glob:DirectoryIterator:private] =>
[subPathName:RecursiveDirectoryIterator:private] =>
)
DirectoryIterator Object
(
[pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.DS_Store
[fileName:SplFileInfo:private] => .DS_Store
[glob:DirectoryIterator:private] =>
[subPathName:RecursiveDirectoryIterator:private] =>
)
そして、これがPHP 5.2.5で同じコードで得られるものです
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
後者には、すべてのファイルに対するアクセス許可 755 が与えられます。どうしたの?
解決
これは実際にはOKであるように、
ようです!一見、空のDirectoryIteratorのメソッドを呼び出すには、作品をオブジェクト。私が持っていた問題は、他の場所であり、これらのオブジェクトを複製するとしなければなりませんでした。思わPHP 5.3のクローンが深い5.2ながら、そのすべての参照は、各反復(またはそのような何か)に殺されません。その醜い、非文書混乱:!PHPは吸う。
他のヒント
PHP.net から:
- 注記:PHP 5.3.0 以降、この拡張機能は無効にできなくなったため、常に使用できます。
おそらく、PHP 5.2.5 の設定が何らかの形で不完全または間違っているのではないでしょうか?警告を表示するようにエラー ログ レベルを設定していますか?そうでない場合は、調整してコードを再度実行して、警告がスローされるかどうかを確認します。
所属していません StackOverflow