Translate: 
EnglishFrenchGermanItalianPolishPortugueseRussianSpanish

Drupal 7: HipHop for PHP kontra APC – test wydajności

18 maja 2011

Na angielskiej wersji mojego bloga opublikowałem wczoraj nowy artykuł porównujący wydajność Drupal 7 w trzech różnych wersjach:

  • tradycyjnego skryptu PHP
  • skryptu PHP zoptymalizowanego modułem APC
  • aplikacji skompilowanej przy pomocy HipHop for PHP

Przeczytaj resztę tego wpisu »

HipHop for PHP vs APC – Drupal 7 benchmark

18 maja 2011

Read this article on the English version of my blog: http://php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/

Please note: this is the last English article published on the Polish version of my blog. To read my new articles in English, please switch to the English version of this blog: http://php.webtutor.pl/en .

[English] Please note: All English articles has been moved to a new address

12 maja 2011

Please change your links, feeders and bookmarks to the following address: http://php.webtutor.pl/en.

Also, from now on every Polish article can be found under new address: http://php.webtutor.pl/pl/[...] respectively.

There is no need to change the URL’s of existing articles, old links are still working and redirecting into new location.

Jak przyspieszyć kompilację kodu PHP w HipHop for PHP – część I: ccache

9 maja 2011

Kompilacja dowolnego programu napisanego w języku PHP zależnie od jego rozmiaru może trwać od kilku do kilkudziesięciu minut.

Dla programistów C, C++ i Java długotrwała kompilacja kodu nie jest niczym niezwykłym. Niestety nie można tego samego powiedzieć o programistach PHP, którzy przywykli do tego, że wszystkie zmiany w kodzie widzą od razu w przeglądarce.

W artykule przedstawię więc jeden ze sposobów, który znacząco skraca czas kompilacji kodu PHP. Przeczytaj resztę tego wpisu »

Drupal i HipHop for PHP – część I: kompilacja

29 kwietnia 2011

Tuż po upublicznieniu HipHop for PHP w Internecie pojawiło się wiele artykułów na temat tego kompilatora oraz możliwości jakie może zaoferować istniejącym skryptom PHP. Większość z tych tekstów opisywało jednak problemy, które uniemożliwiały skompilowanie dwóch najpopularniejszych systemów CMS Drupal, i Joomla. Operacja kończyła się niepowodzeniem z powodu złej jakości kodu PHP, w który zostały napisane oba systemu.

Informacje zawarte we wspomnianych artykułach są już jednak nieaktualne: od czasu ich publikacji pojawiły się nowe wersje obu systemów CMS, mianowicie Drupal 7 oraz Joomla 1.6.

Czy w nowych wersjach poprawiła się jakość kodu PHP? Czy system Drupal można już bez problemu skompilować? Niniejsza seria artykułów odpowie na te pytania. Przeczytaj resztę tego wpisu »

Mod_rewrite oraz HipHop for PHP na serwerze Apache

25 kwietnia 2011

Skrypty PHP skompilowane kompilatorem HipHop for PHP mogą bez problemu działać jako serwery HTTP. Nie udostępniają one jednak najpopularniejszej w Internecie metody tworzenia przyjaznych linków, czyli modułu mod_rewrite dostarczanego razem z serwerem Apache.

W tym artykule opiszę najprostszy sposób uruchomienia skompilowanych skryptów PHP z poziomu serwera Apache. Przeczytaj resztę tego wpisu »

HipHop for PHP – Instalacja na CentOS 5.x

21 kwietnia 2011

W jednym z poprzednich artykułów opisałem jak przeprowadzić instalację kompilatora HipHop for PHP na systemie Fedora.

Wspomniałem też wtedy o problemach, jakie miał z tym kompilatorem system CentOS 5.5.

W niniejszym artykule pokażę, jak pokonać te trudności i poprawnie zainstalować na tym systemie kompilator HipHop for PHP Przeczytaj resztę tego wpisu »

Zastępcy eval w PHP: czyli jak szybciej zrobić sobie coś złego

19 kwietnia 2011

Zapewne wszyscy programiści PHP wiedzą, do czego służy polecenie eval() oraz to, że nie należy się nim posługiwać.

Powodów tego stanu rzeczy jest kilka, przede wszystkim jednak problemem jest bezpieczeństwo kodu i szybkość jego wykonywania. Dodatkową niedogodnością może być też fakt, że polecenie eval() nie jest obsługiwane przez kompilatory języka PHP (np. HipHop for PHP).

Istnieją niestety takie sytuacje, gdy konieczne jest wykonanie dynamiczne utworzonego kodu. W tym artykule skupię się na zagadnieniu wydajności i metodach zastąpienia polecenia eval() szybszymi odpowiednikami.
Przeczytaj resztę tego wpisu »

Nadpisywanie wbudowanych protokołów PHP własnym wrapperem strumienia

15 kwietnia 2011

Po ostatnich, dosyć wyczerpujących artykułach na temat silnego typowania danych, oraz autentykacji NTLM poprzez atak man-in-the-middle, postanowiłem przedstawić coś znacznie lżejszego.

Nieraz podczas pisania aplikacji natrafiałem na zabezpieczenia w stylu „system plików jest w trybie: tylko do odczytu, PHP ma prawa zapisu wyłącznie w bazie danych”. Jest to oczywiście skrajny przypadek zabezpieczeń przed hackerami, jednak w moim przypadku zdarzający się dosyć nagminnie. W tak zabezpieczonym środowisku pojawiają się więc dosyć nietypowe problemy z funkcjami wbudowanymi w PHP, gdyż niektóre z nich wymagają praw zapisu do katalogów na dysku lokalnym (upload plików, cache WSDL, biblioteka cURL), lub odczytu z plików (np. SoapClient nie potrafi odczytać treści WSDL bezpośrednio ze zmiennej, lecz tylko poprzez protokół HTTP lub z pliku lokalnego).

Opiszę więc krótko mało znane i dosyć egzotyczne obejście tych problemów: nadpisywanie wbudowanych w PHP protokołów własnymi. Przeczytaj resztę tego wpisu »

Uwierzytelnianie NTLM i Single Sign On: czyli jak w PHP zalogować się do ActiveDirectory bez znajomości loginu i hasła

14 kwietnia 2011

Przeglądając gotowe biblioteki PHP do uwierzytelniania w domenie ActiveDirectory zauważyłem, że żadne z tych rozwiązań nie pozwala na zalogowanie użytkownika domenowego bez konieczności podania przez niego loginu i hasła.

Funkcjonalność automatycznego logowania do domeny wbudowana jest oczywiście tylko w w przeglądarce Internet Explorer, ale powiedzmy sobie szczerze: w dużych firmach i korporacjach jest to nadal jedyna słuszna aplikacja do surfowania po Int(ra|er)necie.

Co ciekawe, w innych językach programowania (Java, C#) nie ma najmniejszego problemu, by użytkownik domenowy mógł wejść poprzez Internet Explorer do chronionego serwisu, istnieje tam wiele gotowych rozwiązań operujących na uwierzytelnianiu NTLM.

Po dwóch dniach spędzonych na czytaniu dokumentacji Microsoftu, Samby, oraz po sniffingu sieciowym, udało mi się zaimplementować działające rozwiązanie.

W niniejszym artykule postaram się przybliżyć schemat automatycznego logowania skryptów PHP do domeny ActiveDirectory za pomocą… ataku Man-in-the-middle. Przeczytaj resztę tego wpisu »

Obiektowe PHP: Implementacja getterów i setterów znanych z języka C#

13 kwietnia 2011

Każdy, kto choć raz przyjrzał się językowi C#, mógł zauważyć, że posiada on możliwość deklarowania konkretnych getterów oraz setterów dla właściwości obiektu, np w taki sposób:

public class Person
{
    //default constructor 
    public Person()
        {
        }
 
    private string _Name;
    public string Name
    {
        //set the person name
        set { this._Name = value; }
        //get the person name 
        get { return this._Name; }
    }
}

O ile w języku PHP udostępniono zarządzanie magicznymi zmiennymi poprzez funkcje __get() oraz __set(), to jednak rozwiązanie to ma jedną wielką wadę. Zmienne magiczne nie są widoczne z poziomu kodu PHP (w ramach deklaracji klasy), ani z poziomu aplikacji IDE (do czasu aż zadeklaruje się je „wirtualnie” z poziomu komentarzy phpdoc).

Przedstawiam więc kolejną, mało znaną funkcjonalność języka PHP, która rozwiązuje wspomniany problem. Jest nią umagicznianie zadeklarowanych właściwości obiektu. Przeczytaj resztę tego wpisu »

Silne typowanie danych w PHP, część II: autoboxing oraz niezniszczalne obiekty

12 kwietnia 2011

We wcześniejszym artykule dotyczącym silnego typowania opisałem mechanizm typehintów, który wymusza zgodność typów danych (także nie będących obiektami) przekazywanych do metod i funkcji. Niestety wspomniana implementacja nie zabezpiecza przed innym problemem związanym z dynamicznym typowaniem zmiennych: brakiem kontroli typu podczas nadpisywania wartości zmiennych.

W celu zapewnienia kontroli typu, postanowiłem wprowadzić do języka PHP pojęcie autoboxingu znanego z języków C#, oraz Java. Przeczytaj resztę tego wpisu »

Jak obliczyć bieżące zużycie CPU przez skrypt PHP?

12 kwietnia 2011

Istnieje wiele skryptów obliczających czas wykonywania programu, jego zużycie pamięci, a nawet ilość zapytań wysłanych do baz danych.

Wszystkie wymienione przeze mnie wskaźniki są niezwykle istotne podczas testowania kodu w celu jego późniejszej optymalizacji. Mi jednak brakuje jeszcze jednego parametru: procentowego zużycia CPU przez skrypt PHP! Przeczytaj resztę tego wpisu »