Artykuły w kategorii PHP

Razem artykułów: 20

Wednesday
7
April
autor:
Mateusz Tymek
kategorie:

Wydajność Zend Framework - cz. 1

Wiele osób sądzi że Zend Framework jest jednym z najmniej wydajnych rozwiązań tego typu.Tworząc aplikację bazującą na frameworku szybko zauważymy, że działa ona dużo wolniej niż odpowiednik napisany w czystym PHP. Czy powinniśmy się tym przejmować?
Im bardziej rozbudowany projekt, tym proporcjonalnie mniejszy narzut wynikający z zastosowania biblioteki. W większych aplikacjach problemem nie jest framework, lecz (najczęściej) baza danych.

Mimo tego, warto wiedzieć co ma wpływ na tak niską wydajność. A także to, że niewielkim kosztem można ją poprawić.
Dzisiejszy wpis to pierwsza część krótkiej serii artykułów o wydajności frameworku. Zaczniemy od podstaw - pokażę kilka sposobów na pomiar prędkości.

czytaj dalej »

Tagi: apache benchmark, wydajność
Wednesday
19
May
autor:
Mateusz Tymek
kategorie:

Przykład zastosowania Zend_Auth i Zend_Acl - cz. 2

W poprzednim wpisie pokazałem jak można zastosować Zend_Auth do obsługi uwierzytelniania. Dzisiaj przykładowa aplikacja zostanie wzbogacona o kontrolę dostępu użytkowników, zrealizowaną z wykorzystaniem Zend_Acl.

czytaj dalej »

Tagi: zend_acl, zend_tool, autoryzacja
Sunday
16
May
autor:
Mateusz Tymek
kategorie:

Przykład zastosowania Zend_Auth i Zend_Acl - cz. 1

Uwierzytelnianie i autoryzacja w Zend Framework: Zend_Auth i Zend_AclW artykule przedstawię "przepis" na zbudowanie prostej aplikacji wykorzystującej Zend_Auth do logowania, oraz - w drugiej części - Zend_Acl do kontroli dostępu użytkowników.

czytaj dalej »

Tagi: zend_auth, zend_tool, zend_form, zend_acl, uwierzytelnianie
Wednesday
17
February
autor:
Mateusz Tymek
kategorie:

Zend_Mail: wysyłanie poczty w Zend Framework

Zend_Mail: wysyłanie poczty z załącznikami w Zend Framework

Wysyłanie poczty w czystym PHP nigdy nie należało do przyjemności. Funkcja mail() może i sprawdza się gdy chcemy wysłać krótką wiadomość tekstową do jednego odbiorcy, jednak zawodzi w bardziej skomplikowanych zastosowaniach. Wyobraźmy sobie wysyłanie listu z dołączonym plikiem PDF i kilkoma obrazkami wplecionymi w treść. Bez jakiejś dodatkowej biblioteki musielibyśmy utworzyć całą wiadomość ręcznie (przykład). Na szczęście programiści Zenda przygotowali dosyć dobrą klasę którą możemy łatwo wykorzystać w naszej aplikacji: Zend_Mail. W tym tekście pokażę przykłady zastosowania tej klasy. Oprócz tego, zaprezentuję prosty sposób na testowanie wysyłania wiadomości przy pomocy własnego transportu.

czytaj dalej »

Tagi: zend_mail, poczta elektoniczna
Sunday
31
January
autor:
Mateusz Tymek
kategorie:

Zend_Form: walidacja rozbudowanych formularzy

Walidacja rozbudowanych formularzy

Tworząc formularze przy użyciu Zend_From możemy szybko dojść do sytuacji gdzie  standardowy zestaw walidatorów nie spełni naszych potrzeb. Najlepszy przykład to formularz rejestracji i sprawdzanie czy pola "hasło" oraz "powtórz hasło" zawierają identyczne wartości. Albo formularz w którym opisujemy jakieś wydarzenie i wprowadzamy dwie daty: rozpoczęcia i zakończenia. Jak sprawdzić czy pierwsza z dat poprzedza drugą? W takich sytuacjach najczęściej spotykaną sugestią jest "napisz własny walidator". Otóż wbrew pozorom takie rozwiązanie jest skomplikowane i niezbyt przejrzyste. Wynika to z założenia że walidator ma sprawdzać poprawność tylko jednego pola. "Zgodność haseł" czy "poprawna kolejność dat" nie są cechami jednego pola, a raczej całego formularza. Zatem bardziej logiczne wydaje się być rozwiązanie w którym to sam formularz (a nie poszczególne elementy) zajmie się walidacją.

czytaj dalej »

Tagi: zend_framework, zend_form
Saturday
23
January
autor:
Mateusz Tymek
kategorie:

Zend Framework i Doctrine - łatwa integracja

Walidacja rozbudowanych formularzy

Ostatnio zainteresowałem się możliwością zastosowania Doctrine'a w jednym z moich projektów. Znalazłem wiele informacji na ten temat w internecie, niestety w większości zdezaktualizowanych. Okazało się że z wersji na wersję twórcy Doctrine coraz bardziej ułatwiają życie koderom piszącym w ZF. Aktualny przepis znalazłem na stronie ZendCasts. Podczas prób okazało się, że można to wszystko zrobić jeszcze prościej niż proponuje autor, zatem w tym wpisie podam własny przepis, przetestowany z Doctrine 1.2.1 i Zend-em 1.10 beta (1.9 też powinien działać).

czytaj dalej »

Tagi: doctrine, modelowanie
Saturday
28
November
autor:
Mateusz Tymek
kategorie:

Usuwanie niepotrzebnych znaków z kodu HTML

Prostym sposobem na ograniczenie transferu jest usunięcie niepotrzebnych białych znaków i komentarzy z kodu HTML. W dokumentacji funkcji ob_start znajduje się bardzo ładny przykład, który możemy przystosować do współpracy z naszą aplikacją.

Dla aplikacji opartej o Zend Framework najlepiej będzie umieścić ten kod w pluginie kontrolera, w metodzie dispatchLoopShutdown().

czytaj dalej »

Tagi: html, zend_controller_plugin, tidy
Tuesday
17
November
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Drzewko katalogów oparte na jsTree i SPL

Czasem aplikacja wymaga aby zaprezentować użytkownikowi drzewko  odzwierciedlające strukturę katalogów na serwerze. Zaprezentuję więc przykładowe rozwiązanie, oparte na jsTree (wyświetli drzewko po stronie klienta) oraz klasie DirectoryIterator z biblioteki SPL (wygeneruje drzewko po stronie serwera).

czytaj dalej »

Tagi: jstree, jquery, spl
Friday
11
September
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Zend_Form i wysyłanie plików - cz. 3

Oto trzeci artykuł dotyczący wysłania plików na serwer przy użyciu komponentu Zend_Form. Tym razem pokażę jak wyświetlić użytkownikowi pasek postępu.

Pasek nie zadziała przy standardowej konfiguracji PHP. Wymagane jest jedno z dwóch rozszerzeń: APC lub uploadprogress. Zend Framework automatycznie wykryje które z nich jest dostępne i użyje go.

Założenia

Chcemy uzyskać prosty pasek pokazujący postęp wysyłania pliku w tle. Niech strona w określonym odstępie czasu (np 1/10 sekundy) wysyła zapytania do serwera, który zwróci żądaną informację.

Podobnie jak w poprzednim artykule przedstawione rozwiązanie musi być elastyczne - niech zadziała także gdy serwer nie obsługuje paska postępu lub gdy użytkownik wyłączy obsługę Java Script.

Podstawą będzie aplikacja napisana w poprzednim artykule.

czytaj dalej »

Tagi: zend_form, wysyłanie plików, jquery, apc, pasek postępu
Wednesday
11
February
autor:
Mateusz Tymek
kategorie:

Przyśpieszyć Zend_Captcha_Image

Ogromną wadą komponentu Zend_Captcha_Image jest jego niska wydajność. Główną przyczyną jest użycie biblioteki GD i czystego PHP do utworzenia i zdeformowania obrazka. Jak obejść ten problem?

Interesującym rozwiązaniem będzie zastosowanie ImageMagick. Rozszerzenie to dostarcza zestaw klas manipulujących obrazkami, a bogaty zestaw funkcji pozwoli na uzyskanie efektu podobnego do Zend_Captcha_Image. Ta ostatnia klasa zostanie wykorzystana jako baza, co bardzo ułatwi proces kodowania.

czytaj dalej »

Tagi: zend_captcha, zend_form, imagick
Saturday
31
October
autor:
Mateusz Tymek
kategorie:

Zend_Navigation: menu z ikonkami

Zend Framework pozwala na łatwe wyświetlenie systemu nawigacji przy pomocy helpera Zend_View_Helper_Navigation_Menu:

<?php echo $this->navigation()->menu(); ?>

Zgodnie z tym co możemy wyczytać w manualu, powyższy kod wygeneruje menu oparte na tagach <ul> i <li>. W jaki sposób otrzymać coś bardziej skomplikowanego, na przykład menu z ikonami przy każdej pozycji?

czytaj dalej »

Tagi: ikony, zend_navigation
Saturday
31
October
autor:
Mateusz Tymek
kategoria:
brak komentarzy skomentuj

Usuwanie znaków diakrytycznych

Polskie znaki diakrytyczne (akcentowane) potrafią przysporzyć spoko kłopotu podczas tworzenia aplikacji internetowych. Upowszechnienie standardu UTF-8 pozwoliło rozwiązać pewne problemy, jednak nie wszystko poprawnie obsługuje to kodowanie. W niektórych przypadkach (nazwy plików na serwerze, przyjazne URL-e...) lepiej sprawdzają się nazwy składające się wyłącznie z liter z alfabetu łacińskiego. W jaki sposób najlepiej zamienić polskie znaki (ą, ć, ę...) na ich łacińskie odpowiedniki (a, c, e...)? Sposobów jest co najmniej kilka.

czytaj dalej »

Tagi: typografia
Thursday
10
December
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Osadzanie filmów z YouTube i DailyMotion

Logo YouTubeWitam ponownie po nieco długiej, wakacyjnej przerwie. Dzisiaj przedstawiam kod który pozwoli łatwo i szybko osadzić na naszej stronie filmik z serwisów YouTube czy DailyMotion (jednocześnie bardzo łatwo można go rozszerzyć o inne strony hostujące wideo).

Problem można podejść na kilka sposobów jednak najbardziej elegancki to napisanie pomocnika widoku (Zend_View_Helper_*).

czytaj dalej »

Tagi: youtube, dailymotion, zend_view
Thursday
7
May
autor:
Mateusz Tymek
kategorie:

Zend_Navigation: przyjazne linki

Wyobraźmy sobie następujący kontroler:

class UserController extends Zend_Controller_Action
{
    public function loginAction()
    {
        (...)
    }

    public function registerAction()
    {
        (...)
    }
}

Chcielibyśmy aby użytkownik miał dostęp do tych akcji po wpisaniu "przyjaznych" adresów: domena.com/logowanie i domena.com/rejestracja. Jak uzyskać takie nazwy? Można zmienić nazwę kontrolera i akcji, można też dodać trasy statyczne (Zend_Controller_Router_Route_Static). Są to mało elastyczne rozwiązania, które można zastosować jedynie w prostych aplikacjach. Lepsza metoda to odpowiednie wykorzystanie komponentu Zend_Navigation, dostępnego w ZF począwszy od wersji 1.8.

czytaj dalej »

Tagi: zend_navigation, przyjazne linki
Tuesday
7
April
autor:
Mateusz Tymek
kategorie:

Zend_Auth - uwierzytelnianie w Zend Framework

Tak jak obiecałem poprzednio, w tym artykule zaprezentuję działanie Zend_Auth na kilku przykładach.

Zend_Auth umożliwia programiście trzy podstawowe działania: sprawdzanie czy użytkownik podał właściwy login i hasło (uwierzytelnianie), sprawdzenie czy w danej chwili użytkownik jest zalogowany ("czy posiada tożsamość") oraz wylogowanie użytkownika ("wyczyszczenie tożsamości").

czytaj dalej »

Tagi: zend_auth, uwierzytelnianie
Friday
19
June
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Uwierzytelnianie i autoryzacja w Zend Framework

Zend Framework jest bardzo elastycznym narzędziem, dlatego nie narzuca konkretnej metody zarządzania użytkownikami. W zamian oferuje dwa komponenty - Zend_Auth i Zend_Acl - które musimy jakoś połączyć z naszą aplikacją. Może to sprawiać problemy początkującym, gdyż dokumentacja rzuca ich od razu na głęboką wodę, a w internecie nie można znaleźć zbyt wielu przykładów. Sam potrzebowałem sporo czasu aby zrozumieć i opanować te zagadnienia.

czytaj dalej »

Tagi: uwierzytelnianie, autoryzacja, zend_acl, zend_auth
Monday
6
July
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Zend_Gdata_YouTube, ZF 1.8.2 - brak wstecznej kompatybilności

Ostatnio w pewnym projekcie uaktualniłem Zend Framework do wersji 1.8.2 i zostałem niemile zaskoczony. Projekt wyszukuje filmiki z YouTube, wykorzystując do tego komponent Zend_Gdata. Po aktualizacji przestał działać.

 

Dokumentacja ZF zawiera mniej więcej taki przykład wyszukiwania filmów:

 

$yt = new Zend_Gdata_YouTube();
$query = $yt->newVideoQuery();
$query->videoQuery = 'tytuł filmiku';
$videoFeed = $yt->getVideoFeed($query);

Niestety od wersji 1.8.2 ten kod nie jest poprawny i generuje wyjątek. Przykład w manualu nie został zmieniony, a informacja o wydaniu nic nie wspomina o zmianach w Zend_Gdata.  Na szczęście problem jest prosty do rozwiązania.

czytaj dalej »

Tagi: zgodność, wydania, zend_gdata_youtube
Friday
15
May
autor:
Mateusz Tymek
kategorie:

Zend_Form i wysyłanie plików - cz. 2

W poprzednim artykule zaprezentowałem wysyłanie plików z formularza opartego o komponent Zend_Form. Teraz tamten przykład zostanie wzbogacony o możliwość wysyłania w tle przy pomocy JavaScript-u i biblioteki jQuery.

Plan

Ze względów bezpieczeństwa interpreter JavaScript nie ma dostępu do systemu plików, zatem nie może brać bezpośredniego udziału w przesyłaniu. Transfer plików w tle można zrealizować przy pomocy małej sztuczki: formularz z plikiem może być przesłany poprzez niewidoczną ramkę (IFRAME). Po zakończeniu procesu serwer zwróci kod JavaScript który poinformuje użytkownika o sukcesie operacji (lub o ewentualnym niepowodzeniu).

czytaj dalej »

Tagi: wysyłanie plików, jquery, zend_form
Saturday
5
December
autor:
Mateusz Tymek
kategorie:
brak komentarzy skomentuj

Zend_Form i wysyłanie plików

Temat wysyłania plików był już przeze mnie poruszany wcześniej, jednak myślę że teraz warto do niego powrócić. Tym razem zagadnienie zostanie opisane w cyklu czterech artykułów. Pierwszy przedstawi prosty przykład tradycyjnego, synchronicznego wysyłania plików. Drugi zaprezentuje wysyłanie w tle, a trzeci - pasek postępu oparty na rozszerzeniu APC. W ostatnim pokażę jak zintegrować wysyłanie z klasami MVC Zenda.

Zapraszam na część pierwszą.

czytaj dalej »

Tagi: zend_form, wysyłanie plików
Monday
5
October
autor:
Mateusz Tymek
kategorie:

Chmura tagów w Zend Framework

Wraz z pojawieniem się wersji 1.8 frameworka jego autorzy udostępnili nowy komponent: chmurę tagów (Zend_Tag_Cloud). Po bliższym zapoznaniu się z dokumentacją okazało się że jej możliwości ograniczone są do wyświetlania chmury na podstawie określonych dekoratorów. Programista sam musi połączyć ten komponent z modelem danych. Postaram się zaprezentować sposób jaki wykorzystałem w swoim blogu.

czytaj dalej »

Tagi: zend_tag_cloud, modelowanie