Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DirectoryIterator - czy nie zniknie?
grzesiek_g
post 8.12.2007, 22:42:13
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Witam
Potrzebowałem funkcji do wylistowania podkatalogów w obrębie pewnego katalogu. Skorzystałem z DirectoryIterator, sprawdzanie czy jest to katalog napisałem w ten sposób:
  1. <?php
  2. if (!$child->isDot() && $child->isDir())
  3. ?>

Dostałem błąd niezdefiniowanej funkcji DirectoryIterator::isDir().
Niestety jak mi później manual powiedział:
Cytat
(PHP 5 <= 5.1.1)
, mam wersję 5.2.X PHP.

Pytanie jest następujące, czy z czasem nie wyrzucą całkowicie tego iteratora z SPL?
Chyba, że komuś są znane testy, że to było rozwiązanie wysoce nieoptymalne i dlatego porzucili tą metodę w bibliotece, to by wiele tłumaczyło.


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
sf
post 9.12.2007, 08:33:39
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Przejrzyj changelog.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
grzesiek_g
post 9.12.2007, 13:08:58
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Changelog nic nie mówi http://pl.php.net/ChangeLog-5.php, ani słowa o metodach, które zostały usunięte - po prostu wyparowały. Zresztą jak widzę z wersją PHP 5.1.2 wyparowało i kilka innych metod tego iteratora.


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
nitro18
post 9.12.2007, 16:01:48
Post #4





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


tego iteratora na pewno nie wyrzucili bo jedna z moich klas z niego korzysta.
Go to the top of the page
+Quote Post
jang
post 9.12.2007, 16:20:04
Post #5





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


  1. <?php
  2. ?>

  1. PHP Version 5.2.3-1+lenny1

  1. SPL
  2. SPL support enabled
  3.  
  4. Interfaces Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
  5. Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator,
  6.  
  7. DirectoryIterator,
  8.  
  9. DomainException, EmptyIterator, FilterIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator,
  10. LengthException, LimitIterator, LogicException, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException,
  11. ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveDirectoryIterator, RecursiveFilterIterator,
  12. RecursiveIteratorIterator, RecursiveRegexIterator, RegexIterator, RuntimeException, SimpleXMLIterator, SplFileInfo, SplFileObject,
  13. SplObjectStorage, SplTempFileObject, UnderflowException, UnexpectedValueException


--------------------
$email = filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if($email === false) {
// Houston, we have a problem....
}
Go to the top of the page
+Quote Post
mike
post 9.12.2007, 16:24:28
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~jang co z Twojego posta wynika? Nic.
Jak masz pisać zbędne posty to nie pisz ich wcale.

~grzesiek_g pokaż kod. Może mas błąd.
Z biblioteki SPL nic nie było usuwane, więc to nie problem z PHP.
I zacytuj błąd, może źle go tłumaczysz.

I gwoli ścisłości: Klasa DirectoryIterator nigdy nie posiadała funkcji isDir().
Funkcja ta pochodzi z klasy SplFileInfo, po której DirectoryIterator dziedziczy.
Go to the top of the page
+Quote Post
grzesiek_g
post 9.12.2007, 18:08:29
Post #7





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


@mike
Co nie zmienia faktu, że została usunięta. http://pl.php.net/manual/pl/function.Direc...rator-isDir.php. Kod przerobiłem już na wykorzystanie funkcji PHP is_dir(), błąd przetłumaczyłem dobrze niestety. Sprawdzałem i z metodą isDir() oraz !isFile(), poza tymi metodami wg manuala zniknęło jeszcze kilka.
Nie rozumię działania deweloperów PHP, mam nadzieję, że przy kolejnej wersji nie zniknie całkowicie DirectoryIndex...

@jang
Nie rozumię o co chodzi w tych listingach. Chcesz mi pokazać, że PHP 5.2.X jest DirectoryIterator? Przeczytaj mój pierwszy post. Jak widzisz używam tam tego iteratora, ale w połączeniu z inną metodą.

Ten post edytował grzesiek_g 9.12.2007, 18:10:14


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
mike
post 9.12.2007, 18:26:49
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(grzesiek_g @ 9.12.2007, 18:08:29 ) *
@mike
Co nie zmienia faktu, że została usunięta. http://pl.php.net/manual/pl/function.Direc...rator-isDir.php.
Co z kolei nie zmienia faktu ze poniższy kod, u mnie działa:
  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5.  
  6. foreach (new DirectoryIterator('.') as $fileInfo) {
  7. if (!$fileInfo->isDir()) {
  8. echo $fileInfo->getFilename() . "\n";
  9. }
  10. }
  11. ?>
Mam 5.2.5
Go to the top of the page
+Quote Post
grzesiek_g
post 9.12.2007, 19:15:36
Post #9





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


[@b]mike[b]
Masz rację, że działa. U mnie też to działa. Wniosek jest taki, że musiałem zrobić błąd w nazwie metody, najprawdopodobniej dałem "_" zamiast zapisu "wielbłądziego". Głupi błąd ...sad.gif Musiałem za długo wczoraj pracować.


--------------------
Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl
Go to the top of the page
+Quote Post
BaN
post 9.12.2007, 19:22:09
Post #10





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

Ostrzeżenie: (0%)
-----


W manualu prawdopodobnie jest błąd odnośnie dostępności tej funkcji. Sprawdzałem czy jest dostępna (za pomocą get_class_methods) w PHP 5.1.6 i 5.2.5 i okazało się że ta metoda nie została usunięta smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:50