fileUpload - nowy projekt
Pod tą oryginalną nazwą kryje się zestaw klas przeznaczony do obsługi uploadu plików na serwer. Posiadają one jednak warte uwagi cechy, które zainteresują osoby o orientacji obiektowej.
Najnowsza wersja - fileUpload 1.2
Duży nacisk położyłem na na odseparowanie obsługi uploadu po stronie serwera, bo nie mogłem już patrzeć na źle zaprojektowane skrypty, których użycie wymaga za każdym razem osobnej implementacji całej klasy i oczyszczenia jej z naleciałości poprzedniego projektu.
Wiele przykładów w internecie sprowadza się do prostego skryptu.
To oczywiście marna implementacja, pewnie trzeba by dodać sprawdzenie rozszerzenia, czy typu mime pliku. Problem w tym, że lwia część programistów wstawi po prostu kolejny if else do istniejącego kodu i efekt ich zadowoli. Mnie nie. Sięgnąłem do osławionych phpclasses.org i ściągnąłem pierwszy z brzegu projekt
Idealny wręcz przykład kodu, który nie dość, że jest w php4, to jest do odstrzału, bo ktoś pomyślał, że fajnie jest wyprawadzać pochodne dla określonych typów plików. image_upload, video_upload... imageANDvideo_upload i jeszcze dorzucił skalowanie obrazków, jak na promocji w supermarkecie.
Aby uniknąć takich pułapek postanowiłem rozdzielić funkcje pomocnicze, od tych, które są bezpośrednio związane z obsługą uploadu.
Pierwszą rzeczą, którą trzeba było ujednolicić, to tablica $_FILES, która ma zmienną strukturę. Inną, jeśli uploadujemy jeden plik i inną gdy wysyłamy więcej plików. Stąd już tylko krok do obiektu FILES. Taki obiekt ma wiele zalet, ale to głównych należy możliwość iterowania jego elementów, która z kolei jak po sznurku prowadzi nas do FilterItaratora.
Prosty FilterIterator, który przepuszcza tylko pliki o zadanym rozszerzeniu.
Teraz dopiero można myśleć o obrazkach. (pociąłem trochę komentarze)
Specjalnie nie rozszerzyłem klasy extensionUploadFilter, bo sprawdzenie, czy obrazek jest obrazkiem dokonujemy również na podstawie mime-type. Dlatego kompozycja sprawdza się w takim wypadku dużo lepiej od dziedziczenia. Wystarczy napisać klasę filtrującą typ mime, konstruktor wypsażyć w dodatkową linijke kodu.
Mój fileUpload posiada jeszcze wiele wad i wiele funkcji ne zostało zaimplementowanych, ale jego projekt zdaje się być dobry, zwłaszcza, że poważnie myślę o napisaniu fasady dla mojego frameworka, która dodatkowo umożliwi konfigurację działania uploadu w plikah ini, xml, czy yaml. Stawiam na częste wydawanie nowych wersji które pojawią się w tym katalogu
Najnowsza wersja - fileUpload 1.2
Duży nacisk położyłem na na odseparowanie obsługi uploadu po stronie serwera, bo nie mogłem już patrzeć na źle zaprojektowane skrypty, których użycie wymaga za każdym razem osobnej implementacji całej klasy i oczyszczenia jej z naleciałości poprzedniego projektu.
Wiele przykładów w internecie sprowadza się do prostego skryptu.
12345678910 |
<?php
|
To oczywiście marna implementacja, pewnie trzeba by dodać sprawdzenie rozszerzenia, czy typu mime pliku. Problem w tym, że lwia część programistów wstawi po prostu kolejny if else do istniejącego kodu i efekt ich zadowoli. Mnie nie. Sięgnąłem do osławionych phpclasses.org i ściągnąłem pierwszy z brzegu projekt
123456789101112131415161718 |
<?php
|
Idealny wręcz przykład kodu, który nie dość, że jest w php4, to jest do odstrzału, bo ktoś pomyślał, że fajnie jest wyprawadzać pochodne dla określonych typów plików. image_upload, video_upload... imageANDvideo_upload i jeszcze dorzucił skalowanie obrazków, jak na promocji w supermarkecie.
Aby uniknąć takich pułapek postanowiłem rozdzielić funkcje pomocnicze, od tych, które są bezpośrednio związane z obsługą uploadu.
Pierwszą rzeczą, którą trzeba było ujednolicić, to tablica $_FILES, która ma zmienną strukturę. Inną, jeśli uploadujemy jeden plik i inną gdy wysyłamy więcej plików. Stąd już tylko krok do obiektu FILES. Taki obiekt ma wiele zalet, ale to głównych należy możliwość iterowania jego elementów, która z kolei jak po sznurku prowadzi nas do FilterItaratora.
Prosty FilterIterator, który przepuszcza tylko pliki o zadanym rozszerzeniu.
1234567891011121314151617181920212223242526272829303132333435363738 |
<?php
|
Teraz dopiero można myśleć o obrazkach. (pociąłem trochę komentarze)
12345678910111213141516171819202122 |
<?php
|
Specjalnie nie rozszerzyłem klasy extensionUploadFilter, bo sprawdzenie, czy obrazek jest obrazkiem dokonujemy również na podstawie mime-type. Dlatego kompozycja sprawdza się w takim wypadku dużo lepiej od dziedziczenia. Wystarczy napisać klasę filtrującą typ mime, konstruktor wypsażyć w dodatkową linijke kodu.
123456789 |
<?php
|
Mój fileUpload posiada jeszcze wiele wad i wiele funkcji ne zostało zaimplementowanych, ale jego projekt zdaje się być dobry, zwłaszcza, że poważnie myślę o napisaniu fasady dla mojego frameworka, która dodatkowo umożliwi konfigurację działania uploadu w plikah ini, xml, czy yaml. Stawiam na częste wydawanie nowych wersji które pojawią się w tym katalogu


Ale ostatecznie to i tak jest kwestia gustu.
Kiedy można się tego przykładu spodziewać?