2011-12-14 12 views
6

Używam skryptu PHP z CLI, który używa użytkownika w metodzie DirectoryIterator::getExtension().DirectoryIterator :: getExtension() wersja

Wersja PHP biegnę pod to 5.3.5, ale zachować uzyskiwanie błędy mówiąc Fatal error: Call to undefined method DirectoryIterator::getExtension()

Skrypt działa dobrze w moim komputerze lokalnym dev uruchomiony PHP 5.3.6, bez żadnych błędów. Jednak page for DirectoryIterator::getExtension() w PHP nie ma wzmianki o wersji.

Czy ktoś może mi powiedzieć, jakiej wersji muszę użyć tej metody?

+3

changelogu ('NEWS') mówi, że to rzeczywiście wprowadzone w 5.3.6. 'Dodano SplFileInfo :: getExtension(). FR # 48767. " – mario

Odpowiedz

5

From the documentation:

(brak dostępnych informacji o wersji, może być tylko w SVN)

Wydaje się, że nie popełnić dokonać kompilacji PHP 5.3.5, ale dostał się do 5.3.6 wydanie. Strona właśnie nie została jeszcze zaktualizowana.

I jak Mario zauważono, 5.3.6 changelog wspomina dodania: Rozszerzenie

  • SPL:
    • ...
    • Dodany SplFileInfo :: getExtension(). FR # 48767. (Peter Cowburn)
+2

dzięki. Przypuszczam, że będę musiał użyć metody pathinfo(). Jakieś inne myśli? Dzięki. – julio

+0

@julio: Poza aktualizowaniem wersji na żywo do czegoś z przeszłości 5.3.5, wydaje się, że wszystko, co możesz zrobić. –

1

Nic więc dziwnego, że ciągle się getExtension(). Chociaż jest to udokumentowane, nie jest w wersji 5.3.5. Używam tego obejścia dla brakującego getExtension():

foreach($iter as $splFileInfo) { 

    $fileName = $splFileInfo->getFilename(); 

    $pos_dot = strrpos($fileName, "."); // find '.' 

    $ext = ($pos_dot !== false) ? substr($fileName, $pos_dot+1) : null; 
    //. . . 
} 
8

jest to znacznie prostszy sposób, aby uzyskać rozszerzenie pliku, IMO:

<?php 
    $iterator = new DirectoryIterator($data_dir); 
    foreach($iterator as $entity) { 
    if($entity->isFile()) { 
     $file_extension = pathinfo($entity->getFilename(), PATHINFO_EXTENSION); 
     ... 
    } 
    } 
?>