Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Pierwszy skrypt w OOP
SN@JPER^
post 10.01.2010, 18:38:38
Post #1





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Witam, mój pierwszy skrypt, klasa...

Dobrze załapałem póki co programowanie obiektowe? Jakie błędy robie? Co poprawić?

  1. class UploadFiles{
  2. private $file;
  3. private $dir;
  4. private $mime = array('image/jpeg', 'image/gif', 'image/png');
  5. private $chmod=777;
  6.  
  7. public function saveFile($fileName, $dir) {
  8. $this->file=$_FILES[$fileName];
  9. $this->dir=$dir.'/'.$this->file['name'];
  10.  
  11. if(isset($_FILES[$fileName])){
  12.  
  13. if($this->file['error']==0){
  14. if(is_uploaded_file($this->file['tmp_name'])){
  15. if(in_array($this->file['type'], $this->mime)){
  16. if(move_uploaded_file($this->file['tmp_name'], $this->dir)===true){
  17. chmod($this->dir, $this->chmod);
  18. return true;
  19. }
  20. }else{
  21. //Nieprawidłowy format pliku
  22. }
  23. }
  24. }else{
  25. switch($_FILES[$this->file]['error']){
  26. case 1: /* KOMUNIKAT o przekroczeniu wartości upload_max_filesize*/; break;
  27. case 2: /* KOMUNIKAT o przekroczeniu wartości max_filesize*/; break;
  28. case 3: /* KOMUNIKAT o wysłanym częściowo pliku*/; break;
  29. case 4: /* KOMUNIKAT o nie wysłaniu żadnego pliku*/; break;
  30. }
  31. }
  32. }else{
  33. return false;
  34. }
  35. }
  36.  
  37. }
Go to the top of the page
+Quote Post
Crozin
post 10.01.2010, 18:58:33
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Źle...
1) Cały obiekt składa się wyłącznie z jednej metody, co za tym idzie nie ma sensu korzystać z pól/własności/składowych/jakkolwiek by tego nie nazwać klasy, skoro używane jest to jedynie w kontekście lokalnym
2) Takie sprawdzanie typu mime to o kant d..y rozbić można. _FILES[abc][type] jest ustawiane przez użytkownika, czyli może tam być cokolwiek
3) W PHP istnieją przedefiniowane stałe określające kod błędu
4) Masz takie coś jak wyjątki... dużo lepiej się sprawdza niż zwykłe true/false
5) Nazwa klasy też niezbyt dobrze trafiona.
Go to the top of the page
+Quote Post
darko
post 10.01.2010, 20:06:13
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Dobrze jest, jak na pierwszy skrypt. Nie ma sensu usuwać pól, jak dojdzie jeszcze jakaś metoda, to wtedy się przydadzą. Z tą obsługą błędów to fakt, mógłbyś lepiej to rozwiązać. Właściwie mógłbyś zwracać rezultat move_uploaded_file, przynajmniej byłoby wiadomo czy uploadowano.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
SN@JPER^
post 10.01.2010, 21:17:47
Post #4





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Będzie m.in metoda do nazw plików.

Cytat
2) Takie sprawdzanie typu mime to o kant d..y rozbić można. _FILES[abc][type] jest ustawiane przez użytkownika, czyli może tam być cokolwiek


Co proponujesz?
Go to the top of the page
+Quote Post
Crozin
post 10.01.2010, 22:14:51
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Co proponujesz?
Typ MIME wyciągnąć z pliku dopiero po stronie serwera - a potem (tj.: fragment z in_array()) już tak samo.
Go to the top of the page
+Quote Post
SN@JPER^
post 10.01.2010, 22:32:44
Post #6





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


W takich typu klasach, lepiej użyć __construct czy tak jak w moim przypadku?

Cytat(Crozin @ 10.01.2010, 22:14:51 ) *
Typ MIME wyciągnąć z pliku dopiero po stronie serwera - a potem (tj.: fragment z in_array()) już tak samo.


Czyli po move_uploded_file sprawdzic mime? Jeżeli nie bedzie nieprawidłowy to co wtedy? usunać plik?

Ten post edytował SN@JPER^ 10.01.2010, 22:48:10
Go to the top of the page
+Quote Post
Crozin
post 10.01.2010, 23:18:29
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tak, jeżeli z plikiem jest coś nie tak to usuń go.
Go to the top of the page
+Quote Post
SN@JPER^
post 10.01.2010, 23:45:05
Post #8





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Próbuje użyć funkcji mime_content_type, ale coś nie działa...

na localhost default nie działa, musiałem odznaczyć ";" w extension=php_mime_magic.dll

Po odznaczeniu nic nie wyświetla.
Go to the top of the page
+Quote Post
marcio
post 10.01.2010, 23:55:42
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


TO sprawdzaj rozszerzenie i tyle.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
zegarek84
post 11.01.2010, 00:13:07
Post #10





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(SN@JPER^ @ 10.01.2010, 23:45:05 ) *
Próbuje użyć funkcji mime_content_type, ale coś nie działa...

którą masz wersję php?? - czytaj może co piszą w manualu - te komunikaty:
mime_content_type - a dalej to masz link jakiej funkcji powinieneś użyć jeśli masz php 5.3
finfo_file


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
SN@JPER^
post 11.01.2010, 15:10:05
Post #11





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


No to sie zgadza. mam wersje "PHP Version 5.2.5".

co do tego mime_type, wydaje sie jednak, że sprawdzanie rozszerzenia jest lepszym pomysłem. Co o tym sądzicie?

Troche mnie martwi fakt, ze najpeirw musi z uploadowac plik, sprawdzic mime, jeżeli sie nie zgadza to go usunac(!).

a i jeszcze "5) Nazwa klasy też niezbyt dobrze trafiona." - czemuż to?
Go to the top of the page
+Quote Post
marcio
post 11.01.2010, 18:22:31
Post #12





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
co do tego mime_type, wydaje sie jednak, że sprawdzanie rozszerzenia jest lepszym pomysłem. Co o tym sądzicie?

Troche mnie martwi fakt, ze najpeirw musi z uploadowac plik, sprawdzic mime, jeżeli sie nie zgadza to go usunac(!).


Bo jest to bardziej logiczne i szybsze tym bardziej ze sam sie juz kiedys przejechalem na sprawdzaniu mime plikow bo nie wiedzialem ze poprzez naglowki mozna je zmodyfikowac, i staje sie to "bezpieczne" dopiero wtedy gdy go sprawdzimy jak plik jest juz na srv.



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
SN@JPER^
post 11.01.2010, 19:42:45
Post #13





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


a no chyba, że tak smile.gif
Go to the top of the page
+Quote Post
CapaciousCore
post 11.01.2010, 21:43:06
Post #14





Grupa: Zarejestrowani
Postów: 30
Pomógł: 4
Dołączył: 28.09.2009
Skąd: Chełm

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


A nie lepiej recznie sprawdzac naglowek pliku?


--------------------
WebKrytyk - zobacz jak marnują się Twoje pieniądze w internecie!
Go to the top of the page
+Quote Post
SN@JPER^
post 5.03.2010, 16:18:53
Post #15





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Cytat
A nie lepiej recznie sprawdzac naglowek pliku?

Jak?

Dobra idea tego sprawdzania rozszerzenia?


  1. class Upload{
  2. private $dir;
  3. private $type = array('jpg', 'gif', 'png');
  4. private $chmod = 0777;
  5. private $file;
  6.  
  7. public function __construct($fileName, $dir){
  8. $this->file = $_FILES[$fileName];
  9. $this->dir = $dir;
  10.  
  11. if(isset($this->file)){
  12. $nameFile = $this->createTitle($this->file['name']);
  13. if(!file_exists($this->dir.'/'.$nameFile)){
  14. if(is_uploaded_file($this->file['tmp_name'])){
  15.  
  16. if(move_uploaded_file($this->file['tmp_name'], $this->dir.'/'.$nameFile)){
  17. chmod($this->dir.'/'.$this->file['name'], $this->chmod);
  18.  
  19. $d='';
  20.  
  21. $d = opendir($dir);
  22. while(false !== ($f = readdir($d))) {
  23. if($f == $this->file['name']){
  24. $ex = explode('.', $f);
  25. if(in_array($ex[1], $this->type)){
  26. //wgrano
  27. }else{
  28. if(unlink($this->dir.'/'.$this->file['name'])){
  29. echo 'Zły format pliku!';
  30. }
  31. }
  32. }
  33. }
  34. closedir($d);
  35. }
  36. }
  37. }else{
  38. echo 'Taki plik już istnieje!';
  39. }
  40. }
  41. }
  42.  
  43. private function createTitle($title){
  44. $title = strtolower($title);
  45. $title = str_replace(' ', $this->replacechar, $title);
  46. return $title;
  47. }
  48. }


Ten post edytował SN@JPER^ 5.03.2010, 17:23:45
Go to the top of the page
+Quote Post
Cysiaczek
post 5.03.2010, 18:25:27
Post #16





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Czy możesz napisać, co zamierzałeś zrobić, czyli po co Ci był potrzebny kod? Inaczej mówiąc - co kod miał robić (nie co robi teraz). Własnymi słowami.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
SN@JPER^
post 5.03.2010, 22:42:16
Post #17





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Jak widać u góry dyskutowaliśmy jak sprawdzić rozszerzenie/mimetype. Wielu proponowało, aby sprawdzić rozszerzenie/mimetype po wgraniu pliku na serwer.

Dobrze to rozwiązałem?
Go to the top of the page
+Quote Post
Cysiaczek
post 6.03.2010, 14:10:11
Post #18





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie zrozumiałeś mnie smile.gif
Cytat
Witam, mój pierwszy skrypt, klasa...

Dobrze załapałem póki co programowanie obiektowe? Jakie błędy robie? Co poprawić?


Ja bym chciał, abyś opisał to, co myślałeś zanim zacząłeś pisać kod, który zaprezentowałeś wyżej, bo to istotne.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
SN@JPER^
post 6.03.2010, 18:40:46
Post #19





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Prosty skrypt uploadu obrazów na serwer... Sprawdzanie rozszerzenie/mime etc.
Go to the top of the page
+Quote Post
phpion
post 8.03.2010, 14:17:25
Post #20





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. $ex = explode('.', $f);
  2.  
  3. if(in_array($ex[1], $this->type)){
  4. //wgrano
  5. }

Zabezpieczenie żadne. Przepuści np. plik moje_zdjecia_porno.jpg.exe.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.08.2025 - 12:39