Zend Framework 2 – dependent rows and queries with JOIN statement

If you don’t use Doctrine ORM with your Zend Framework, then there is no automation of fetching dependent rows from a database. In Zend1 you had at least findDependentRowset method helping you manage relationships – in Zend2 all queries have to be done on your own.

Czytaj całość...

Nowości, zmiany i nowe funkcje w PHP 5.5 – cz.3: Support for finally in try/catch blocks

Najnowsza wersja języka PHP (czyli 5.5) wprowadza kilka bardzo ciekawych, nowych funkcjonalności. Są nimi:

W trzeciej części przedstawiam kolejną nową funkcjonalność – blok finally przy przechwytywaniu wyjątków.

Czytaj całość...

Nowości, zmiany i nowe funkcje w PHP 5.5 – cz.2: Support for Generators

Najnowsza wersja języka PHP (czyli 5.5) wprowadza kilka bardzo ciekawych, nowych funkcjonalności. Są nimi:

W drugiej części niniejszego wpisu, omówimy kolejną, nową funkcjonalność, czyli Generatory.

Czytaj całość...

Nowości, zmiany i nowe funkcje w PHP 5.5.0 – cz.1: Const array/string dereference

Najnowsza wersja języka PHP (czyli 5.5.0) wprowadza kilka bardzo ciekawych, nowych funkcjonalności. Są nimi:

Postaram się omówić kolejno wszystkie z powyższych zaczynając od pierwszego.

Czytaj całość...

Debugowanie PHP za pomocą Xdebug w trybie CLI na przykładzie XAMPP lub WAMP oraz NetBeans

Nie wszyscy zdają sobie sprawę z tego, że w trybie CLI (czyli wywoływania z poziomu konsoli) można debugować skrypty PHP w równie łatwy sposób, co poprzez zwykłą przeglądarkę internetową. Wystarczy wykonać poniższe kroki, aby udało się to zrealizować bez niej.

Czytaj całość...

Odpowiednik w Java funkcji explode() z języka PHP

W języku PHP istnieje niezwykle przydatna funkcja explode(), która zamienia string na tablicę string’ów dzieląc go w miejscu wystąpienia określonego znaku. Zilustruje to poniższy przykład.

< ?php 
    $sString = ":aaa:111::bbb:";
    print_r( explode(":", $sString) );
?>

Czytaj całość...

Opis i różnica między atakami XSS i CSRF (Cross-site scripting i Cross-site request forgery)

Ataki XSS i CSRF to obok ataku typu SQL Injection, jedne z najbardziej znanych i popularnych ataków na strony WWW. Skuteczność ich działania jest praktycznie 100%, jeżeli chodzi o strony WWW napisane przez amatorów, którzy nie znają się na zabezpieczaniu stron przed atakami, a nie korzystają z Frameworków, które automatycznie takie zabezpieczenia implementują.

Czytaj całość...

PHP APC Tutorial ? cz.4: Upload plików i pasek postępu (file upload progressbar) w PHP+AJAX+APC+jQuery

PHP standardowo nie oferuje możliwości śledzenia postępu w załadowywaniu plików na serwer poprzez formularza HTML. Dzięki rozszerzeniu APC taka możliwość się pojawia. Od razu na początku nadmienię, że nie udało mi się zmusić APC, aby poprawnie współpracowało z uploadem plików na systemie Windows 7 i WAMPie, udało mi się to zrobić, natomiast, na Linuxie (Fedora 15 i LAMPie).

Czytaj całość...

WordPress 301 Moved Permanently Redirection – Błąd HTTP 404 spowodowany zmianą ścieżek do kategorii, a Google SEO

Bardzo łatwo spaść w wynikach wyszukiwania (szczególnie Google), gdy robot sieciowy wykryje jakieś problemy na naszej stronie. Jednym z najczęstszych problemów tego typu są błędy HTTP 404, spowodowane tym, iż zmieniliśmy ścieżki do naszych kategorii w Wordpresie. Żeby to zobrazować – najpierw nasze kategorie były dostępne pod adresami formatu

http://programowanie.opole.pl/category/php

ale zmieniliśmy zdanie i zmieniliśmy je na format typu

http://programowanie.opole.pl/archives/category/php

Czytaj całość...

FirePHP i Firebug oraz błąd Headers already sent… Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive…

FirePHP to dodatkowy moduł dla rozszerzenia Firebug. Umożliwia on logowanie na konsole Firebug informacji prosto z poziomu kodu PHP. Jednakże, podczas korzystania z FirePHP może nas spotkać przykra niespodzianka i zobaczymy błąd postaci:

Fatal error: Uncaught exception ‘Exception’ with message ‘Headers already sent in C:\wamp\www\firephp.php on line 5. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.’ in C:\wamp\www\FirePHPCore\FirePHP.class.php on line 1178

Czytaj całość...

PHP APC Tutorial ? cz.3: User Variable Cache ? Czyli optymalizacja skryptów PHP

W pierwszym odcinku niniejszej serii poznaliśmy się z przeznaczeniem oraz sposobem instalacji APC na platformach Windows oraz Linux. W drugim odcinku poznaliśmy panel administracyjny APC. W tej części zapoznamy się z User Cache, czyli cache’owaniem zmiennych w kodzie skryptów PHP.

Czytaj całość...

PHP APC Tutorial ? cz.2: Panel administracyjny APC ? Czyli optymalizacja stron PHP

W poprzednim artykule z niniejszej serii tutoriali, opisywałem, czym jest APC, do czego jest stosowany oraz, w jaki sposób można zainstalować go na platformach Windows oraz Linux. Teraz czas na drugą część kursu, w której poznamy panel administracyjny APC oraz do jakich informacji daje nam dostęp.

Czytaj całość...

Tutorial PHP 5.4 i PHP 6 – Nowości, zmiany i nowe funkcje – cz. 1

Projekt tworzenia PHP 6 został chwilowo spowolniony w skutek braku porozumienia w niektórych kwestiach autorów języka. Zamiast tego jest rozwijana obecnie wersja PHP 5.4.

Jest ona dostępna pod adresem http://snaps.php.net. Pod tym adresem można różnież znaleźć zrzut trunka SVN, który jest właśnie nieoficjalnym kodem PHP 6.

Kością niezgody z PHP 6 była m.in. obsługa UTF-8 w kodzie. Wbrew pozorom, implementacja tego rozwiązania niesie ze sobą wiele trudności i kwestii spornych, dla przykładu sortowanie lub rozmiar w pamięci. A o co chodzi w ogól z tym Unicode (UTF-8)?

public $wartość_średnia = 1.07;
//zamiast:
public $wartosc_srednia = 0.07;

Problemy z PHP 6 nie zmieniają kwestii, że w PHP 5.4 pojawia się wiele nowości. W niniejszej pierwszej części tutoriala, postaram się przedstawić najważniejsze zmiany.

  • Usunięcie dyrektywy register globals

Czytaj całość...

PHP APC Tutorial – cz.1: Instalacja na Windows (WAMP) oraz Linux – Czyli jak przyśpieszyć wgrywanie stron PHP

APC jest tzw. opcode cache, który może znacząco przyśpieszyć działanie aplikacji PHP, poprzez cache’owanie zarówno kodu PHP oraz zmiennych. Zastosowanie APC w aplikacjach PHP wydatnie wpływa na poprawę czasu odpowiedzi oraz zmniejszenie obciążenia serwera.

W poniższym artykule, postaram się zapoznać czytelnika z APC, przeprowadzić go przez proces instalacji i konfiguracji oraz pokazać na kilku przykładach jego działanie. Zapoznamy się również panelem administracyjnym APC, który pozwala na podgląd w czasie rzeczywistym statystyk wydajnościowych APC. Zobaczymy również sposób wykorzystania APC wraz z Zend Framework.

Czytaj całość...

Tabulacja zamiast spacji na klawiszu Tab w NetBeans IDE

Każdy ma swój sposób na wcięcia w kodzie. Niektórzy wolą do tego spacje, niektórzy tabulację, inni jeszcze coś innego. Niezależnie, co kto woli, jeżeli nasz edytor lub IDE nie podziela naszych upodobań, to zaczynają się problemy.

Czytaj całość...

Zend DataGrid – generowanie tabel HTML z CRUD – biblioteka ZFDataGrid (klasa BVB_Grid)

Zend dla PHP to taki sam standard, jak JQuery dla JavaScript. Wszyscy doceniają też Zend_Form oraz wszystkie inne moduły. Brak jednak jednego. DataGridu, czyli modułu analogiczenego do Zend_Form, ale służący do generowania tabel HTML wypełnionych zawartością pobraną z odpowiednich tabel w bazie danych np. MySQL.

Czytaj całość...

Problem z instalacją Zend Debugger – Komunikat ‘An error occurred…’

Instalacja Zend Debugger dla platformy Eclipse powinna standardowo przebiegać przy użyciu następującego URL: http://download.zend.com/pdt.

Jednakże proces ten może zakończyć się nieprzyjemnym rozczarowaniem w postaci komunikatu:

'Installing Software' has encountered a problem.
An error occurred while collecting items to be installed.

Czytaj całość...

Wzorce programistyczne – Fabryka abstrakcyjna (Abstract Factory) w C++ i PHP

Wzorzec programistyczny typu Abstract Factory jest jednym ze wzorców służących do tworzenia obiektów. Jest to rozszerzony przypadek innego wzorca programistycznego – klasycznej Fabryki. W klasycznym wzorcu typu Fabryka, klasa fabrykująca posiadała metody, które tworzyły instancje obiektów. Możliwe było dziedziczenie z takowej Fabryki w celu nadpisywania odpowiednich metod i tym samym zmienianie poszczególnych sposobów kreacji. W przypadku Fabryki Abstrakcyjnej posuwamy się o jeden krok wyżej. Mamy kilka Fabryk udostępniających ten sam interface i w zależności od okoliczności, powołujemy do życia inną Fabrykę służącą użytkownikowi do kreacji obiektów. Użytkownik jest odseparowany i nie informowany o faktycznych typach obiektów, a jedynie posługuje się wspólnym interfacem.

Czytaj całość...

Wzorce programistyczne – Dekorator (Decorator) w C++ i PHP

Wzorzec programistyczny typu Dekorator jest bardzo wygodnym sposobem wzbogacania (dekorowania) obiektu w czasie rzeczywistym. Efekt ten jest osiągany poprzez wrappowanie instancji obiektu w kolejne instancje, które dodają do obiektu bazowego kolejne funkcjonalności.

Wzorzec opiszę na 2 przykładach. Pierwszy będzie to przykład oparty o PHP i zaczerpnięty z frameworków do tworzenia stron WWW. Będziemy chcieli osiągnąć efekt wrapowania tagów HTML w kolejne tagi. Dla przykładu:

$box1 = new Div(new Link( new Image() ));
$box1->printOut();

Powyższy kod ma dać w efekcie wydruk na ekranie w postaci:

<div><a><img /></a></div>

Czytaj całość...

Przekierowanie wyniku funkcji var_dump do pliku

Funkcja var_dump() w języku PHP dzięki swej użyteczności jest często stosowana do debugowania kodu. Są jednak sytuacje, gdy jestśmy ograniczeni w jej stosowaniu, gdyż nie możemy zobaczyć na ekranie jej wyniku. Przykładem takiej sytuacji jest ta, gdy dany plik PHP jest wywoływany za pomocą AJAXa i w przeglądarce nie jest wyświatlany bezpośrednio. Rozwiązaniem jest zbuforowanie wyjścia i zapisanie go do pliku. Dodatkowo, tak zbuforowane dane nie pojawiają sięna wyjściu pliku i nie zaburzają sekwencji kodu. Poniżej przykład.

ob_start();
var_dump($this);
$d = ob_get_clean() ;
$f = fopen('out.html', 'w+');
fwrite($f, $d);
fclose($f);

Czytaj całość...