DirectoryIterator inconsistente+comportamento do filtriterador no PHP?

StackOverflow https://stackoverflow.com/questions/2087648

  •  21-09-2019
  •  | 
  •  

Pergunta

Eu escrevi um script que está usando a classe FilterIterator proveniente da biblioteca PHP padrão (SPL) e eu recebo Behabours diferentes versões php 5.x :( aqui a função aceit ():

public function accept()
{   
$current = $this->current();
print_r($current);      

    return true;
}   

e aqui está sua produção para o 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] => 
)

e aqui está o que eu recebo com o mesmo código sob Php 5.2.5

DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)

Este último tem permissão 755 em todos os arquivos. O que se passa com DAT?

Foi útil?

Solução

Parece que está realmente bem! Os métodos de chamada nos objetos de diretório aparentemente vazios funcionam. Os problemas que eu estava tendo estavam em outro lugar e tinham a ver com clonar esses objetos. Parece que o Php 5.3 clones profundamente, enquanto 5.2 não, para que todas as referências sejam mortas em cada iteração (ou algo assim). É uma bagunça feia e não documentada: o PHP é péssimo!

Outras dicas

De php.net:

  • Nota: A partir do Php 5.3.0, essa extensão não pode mais ser desativada e, portanto, está sempre disponível.

Possivelmente a configuração do PHP 5.2.5 está de alguma forma incompleta/errada? Você tem o seu log de log de erro definido para exibir avisos? Caso contrário, ajuste -o e execute seu código novamente para ver se está jogando algum aviso ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top