Autor wpisu: Athlan, dodany: 25.01.2007 21:51, tagi: php
Czasem potrzebujemy zabezpieczyć nasz skrypt autoryzacją. Kiedyś pisałem już o zabezpieczeniu autoryzacją po stronie serwera, jednak wymagało to nałożenia hasła na dany folder. Jest jakaś możliwość autoryzacji na dany plik? Odpowiedz brzmi: „tak”, ale musi on wysłać odpowiednie nagłówki.
Zanim przejdziemy do daleszej części artykułu zapoznajmy się z teorią. Aby zabezpieczyć nasz plik, należy wysłać request do serwera „WWW-Authenticate”, który umożliwi nam wprowadzenie danych. Jak przesłać? Tak jak inne dane do serwera np o kodowaniu, czy MIME… header(): header(’WWW-Authenticate: Basic realm=”Protected area!”‘); w miejsce realm=”” wpisujemy tekst, który pojawi się jako „etykieta” logowania, czyli komunikat, tak jak przedstawiłem na poniższym screenie:
Następnym nagłówkiem z jakim trzeba się zapoznać to wysłanie takiego żądania, aby uznał plik jako nieważny (no authorization), przykładem takiego pliku jakst folder, do którego nie mamy dostępu, wyświetla się komunikat 403 Forbidden. Takim samym sposobem zabezpieczymy nasz plik: header(’HTTP/1.0 401 Unauthorized’);
Ok, potrafimy odciąć autoryzację, wyświetlić okno logowania… i na tym się kończy. Aby w pełni wykorzystać autoryzację musimy jakoś przechwycić dane z logowania. Okazuje się, że są one wysyłane do tablicy $_SERVER pod kluczami „PHP_AUTH_USER” dla nazwy użytkownika i „PHP_AUTH_PW” dla hasła. Odzwierciedlając dostęp otrzymujemy: $_SERVER[’PHP_AUTH_USER’] oraz $_SERVER[’PHP_AUTH_PW’].
Przejdźmy do praktyki, nadajemy konkretne haslo i login, który wymagamy zanim zaczniemy wykonywać jakikolwiek kod…
Autor wpisu: Athlan, dodany: 20.01.2007 09:08, tagi: php, framework
Wprawdzie mój framewoek ma jak widać finalny układ plików, ale zaczyna mnie gryźć… przed startupem cały core jest skanowany, dzięki czemu mogę rzucać sobie klasy w katalogu core gdzie popadnie, moge stworzyć 5 folderów i potem dać klase. Mnie się on coraz to mniej podoba. Ostatnio przeglądałem Zend Framework dziesiąty raz, postanowiłem zebrać w kupę plusy i minusy mojego sposobu oraz sposobu wykorzystamyn w Zendzie.
Układ plików w Vframe:
(+) skanowanie core zapewnia porządek i elastyczność, mogę rzucić klasę gdzie popadnie (+) stosowanie nazw klas jest niezależne od ich położenia (-) czas działania nieznacznie się wydłuża
Układ plików w Zend Framework:
(+) nie trzeba skoanować core (-) nazwy klas są ściśle uzależnione od ich położenia (-) robi się mase folderów, w ktorych jest zazwyczaj po jednym pliku
Mimo tego, że moim zdaniem Zend ma więcej minusów przeze mnie wykrytych, jestem mu jakoś bardzie przychylny. Nie podoba mi się nazwa typu Zend_Folder_Klasa. Nie mam symapatii do „dolnych podkreśników”. Wymyśliłem sobie, że w moim fw mogę zastosować inny sposób oddzielania ukladu pliku w nazwie klasy. Odpowiednikiem Zend_Folder_Klasa byłoby wówczas VfolderKlasa lub VfolderPodfolderKlasa, lub po prostu Vklasa. Aby nie robić bałaganu, wszystkie wyjątli miałyby nazwę np. VexceptionCache, dzięki czemu nie tworze nowego folderu Cache, w którym jest tylko wyjątek. Tak to mam jeden folder z wyjątkami. To samo tyczy się interfejsów. Nazwa nie byłaby oddzielana podkreślnikiem, tylko kolejną wielką literą.
Autor wpisu: WojciechNaruniec, dodany: 20.01.2007 01:22, tagi: php, framework
Autor wpisu: Athlan, dodany: 17.01.2007 17:16, tagi: php
Ostatnio przeglądałem forum.php.pl i znalazłem kilka postów, które dały mi do zrozumienia, że część społeczności nie potrafi używać, lub w ogóle nie wie czym jest singleton. Jakoże staram się pomagać bliskim mi w mojej branży ludziom o ile pozwala mi na to czas i ohota, postaram się wyjaśnić prostymi słowami czym jest i jak uzywać singletona. W artykule poruszone jest wiele problemów, np dziedziczenie songletona wraz z przedstawianymi rezultatami działań (unikatowe identyfikatory instacji klas). Przedstawiłem wzorzec registry, zapraszam do lektury.
1. Czym jest singleton – teoria
Singleton to pojedyncza instacja klasy, mówiąc szerzej: dostępna w obrębie całej aplikacji w postaci jednego egemplarza, aby nie tworzyć cały czas nowej kopii obiektu operatorem new i korzystać z nej tak, jak ze zwykłej klasy (a nie z metod statycznych). Cały singleton opiera się na tym, że klasa przechowuje instancję samej siebie w prywatnym statycznym atrybucie, który jest tworzony i pobieranie w metodzie statycznej zastępującej konstruktor. No właśnie... jak zablokować nasz konstruktor, aby nie można było posłużyć się klasą poprzez operator z zewnątrz metody uruchamiającej ową instancję. Jeżeli klasa nie będzie dziedziczona, metodzie konstrukcyjnej nadajemy prawa dostępu na „private”, lub jeżeli chcemy dziedziczyć klasę „protected”.
Dobrze zablokowaliśmy dostęp do klasy, teraz trzeba jakoś przechować obiekt i wywołać go. Do przechowania instancji klasy będzie służył jej wbudowany mechanizm polegający na zapisie egzemplarza do własnego prywatnego/chronionego atrybutu i wywołaniu przez metodę statyczną klasy zwracającą ową instancję. Zapoznamy się ze słowem kluczowym „instanceof”, który sprawdza, czy obiekt jest instacnją danej klasy.
2. Piszemy singleton niedziedziczony i dziedziczony - praktyka
Teorię znamy, czas na przyklad. Napiszemy klasę HelloWorld, która wykona songletona sama siebie:
Autor wpisu: Athlan, dodany: 03.01.2007 18:07, tagi: framework, php
Dziś chciałbym zaprezentować framework, ktory zbudowałem i opieram na nim swoje aplikacje. Jest stale rozwijany, nie ukryję że może spotkać się z gorzkimi słowami krytyki, ale też słodkimi pochwały. Przygotowałem prawie pełną dokumentację, która umieszczona jest na stonie domowej frameworka:
Wraz z działem download oraz manualem na stronie na bieżąco będę publikował przykłady użycia jakiś komponentów, na dzisiejszy czas są to: upload pliku, caching działania zapytania do bazy danych oraz zmniejszenie pliku graficznego. Najlepszym przykładem będzie aplikacja napisana na frameworku, dlatego zmieściłem kod swojego portfolio http://www.vgroup.pl. Repozytorium plików możecie znaleźć pod adresem http://source.vgroup.pl
Download frameworka oraz przykładowego szkieletu katalogów aplikacji: http://framework.vgroup.pl/download.html
Instalacja: http://framework.vgroup.pl/read-instalacja.html
Repozytorium plików frameworka wraz z podstawowymi bibliotekami (mojego autorstwa): http://framework.vgroup.pl/repository.html
Autor wpisu: Athlan, dodany: 27.12.2006 15:20, tagi: framework, php
Kiedyś napisałem klasę ModRewriteString, którą opublikowałem na łamach forum.php.pl, która ma sprowadzić polskie, niemieckie i czeskie znaki do zwykłych liter, na przykład ą do a, ż i ź do z, itd. Na potrzeby jednego z moich projektów (portalu) została ona użyta na kodowaniu UTF-8. Okazało się, że klasa akceptuje tylko kodowania WINDOWS-1250 i ISO 8859-2. Ze znaków zakodowanych przez UTF robił się znak nieodczytywalny, potocznie zwany "krzak". Problem został oznaczony jako bug najwyższego stopnia, klasa trafiła natychmiastowo do analizy. Z pomocą przyszła dokumentacja na temat Multibyte String Functions (rozdział LXXXV) dostępna w podstawowych rozdziałach oficjalnej dokumentacji języka PHP: http://pl2.php.net/manual/pl/ref.mbstring.php Ponadto cały dokument z klasą był zakodowany w formie ASCII, co jest niedorzeczne w tego typu działaniach. Plik zawierający klasę został ujęty w formie UTF-8 - uniwersalnego kodowania, które można bez problemu odkowodać.
Zmiany objęły tylko metodę Rewrite(), przyjmuje ona dodatkowy, nieobowiązkowy drugi parametr, który ustawia tryb pracy klasy na podane kodowanie. Gdy parametru nie podamy, lub otrzyma wartość null, wówczas kodowanie zostanie ustawione automatycznię poprzez analizę podanego ciągu znaków przez funkcję mb_detect_encoding(). Kodowanie jest o tyle ważnym elementem, gdyż zostaje podane wewnątrz klasy w funkcjach mb_strtolower() oraz mb_strlen(), odpowiedzialnych za poprawne wykonanie zadania metody.
Dodana została linijka odpowiedzialna za przerwania działania klasy juz na samym początku. Sprawdzane zostaje załadowane rozszerzenie "mbstring", odpowiedzalne za Multibyte String Functions. Gdy rozszerzenie nie zostanie załadowane, konstruktor wyrzuca wyjątek pierwotnej klasy Exception:
PLAIN TEXT PHP:- if(!extension_loaded("mbstring"))
- throw new Exception('MbString has not been enabled yet!');
Wersja klasy została oficjalnie uznana za stabilną, nadany jest jej numerek 0.0.5.
Zastosowanie klasy: