Archiwum z Marzec 2011

HipHop for PHP: Test wydajności

czwartek, 31 Marzec 2011

  click here for english version

Benchmark iconNa stronie shootout.alioth.debian.org znajduje się bardzo ciekawy benchmark porównujący ze sobą wydajność wielu różnych języków programowania. O ile daleki jestem od prowadzenia dyskusji na temat wyższości jednego języka nad drugim, uznałem, że ciekawie byłoby wykonać mały test prędkości pomiędzy PHP a… PHP (skompilowanym przy pomocy HipHop for PHP).

Mam nadzieję, że testy które przedstawiam poniżej okażą się pomocne w udzieleniu odpowiedzi, jak bardzo PHP przyspiesza po skompilowaniu, oraz czy HipHop for PHP jest faktycznie tak wydajny, jak twierdzą developerzy Facebooka. (więcej…)

HipHop for PHP – Instalacja na Fedora 12 – 15

czwartek, 31 Marzec 2011

Minął już chyba rok, odkąd Facebook przedstawił publicznie swój wynalazek pozwalający na kompilowanie kodu PHP do plików binarnych.

Od początku swojego istnienia HipHop for PHP krytykowany był za problemy z konfiguracją oraz instalacją na różnych systemach operacyjnych. Choć sam Facebook oficjalnie wspiera swój produkt na systemach CentOS (darmowa wersja RedHata), oraz Fedora, to nawet na nich często instalacja kończyła się niepowodzeniem.

Z tego też powodu wsparty odpowiednią literaturą postanowiłem opisać dokładnie proces instalacji na jednym ze wspieranych przez Facebook dystrybucjach Linux, czyli na tytułowej Fedorze . (więcej…)

UTF-8 w PHP 5.0+: Klasa String wzorowana na języku Java

środa, 30 Marzec 2011

Jak dobrze wiemy w PHP obsługa UTF-8 jest po dziś dzień dosyć skromna. Co prawda nie jest to cecha charakterystyczna wyłącznie dla tego języka (podobne problemy mają developerzy np. Ruby’ego), to w czasach, gdy większość stron WWW kodowanych jest w unikodzie, staje się to bolesną niedogodnością podczas developmentu.

Co prawda w wersji 5.3 pojawiła się nowa biblioteka ext/intl próbująca nadrobić opóźnienia w stosunku do reszty świata, jest to niestety zmiana prawie kosmetyczna, a nawet nieelegancka. Prawdziwa rewolucja miała nastąpić dopiero w PHP 6.0. Jako że ta wersja nie ujrzy już niestety światła dziennego, a programiści PHP 5.2, którzy z jakichś powodów nie mogą przesiąść się na wersję 5.3, skazani zostali na używanie zbioru różnych klas nie do końca sprawdzonych lub przemyślanych, postanowiłem że napiszę własną wzorując się na klasie String z języka Java. (więcej…)

Zaawansowany mechanizm refleksji w PHP

poniedziałek, 28 Marzec 2011

Język PHP od wersji 5.0 posiada wbudowany mechanizm refleksji. Umożliwia on dokładne zbadanie dowolnego interfejsu, klasy, a nawet zwykłej funkcji.

Wśród opcji, jakie udostępniają nam twórcy PHP, znaleźć można funkcjonalności listujące właściwości klas, parametry przekazywane do ich metod, czy nawet numery linii, w których zawierają się deklaracje badanych elementów. Wydaje się, że mechanizm ten udostępnia kompletny zbiór operacji, jakie potrzebne są do rozłożenia dowolnego programu na czynniki pierwsze.

Po „zabawach” z Refleksjami oraz jej metodą getDocComment() poczułem jednak pewien niedosyt: skoro można pobrać treść komentarzy do metody lub klasy, czemu nie można zrobić tego samego z kodem PHP danego elementu?

Stworzyłem więc bibliotekę AdvancedReflection rozszerzającą mechanizm refleksji o możliwość wylistowania kodu źródłowego PHP badanego elementu. (więcej…)

Kolorowy var_dump()

niedziela, 27 Marzec 2011

Często podczas programowania potrzebujemy wyświetlić na zawartość jakiejś zmiennej w celu jej zdebugowania. W takim przypadku bardzo przydatną mechanizmem wbudowanym w język PHP okazuje się funkcja var_dump(). Jej główną zaletą w porównaniu do innych funkcji tego typu (jak print_r(), czy var_export()) jest to, że wyświetla ona nie tylko wartość zmiennej, lecz także rodzaj typów w niej przechowywanych.

Funkcja ta ma niestety jedną dokuczliwą wadę, przy dużej ilości danych (rozbudowany array / obiekt) prezentowany wynik potrafi być bardzo nieczytelny.

W tym celu napisałem niewielką klasę, która dodaje do polecenia var_dump() kolorowanie wyników. (więcej…)

Co najbardziej spowalnia skrypty PHP?

sobota, 26 Marzec 2011

Pierwszą, oczywistą przyczyną jest to, że język PHP, jest językiem interpretowanym, a nie kompilowanym. Nie tłumaczy to jednak kiepskich wyników porównawczych z innymi językami tego samego typu, takimi jak Perl czy Python, które w wielu scenariuszach wykazują o wiele większą wydajnością.

Co sprawia, że język PHP jest od nich wolniejszy? (więcej…)

StringBuilder w PHP

czwartek, 24 Marzec 2011

Jak dobrze wiadomo, PHP nie jest wyposażony w mechanizm typu StringBuilder znany z innych języków jak C# lub JAVA. W Internecie znaleźć można wiele dyskusji na to, czy taka funkcjonalność jest w ogóle do czegoś potrzebna, oraz gotowe implementacje jako dowody na to, że wydajność nie ulega zmianie.

Ja spróbuję przedstawić dowody odwrotne: mechanizm StringBuilder można w PHP zaimplementować, co korzystnie wpływa na wydajność skryptu. (więcej…)

Jak obejść limit przestrzeni dyskowej na koncie WWW

czwartek, 24 Marzec 2011

Przy wyborze serwera hostingowego pod nową stronę WWW jednym z głównych czynników decydujących „za” lub „przeciw” jest limit dostępnej przestrzeni dyskowej.

Chociaż w dzisiejszych czasach większość firm na rynku prześciga się między sobą w ilości oferowanych gigabajtów (tak dostępnego transferu, jak i powierzchni), zademonstruję, jak te limity obejść całkowicie (lecz krótkoterminowo). (więcej…)

Silne typowanie danych w PHP, część I

środa, 23 Marzec 2011

Logo PHPW wielu dyskusjach porównawczych pomiędzy programistami różnych języków programowania często pojawia się zarzut w stylu „a u was w PHP nie ma silnego typowania danych!”.

Czy aby na pewno?

Okazuje się jednak, że w PHP można zaimplementować mechanizm silnego typowania danych znany z takich języków jak C, C++, C#, Java… (więcej…)

Oszukać przeznaczenie, czyli łamanie SAFE_MODE oraz max_execution_time

środa, 23 Marzec 2011

Większość programistów PHP choć raz w swoim życiu spotkało się z takimi terminami jak SAFE_MODE oraz limitem czasowym wykonywania programu w PHP (domyślnie 30 sekund).

O ile obie te rzeczy można łatwo wyłączyć, gdy pracuje się na serwerze dedykowanym lub w środowisku wewnętrznym firmy, to na hostingach współdzielonych obie te rzeczy potrafią przyprawić o ból głowy, wyłączając skrypt (np. migrujący dużą ilość danych) w trakcie jego wykonywania.

W tym artykule przedstawię prostą metodę na obejście tego zabezpieczenia. (więcej…)

Prepared statements nie takie szybkie jak myślisz…

wtorek, 22 Marzec 2011

Logo MySQLOkazuje się jednak że prepared statements oprócz swoich oczywistych zalet w postaci ochrony przed SQL injection oraz odciążaniu bazy danych od ciągłego parsowania zapytań, posiadają też jedną „drobną” wadę.

W przypadku bazy danych MySQL bywają mniej wydajne dla zapytań typu SELECT. (więcej…)

Odpowiednik PHP’owej funkcji explode() dla Microsoft SQL Server 2000/2005

wtorek, 22 Marzec 2011

W życiu każdego programisty istnieje czasami potrzeba przeniesienia funkcjonalności z jednego języka programowania do drugiego.

Tym razem konieczność sprawiła że musiałem zmigrować PHP’ową funkcję explode() do jej proceduralnego odpowiednika w bazie Microsoft SQL Server.

(więcej…)

Limitowanie prędkości przesyłu plików w PHP

wtorek, 22 Marzec 2011

MiniaturkaPracując w sektorze hostingowym często spotykam się z potrzebą kontroli użycia łącza ze światem. Jako że łącza nie są z gumy i mają swoje fizyczne/ekonomiczne ograniczenia, w przeszłości niejednokrotnie musiałem przycinać maksymalne pasmo użytkownikom przy pomocy gotowych modułów do Apacha, lub niskopoziomowych mechanizmów wbudowanych w system operacyjny.

Co jednak jeśli użytkownik sam sobie chce zmniejszyć lub zwiększyć szerokość pasma do celów np działu download na swojej stronie?

Na shared hostingu nie jest w stanie tego osiągnąć, gdyż nie istnieją takie serwery, gdzie można sobie taki parametr regulować. Z tego też powodu postanowiłem napisać kod PHP symulujący tą funkcjonalność (więcej…)