Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wiele return w funkcji a zwraca tylko jeden, czyli jak to poprawić aby działało.
nitro18
post
Post #1





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

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


Mam kod który oblicza objętość folderów z podfolderami z plikami

  1. <?php
  2. function policz($sciezka) {
  3. if (!is_dir($sciezka)) return 0;
  4. $katalog = opendir($sciezka);
  5. while (false !== ($plik = readdir($katalog))) {
  6. if ($plik<>"." and $plik<>"..") {
  7. $f = "$sciezka/$plik";
  8. if (is_dir($f)){
  9.  $wielkosc+=policz($f);
  10.  $katalogi_licz=$katalogi_licz+1;
  11. } else{
  12.  $wielkosc+=filesize($f);
  13. $pliki_licz=$pliki_licz+1;
  14. }
  15. }
  16. }
  17. closedir($katalog);
  18. return $wielkosc;
  19. return $katalogi_licz;
  20. return $pliki_licz;
  21. }
  22. ?>


objętość danego folderu jest zwracana przez return $wielkosc.

Dodałem jeszcze do tej funkcji obliczanie ile jest plików i folderów w tym folderze.
Liczba plików ma być zwracana przez return $pliki_licz a liczba folderów - return $katalogi_licz

Tylko jest jedno ale. Funkcja zwraca mi tylko wielkość folderu i jak przeczytałem w dokumentacji php.net kończy działanie funkcji przez co nie zwraca liczby plików i folderów.

W jaki sposób zwrócić dwie ostatnie zmienne?

Wie ktoś może jak to naprawić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


  1. <?php
  2. $tab['wielkosc']=$wielkosc;
  3. $tab['katalogi_licz']=$katalogi_licz;
  4. $tab['pliki_licz']=$pliki_licz;
  5.  
  6. return $tab;
  7. ?>

Zwracasz tablicę i po wywołaniu funkcji odczytujesz dane prosto z niej.


--------------------
404
Go to the top of the page
+Quote Post
nitro18
post
Post #3





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

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


Pisze mi:
Fatal error: Unsupported operand types in C:\serwer\users\browser\index.php on line 11

choć dodałem tak jak napisałeś.


później jak chce wywołać:

$tab=policz($sciezka."/".$katalogi[$i]);

echo $tab['wielkosc'];

ale też nie działa.
Go to the top of the page
+Quote Post
Cienki1980
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Dziwne .. skoro wcześniej funkcja działała a nie zmieniłeś nic ważnego w samej funkcji.

A spróbuj zmienić tak aby funkcja zwracała pojedyncze wartości i zobacz czy będzie dla każdej działała. Jak dla mnie powinno działać zwracając tablicę tak samo dobrze jak zwracając pojedynczą wartość.


--------------------
404
Go to the top of the page
+Quote Post
nitro18
post
Post #5





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

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


ogólnie to jest mi potrzebne bo buduje menagera plikow na potrzeby mojego panela.

Podaje Wam pełny kod nieskończony więc tylko patrzcie tam gdzie te zmienne chce wrócić a reszta jest w fazie rozwoju biggrin.gif (oj, wiem że namieszane, ale trudno).

  1. <?
  2. $setup=$_GET['setup'];
  3. $dir=$_GET['dir'];
  4. function policz($sciezka) {
  5. if (!is_dir($sciezka)) return 0;
  6. $katalog = opendir($sciezka);
  7. while (false !== ($plik = readdir($katalog))) {
  8. if ($plik<>"." and $plik<>"..") {
  9. $f = "$sciezka/$plik";
  10. if (is_dir($f)){
  11. $wielkosc+=policz($f);
  12. $katalogi_licz=$katalogi_licz+1;
  13. } else{
  14. $wielkosc+=filesize($f);
  15. $pliki_licz=$pliki_licz+1;
  16. }
  17. }
  18. }
  19. closedir($katalog);
  20. return $wielkosc;
  21. return $katalogi_licz;
  22. return $pliki_licz;
  23. }
  24.  
  25. if($setup==""){
  26. $sciezka="../a/";
  27. $sciezka=$sciezka.$dir;
  28.  
  29. $f = opendir($sciezka);
  30. while (false !== ($plik = readdir($f))) {
  31. if ($plik<>"." and $plik<>"..") {
  32. if (is_dir($sciezka."/".$plik)) $katalogi[] = $plik;
  33. else $pliki[] = $plik;
  34. }
  35. }
  36. closedir($f);
  37.  
  38. @sort($katalogi);
  39. @sort($pliki);
  40. ?>
  41.  
  42. <?
  43. $foldery[]=explode("/", $dir);
  44. $ile= count($foldery[0]);
  45.  
  46. echo "<a HREF=\"?dir=\">Katalog Główny</A>";
  47. for($i=0;$i<$ile;$i++){
  48. $folderys.=$foldery[0][$i]."/";
  49. $folderyss=substr($folderys,0,-1);
  50. echo "<a HREF=\"?dir=".$folderyss."\">".$foldery[0][$i]."/</A> ";
  51. }
  52. ?>
  53. <BR>
  54. <BR>
  55. <BR>
  56.  
  57.  
  58. <table border=1 width="100%">
  59. <tr>
  60. <td> </TD><th>Nazwa</TH><th>Typ</TH><th>Rozmiar</TH><td> </TD>
  61. </TR>
  62. <?
  63. for($i=0;$i<count($katalogi);$i++){
  64. ?>
  65. <tr>
  66. <td style="width:25px;"><img SRC="type/folder.gif"></TD>
  67. <td><a HREF="?dir=<?echo $dir."/".$katalogi[$i];?>"><?echo $katalogi[$i]; ?></A></TD>
  68. <td>folder plików</TD>
  69. <td>
  70. <?
  71. $size=policz($sciezka."/".$katalogi[$i]);
  72.  
  73. if($size<1024){
  74. echo $size." bajtów (".$pliki_licz;
  75. }elseif(($size>=1024)&&($size<2048)){
  76. echo $size/1024;
  77. echo "-".$pliki_licz;
  78. }
  79.  
  80.  
  81.  
  82. ?>
  83. </TD>
  84. <td></TD>
  85.  
  86. </tr>
  87.  
  88. <?
  89. }
  90.  
  91. ?>
  92.  
  93. <?
  94. /*
  95. for($i=0;$i<count($pliki);$i++){
  96. echo $pliki[$i]."-----".filesize($sciezka."/".$pliki[$i])."<br>";
  97. }
  98.  
  99.  
  100.  
  101. */
  102. }
  103.  
  104. ?>
  105. <BR>
  106. <BR>
  107. <BR>
  108. <BR>
  109. <BR>
  110. <BR>
  111. <?
  112. $file="jarek.malpa.pl.cos.pl.a.s.f.g.s.w..t.sd.d.f.e.s.=.d.d.d.-.jpg";
  113. $ex=explode(".", $file);
  114.  
  115. $ile_ex=count($ex);
  116. $roz=$ex[$ile_ex-1];
  117.  
  118. unset($roz);
  119. $rozp="union";
  120.  
  121.  
  122. $roz[jpg]="JPG";
  123. $roz[gif]="GIF";
  124. $roz[exe]="EXE";
  125.  
  126. //if(isset($roz[$rozp]))echo 'ok';
  127. ?>
Go to the top of the page
+Quote Post
Cienki1980
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Jest OK biggrin.gif
Zwróć uwagę, że wewnątrz funkcji policz() wywołujesz funkcję policz();

Jeżeli zmieniłeś to co zwraca funkcja, musisz przystosować jej wywołanie wewnątrz funkcji, np tak:
  1. <?php
  2. function policz($sciezka)
  3. {
  4.  if (!is_dir($sciezka))
  5. return 0;
  6.  
  7.  $katalog = opendir($sciezka);
  8.  while (false !== ($plik = readdir($katalog)))
  9.  {
  10. if ($plik<>"." and $plik<>"..")
  11. {
  12.  $f = "$sciezka/$plik";
  13.  if (is_dir($f))
  14.  {
  15. $x=policz($f);
  16. $wielkosc+=$x['wielkosc'];
  17. $katalogi_licz=$katalogi_licz+1;
  18.  }
  19.  else
  20.  {
  21. $wielkosc+=filesize($f);
  22. $pliki_licz=$pliki_licz+1;
  23.  }
  24. }
  25.  }
  26.  closedir($katalog);
  27.  $tab['wielkosc']= $wielkosc;
  28.  $tab['kat']= $katalogi_licz;
  29.  $tab['plik']= $pliki_licz;
  30.  return $tab;
  31. }
  32. ?>

Mi ta wersja zabanglała.


--------------------
404
Go to the top of the page
+Quote Post
nitro18
post
Post #7





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

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


tak jest bo jest rekurencyjnie czy jak to się nazywa.
ten przykład wziąłem z algorytmy.pl
Go to the top of the page
+Quote Post
revyag
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


A może skorzystać z dobrodziejstw php5 i spl ? smile.gif
  1. <?php
  2. function GetSize($sDir) {
  3. $oIter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($sDir),true);
  4. $iSize = 0;
  5. foreach($oIter as $sFile) {
  6. if($sFile->isFile()) {
  7. $iSize += $sFile->getSize();
  8. }
  9. }
  10. echo $iSize;
  11. }
  12. ?>

Wyświetla wielkość wszystkich plików w danym katalogu (wliczają jego podkatalogi)


--------------------
-------------

------
Go to the top of the page
+Quote Post
NuLL
post
Post #9





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


  1. <?php
  2. $size=0;
  3. foreach(glob('katalog/*.*) as $f)) $size+=filesize($f);
  4. echo $size;
  5. ?>
snitch.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
nitro18
post
Post #10





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

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


Dziękuję, dziękuję.

Dzięki za skrypt revyag. Przeczytałem dodatkowo w manualu o SPL i stworzyłęm krócej liczenie plików i katalogów.

A oto efekt mojej pracy, manager plików

+ wyświetla ikonki dla 169 rodzajów plików
+ podgląd pliku dla 17 rozszerzeń
+ łatwe tworzenie folderu w aktualnym folderze którym jesteś
+ usuwasz folder -> usuwasz automatycznie od razu pliki i foldery które są w nim
+ upload do 5 plików, rozmiar pliku dyktuje serwer

Zobaczcie, spróbujcie, oceńcie.
Go to the top of the page
+Quote Post
Turgon
post
Post #11





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


http://www.eip.ovh.org/browser/?dir=/jarek/../../../
Zabezpiecz to biggrin.gif


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
nitro18
post
Post #12





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

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


poprawiony. sprawdź. jeszcze jakieś błędy?
Go to the top of the page
+Quote Post
Spirit86
post
Post #13





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


no jasne, wgrywanie plików, wgrałem sobie plik php panie Jarku M....

Ten post edytował Spirit86 31.01.2007, 23:21:32


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
nitro18
post
Post #14





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

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


dodano funkcję sprawdzającą czy rozszerzenie pliku któy ma być wysłany na serwer jest na liście zakazanej biggrin.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 Aktualny czas: 20.08.2025 - 13:54