Artykuły w kategorii PHP
Razem artykułów: 20
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ść
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
W 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

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

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

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

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

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
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
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
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
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
Witam 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
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

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

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
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

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
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

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