2013-06-28 15 views
6
 $za = new ZipArchive(); 
     $za->open($source); 
     for($i = 0; $i < $za->numFiles; $i++){ 
      $stat = $za->statIndex($i); 
      $items = array(basename($stat['name']) . PHP_EOL); 
      foreach($items as $item) { 
      echo $item; 
      } 
     } 

Ten kod wyświetli listę wszystkich plików w archiwum zip, ale chcę wykluczyć listę folderów. Jeśli element w tablicy jest folderem, chcę wykluczyć go z tablicy, ALE nadal chcę wyświetlić listę plików w folderze. Po prostu nie wyświetlaj nazwy folderu na liście.Lista Php TYLKO pliki wewnątrz archiwum zip (wyklucz foldery)

Czy istnieje sposób mogę wykryć, czy element jest katalogiem w mojej pętli foreach (jak?) Lub czy muszę uruchomić wyszukiwanie w tablicy i poszukaj folderów, a następnie ją usunąć (jak?)?

Dzięki za pomoc

+0

Nigdy nie używałam ZipArchive ani nic podobnego do plików zip w PHP, ale tutaj jest ujęcie w ciemności. Widząc, jak ZipArchive nie ma możliwości poinformowania cię, czy coś jest plikiem lub katalogiem, możesz użyć funkcji is_dir w PHP i uruchomić ją z if. –

+0

@CBroe, przepraszam, ale jeśli chcesz korzystać z funkcji systemu plików, musisz rozpakować archiwum zip. – sectus

Odpowiedz

2

Twoja foreach jest bezużyteczna. Iteratuje on nad tablicą z jednym elementem.

W każdym razie istnieje sposób na wykrycie folderu. Najpierw foldery kończą się znakiem "/". Drugie foldery mają rozmiar 0.

$za = new ZipArchive(); 
$za->open('zip.zip'); 
$result_stats = array(); 
for ($i = 0; $i < $za->numFiles; $i++) 
    { 
    $stat = $za->statIndex($i); 
    if ($stat['size']) 
     $result_stats[] = $stat; 
    } 

echo count($result_stats); 
+0

Dzięki! Ale czy istnieje prosty sposób na usunięcie go z wyników, zamiast po prostu go nie wyświetlać? Problem polega na tym, że używam również "echo $ pł> numFiles;" aby wyświetlić liczbę plików znalezionych w archiwum po jego otwarciu. A jeśli zostanie znaleziona nazwa folderu, chcę również usunąć go z licznika. –

+0

Czy to proste? (patrz aktualizacja odpowiedzi) – sectus

+0

Dziękujemy sectus! "Drugi folder ma rozmiar 0". - Również foldery, więc nie jest to precyzyjne. Ale twój pierwszy sposób zadziała. getFromIndex() zwraca pełną nazwę wpisu za pomocą znaku/(niezależnie od systemu operacyjnego) na końcu tylko dla pozycji folderu. – StanE

0

Sprawdź rozmiar pliku, jeśli jest zero, jest to folder.

$za = new ZipArchive(); 

    $za->open('zip.zip'); 

    for($i = 0; $i < $za->numFiles; $i++){ 
     $stat = $za->statIndex($i); 
     if($stat['size']!=0){ 
      echo $stat['name']; 
     } 

    } 
+0

Powinno być '! = 0' (bez cudzysłowów), ponieważ rozmiar jest podawany jako liczba całkowita. – ComFreek

+0

@ComFreek działa dla mnie z cytatami – David

+0

To działa, oczywiście, ale jest to zły styl kodowania. Spróbuj zmienić '==' na '===' i nie będzie już działać, ponieważ trzy równe znaki również sprawdzają równość typu. – ComFreek

Powiązane problemy