Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka pytan do Was (katalogowanie)
Forum PHP.pl > Forum > PHP
problemik_mam
Witam

Jestem w trakcie robienia skryptu do katalogowania plików.
To, że jestem poczatkujący zmusza mnie do zapytania Was winksmiley.jpg

1. Jak zliczyć ilość katalogów i osobno plików w katalogu którym znajduje sie skrypt "/"??
2. Poprzez funkcję disk_total_space(); uzyskuje aktualny rozmiar katalogu w którym znajduje sie skrypt (w bajtach). Jak zrobic, aby skrypt zsumował tylko rozmiar plików znajdujacych się w katalogu w mb z dokladnoscia do 2 miejsc po przecinku?
3. Jak posortować wyswietlane pliki np wg nazw??

Z gory serdeczne DZIEKI temu, który mi pomoze.
Męczę się z tym juz tyle czasu, ze jeszcze trochę a powyrywam sobie wlosy z glowy (ktorych i tak mam malo smile.gif )

Pozdrawiam
KaMeLeOn
Ad. 1.
Polecam funkcję [manual:aaf2fd0149]readdir[/manual:aaf2fd0149], która przeczyta zawartość katalogu... A w szczególności 2 przykład.
Aby odróżnić plik od katalogu wystarczy do tego funkcja [manual:aaf2fd0149]is_file[/manual:aaf2fd0149] lub [manual:aaf2fd0149]is_dir[/manual:aaf2fd0149].
Ad. 2.
Do odczytywania rozmiarów plików przyda się funkcja [manual:aaf2fd0149]filesize[/manual:aaf2fd0149]... Potem suma.
Sformatować możesz za pomocą funkcji np. [manual:aaf2fd0149]printf[/manual:aaf2fd0149].
Ad. 3.
Ten problem możesz rozwiązać pobierając pliki (wspomnianą funkcją [manual:aaf2fd0149]readdir[/manual:aaf2fd0149]) do tablicy, a później tylko [manual:aaf2fd0149]sort[/manual:aaf2fd0149].

Popróbuj, a jeśli Ci się nie uda pokaż co Ci nie wychodzi.

Pozdrawiam
problemik_mam
a moze moglibys jakies przyklady podac :oops: ?
KaMeLeOn
Hmm, pokaże Ci jak ma wyglądać podstawowy kod do przeczytania zawartości katalogu (z podziałem na pliki i katalogi):
[php:1:aeca3a415a]<?php
$dir = './';
$dirs = Array();
$files = Array();
if($handle = opendir($dir))
{
while(false !== ($file = readdir($handle)))
{
if($file != "." && $file != "..")
{
if( is_dir($file) )
{
$dirs[] = $file;
}
else
{
$files[] = $file;
}
}
}
closedir($handle);
}
print_r($dirs);
print_r($files);
?>[/php:1:aeca3a415a]
Reszta należy do Ciebie...
problemik_mam
co do 1 mojego pytania- > w takim razie nie wystarczy tylko zliczyc funkcja count() questionmark.gif
KaMeLeOn
Cytat
co do 1 mojego pytania- > w takim razie nie wystarczy tylko zliczyc funkcja count() questionmark.gif

Otóż to smile.gif
problemik_mam
liczbe plików w danym katalogu zlicza mi ok, jednak przy próbie zliczenia ilosci katalogow count($dirs) zwraca zawsze 1
KaMeLeOn
A ile masz katalogów?
Wogóle, którą masz wersję php?
problemik_mam
katalogi mam 3
php Version 4.1.0
KaMeLeOn
U mnie skrypt działa bez problemu...
Możliwe, że php w tej wersji miało buga, chociaż nic nie znalazłem.

Ale powiedz mi jeszcze co wypisują na ekran funkcje print_r()?
Czy listują całą zawartość katalogu?
problemik_mam
funkcje pring_r() prawidlowo odczytuja katalogi i pliki katalogow mam 3 i tak samo zwraca je ta funkcja wiec nie wiem co jest winksmiley.jpg
KaMeLeOn
Spróbuj [manual:8bbf95cc01]sizeof[/manual:8bbf95cc01]...
Chociaż to alias count, ale przynajmniej zobaczymy jak sie zachowa...
problemik_mam
juz jest ok dziex, acha....jak w tym skrypcie wykluczyć pliki .php questionmark.gif tak zeby ich nie zliczalo ?
problemik_mam
aaa sorki glupie pytanie !! funkcja ereg() smile.gif ?
KaMeLeOn
Hmm, jest na to kilka sposobów...
Najprostrzy to użycie funkcji [manual:3075ef0c1e]glob[/manual:3075ef0c1e], jednak jest ona dostępna dopiero od wersji 4.3.0...
Zaproponuję tak:
[php:1:3075ef0c1e]<?php
// ...
if($file != "." && $file != ".." && !eregi("^(.*).php$", $file))
// ...
?>[/php:1:3075ef0c1e]
problemik_mam
moze pomoglbys mi jeszcze jak zrobic ten skrypt, ktory poda mi w mb sume plikoof ? sad.gif
KaMeLeOn
Napewno sobie sam poradzisz...
Sugestia: stwórz jeszcze jedną tablicę...
problemik_mam
Z wielka pomoca powstalo to, dla zainteresowanych smile.gif
[php:1:a2fd257bc1]<?php

$filesize = Array();
$dirs = Array();
$files = Array();
$dir = './';
if($katalog = opendir($dir))
{
while(false !== ($file = readdir($katalog)))
{
if($file != "." && $file != "..")
{
if( is_dir($file) )
{
$dirs[] = $file;
}
else
{
$filesize[] = filesize($file);
$files[] = $file;
}
}
}

closedir($katalog);
}
$suma = sprintf("%.2f", array_sum($filesize)/1048576);
$pliki=count($files);
$katalogi=count($dirs);
echo"Liczba katalogow: $katalogi<br>Liczba plikow: $pliki <br>Rozmiar plikow: $suma";
?>[/php:1:a2fd257bc1]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.