Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]filemtime, filectime, filesize
Forum PHP.pl > Forum > Przedszkole
gutek84
Witam!

Mam problem z w/w funkcjami. Mam klasę która tworzy mi plik CSV dla podanej sciezki. Wywołanie:
  1. <?php
  2. $A = new A();
  3. $A->stworzCSV(".");
  4. ?>

Dla katalogu głównego (sciezka '.') plik CSV generuje się prawidlowo i wyglada tak:

Kod
C:\Program Files\WebServ\httpd
.,d,0B,2008-07-07 14:03:43,2008-07-23 11:59:11
..,d,0B,2008-07-07 14:03:39,2008-07-07 14:04:02
class,d,0B,2008-07-23 08:57:14,2008-07-23 09:35:11
index.php,f,105B,2008-07-07 14:09:49,2008-07-23 12:40:48
plik.csv,f,1.28kB,2008-07-23 11:44:56,2008-07-23 12:40:18
strona_tyt22.zip,f,714.15kB,2008-06-02 09:23:15,2008-06-02 09:23:15
stronka,d,0B,2008-07-23 08:56:44,2008-07-23 08:56:56
Thumbs.db,f,4.5kB,2008-07-07 14:08:07,2008-07-07 14:08:08


Natomiast gdy próbuje wywołać ją dla katalogu podrzędnego(sciezka 'stronka') dostaje warningi:

  1. <?php
  2. $A = new A();
  3. $A->stworzCSV("./stronka");
  4. ?>


Kod
Warning: filesize() [function.filesize]: stat failed for img in C:\Program Files\WebServ\httpd\class\A.class.php on line 21

Warning: filectime() [function.filectime]: stat failed for img in C:\Program Files\WebServ\httpd\class\A.class.php on line 34

Warning: filemtime() [function.filemtime]: stat failed for img in C:\Program Files\WebServ\httpd\class\A.class.php on line 39


img jest katalogiem, a rozpoznawany jest jako plik przez is_dir()
dla podkatalogu class w katalogu stronka informacje wyswietlane sa poprawnie, tak samo dla . i .. oraz dla plików znajdujących sie w katalogu

Plik CSV wyglada nastepująco:

Kod
C:\Program Files\WebServ\httpd\stronka
.,d,0B,2008-07-07 14:03:43,2008-07-23 11:59:11
..,d,0B,2008-07-07 14:03:39,2008-07-07 14:04:02
class,d,0B,2008-07-23 08:57:14,2008-07-23 09:35:11
img,f,B,1970-01-01 01:00:00,1970-01-01 01:00:00
index.php,f,113B,2008-07-07 14:09:49,2008-07-23 13:32:49
lib,f,B,1970-01-01 01:00:00,1970-01-01 01:00:00
smarty,f,B,1970-01-01 01:00:00,1970-01-01 01:00:00
templates,f,B,1970-01-01 01:00:00,1970-01-01 01:00:00
templates_c,f,B,1970-01-01 01:00:00,1970-01-01 01:00:00


Klasa CSV

  1. <?php
  2. //Klasa generująca plik CSV
  3. class A{
  4. //zmienne dostępne publicznie
  5. public $data = array();
  6. //zmienne dostępne wewnątrz klasy
  7. private $uchwyt;
  8. private $plik;
  9.  
  10. //funkcja zamieniająca bierzący katalog na tablice zawierająca informacje o plikac
    h i katalogach oraz ich nazwy
  11. private function Dir2array($sciezka){
  12. if ($this->uchwyt = opendir($sciezka)) {
  13. while (false !== ($this->plik = readdir($this->uchwyt))) { 
  14. $this->data[] = $this->plik.','.$this->spr().','.$this->RozmiarPliku().','.$this->stworzono().','.$this->zmodyfikowano();
  15. }
  16. closedir($this->uchwyt); 
  17. }
  18. }
  19. //funkcja zwracająca rozmiar pliku i zamienijąca go na postać przyjazną dla człowi
    eka
  20. private function RozmiarPliku(){
  21. $rozmiar=filesize($this->plik);
  22.  
  23. if($rozmiar < 1024){
  24. return $rozmiar_pliku = $rozmiar.'B';
  25. }
  26. elseif($rozmiar > 1024 && $rozmiar < 1024*1024){
  27. return $rozmiar_pliku = round(($rozmiar/1024),2).'kB';
  28. }elseif($rozmiar > 1024*1024){
  29. return $rozmiar_pliku = round(($rozmiar/(1024*1024)),2).'MB';
  30. }
  31. }
  32. //funkcja zwracająca datę stworzenia pliku
  33. private function stworzono(){
  34. return rtrim (date("Y-m-d H:i:s.", filectime($this->plik)),'.');
  35. }
  36.  
  37. //funkcja zwracająca datę modyfikacji pliku
  38. private function zmodyfikowano(){
  39. return rtrim (date("Y-m-d H:i:s.", filemtime($this->plik)),'.');
  40. }
  41.  
  42. private function spr(){
  43. $spr = is_dir($this->plik);
  44. if($spr==TRUE){
  45. return 'd';
  46. }else{
  47. return 'f';
  48. }
  49. }
  50.  
  51. public function stworzCSV($sciezka){
  52. $this->Dir2array($sciezka);
  53. $uchwyt=fopen("plik.csv","w+");
  54. fwrite($uchwyt,realpath($sciezka)."\n");
  55. foreach($this->data as $zapisz){
  56. fwrite($uchwyt,$zapisz."\n");
  57. }
  58. fclose($uchwyt);
  59. }
  60.  
  61. //koniec
  62. }
  63. ?>


Jeśli masz jakiś pomysł to proszę o pomoc.
pozdrawiam
Kicok
1. readdir" title="Zobacz w manualu PHP" target="_manual zwraca tylko nazwę pliku, a ty potrzebujesz jeszcze nazwę katalogu ($sciezka)

2. scandir" title="Zobacz w manualu PHP" target="_manual jest wydajniejsze od opendir" title="Zobacz w manualu PHP" target="_manual, readdir" title="Zobacz w manualu PHP" target="_manual, closedir" title="Zobacz w manualu PHP" target="_manual. Możesz też iść z duchem obiektowości (obiektywizmu? smile.gif ) i zapoznać się z DirecotryIterator-em

3. Skoro $this->uchwyt używasz tylko w jednej metodzie, to może wystarczy zwykła zmienna?

4.
  1. <?php
  2.  
  3. return rtrim (date("Y-m-d H:i:s.", filectime($this->plik)),'.');
  4.  
  5. return rtrim (date("Y-m-d H:i:s.", filemtime($this->plik)),'.');
  6.  
  7. ?>

Wywal kropkę z date" title="Zobacz w manualu PHP" target="_manual i pozbądź się rtrim" title="Zobacz w manualu PHP" target="_manual.
gutek84
1.co do punktu 4 to moja glupota, zle napisalem i nie zauwazylem ze wstawilem kropke na koncu w date smile.gif

2.scandir dziala tak samo jak opendir,readdir,closedir z ta roznica ze w scandir dostaje tablice a w drugim przypadku stringa.

3.readdir odczytuje mi nazwy katalogow, tylko cos sie wywala przy funkcjach filesize... ale tylko wtedy gdy sciezka jest inna niz "kropka"('.') i nie dostaje informacji odnosnie katalogów.
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.