Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja - x katalogów wyżej
el_plecinio
post 29.07.2012, 17:58:29
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.02.2012

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


Witam,
Stworzyłem sobie niedawno funkcje poniżej by móc podlinkowac obrazki z katalogu równoległego tzn dzieki niej mogłem mając strukture folderów:
dir/img
dir/strona1

pobrać obrazki z img do katalogu strona1 bez używania linków bezwzglednych
Prosze o ocenę mojej 1 funkcji.

parametry:
$ilosc - odpowiada za liczbę katalogów wstecz (domyslnie)
$p - (0|1|2) brak|http|https

  1. function cat_back($ilosc=0, $p=1)
  2. {
  3. if ($p==1) {$pro = 'http://';}
  4. else if ($p==2) {$pro = 'https://';}
  5. else if ($p>2 OR $p<1){$pro = '';}
  6. $dir = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
  7. $part = explode('/', $dir);
  8. $i=count($part)-1;
  9. $dirt = '('.$part[$i-$ilosc].'(.*))';
  10. $katalog = preg_replace($dirt,'',$dir);
  11.  
  12. if ($ilosc <$i & $ilosc>=0){return $pro.$katalog;}
  13. else {return 'Blad zmiennej "<i>$ilosc</i>" - wartosc parametru musi byc mniejsza od '.$i;}
  14. }
  15.  
  16. //test
  17. echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'<br>';
  18. echo cat_back().'<br>';
  19. echo cat_back(3).'<br>';
  20. echo cat_back(2).'<br><br>';
  21. echo cat_back(1,0).'<br>';
  22. echo cat_back(1,1).'<br>';
  23. echo cat_back(1,2).'<br>';
  24. echo cat_back(-1).'<br>';


Ten post edytował el_plecinio 29.07.2012, 17:59:45
Go to the top of the page
+Quote Post
ethann
post 30.07.2012, 08:40:27
Post #2





Grupa: Zarejestrowani
Postów: 56
Pomógł: 18
Dołączył: 7.04.2012

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


Małe zmiany z mojej strony.

  1. function cat_back($ilosc=0, $p=1)
  2. {
  3. $ilosc = intval($ilosc);
  4.  
  5. if ($p==1) $pro = 'http://';
  6. else if ($p==2) $pro = 'https://';
  7. else $pro = '';
  8.  
  9.  
  10. $dir = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
  11. $part = explode('/', $dir);
  12. $i = count($part)-1;
  13.  
  14.  
  15. if ($ilosc < $i && $ilosc >= 0) {
  16. $dirt = '('.$part[$i-$ilosc].'(.*))';
  17.  
  18. $katalog = preg_replace($dirt, '', $dir);
  19. return $pro.$katalog;
  20. }
  21. else {
  22. echo 'Blad zmiennej "<i>$ilosc</i>" - wartosc parametru musi byc nieujemna i mniejsza od '.$i;
  23. return false;
  24. }
  25.  
  26. }


Na samym początku konwersja zmiennej $ilosc na int, aby uniknąć błędów z nieporządanym numerem indeksu.
  1. $ilosc = intval($ilosc);




Skoro rozpatrujesz przypadek kiedy $p = 1, oraz $p = 2, a następnie dla każdego innego $p wartość $pro ma być '', wtedy zrób po prostu else.
  1. if ($p==1) {$pro = 'http://';}
  2. else if ($p==2) {$pro = 'https://';}
  3. else if ($p>2 OR $p<1){$pro = '';}
  4.  
  5. ->
  6.  
  7. if ($p==1) $pro = 'http://';
  8. else if ($p==2) $pro = 'https://';
  9. else $pro = '';



Aby uniknąć ostrzeżeń interpretera (nieistniejące indeksy tablicy $part), te dwie linijki powinny znaleźć się już wewnątrz warunku, który potwierdza poprawność danych.
  1. $dirt = '('.$part[$i-$ilosc].'(.*))';
  2. $katalog = preg_replace($dirt,'',$dir);



W przypadku błędu proponuję zwrócić false, który będzie sygnałem braku poprawności zakończenia funkcji i ewentualne wyświetlenie komunikatu.
  1. else {
  2. echo 'Blad zmiennej "<i>$ilosc</i>" - wartosc parametru musi byc nieujemna i mniejsza od '.$i;
  3. return false;
  4. }


Zamiast pojedynczego ampersanda w warunkach, korzystaj z podwójnego.
Go to the top of the page
+Quote Post
el_plecinio
post 30.07.2012, 09:23:04
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 28.02.2012

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


Dzięki za wskazówki wink.gif dopiero sie ucze 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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 20:02