Autor wpisu: matipl, dodany: 23.11.2015 19:24, tagi: php, mysql
Ponad tydzień temu odbyła się kolejna edycja konferencji PHPCon Poland. Jak ten czas szybko leci, pamiętam jak była organizowana pierwsza edycja w 2010 roku. Wtedy była to mała konferencja na 100-200 osób w Hucie Szklanej.
W tym roku uczestników było już prawie dziewięciuset, a konferencja przeniosła się do wielkiego hotelu w Ossie. Ale dzięki wielkości hotelu, oraz 3 salom (2 prelekcyjne, 1 warsztatowa) nie odczuwało się tak dużej ilości uczestników. Moim zdaniem hotel dobrze poradził sobie z taką imprezą, gastronomicznie również dał radę. Jedyne co, to brakowało ewidentnie znaków/strzałek kierujących pierwszego dnia na miejsce rejestracji uczestników konferencji, z recepcji hotelowej.
Warsztaty
W tym roku miałem okazję uczestniczyć w konferencyjnych warsztatach. Ze względu na Mariusza uczestniczyłem w warsztacie z Ansible. Moim zdaniem świetna rzecz, Mariusz z Kacprem pokazali dlaczego warto skorzystać z Ansible oraz jak łatwo wykorzystać to narzędzie. Ansible jest bardzo łatwy jeśli chodzi o “czytanie” plików konfiguracyjnych, jak także w samej konfiguracji. Bardzo ułatwia w dostosowywaniu pod siebie Vagranta, który siedzi pod spodem. A dzięki Ansible nie musimy za wiele wiedzieć o samym mechaniźmie wirtualizacji i kolejny raz tracić czas na stawianie środowiska pracy pod konkretny projekt.
Konferencja
Minusem warsztatów było, że w najlepszym wypadku traciliśmy połowę wykładowego dnia. Nie powinno tak być. Pierwsza prelekcja, na której mogłem być zaczynała się o 20:00 (agenda). Wybrałem “OLX pod maską”. Łukasz Szymański przedstawił krótko historię polskiego OLX, które zaczynało jako szerlok (ktoś jeszcze pamięta?), a następnie tablica. Miesięcznie polski OLX obsługuje 9,5 mln UU / 77,5 mln wizyt / 1,5 mld odsłon. Wszystko jest ogarniane przez 1 instancję haproxy, za tym dopiero stoją nginx-y z varnishem oraz riakiem. Poza tym OLX wykorzystuje głównie memcached, Redis dla fjuczerów oraz MySQL. Do statystyk używają Graphite. Później Łukasz opisał jak była stworzona architektura aplikacji, jakie zespół miał wyzwania i co obecnie planują. To już nie było tak interesujące. Jak na wykład sponsorki tej edycji było i tak bardzo dobrze.
PSR-7
Drugi, a jednocześnie ostatni wykład tego dnia, który wysłuchałem był poświęcony PSR-7, a dokładnie jego historii. Niestety zapomniałem, że historia może być tak nudna. Mimo sporych wysiłków Kacpra Guni i Mariusza Gila, oraz cofnięcia się do podstaw PHP czyli aplikacji webowych opartych o Request i Response nie sprawili, że pokochałem historię. Najważniejsze do zapamiętanie – teraz wszyscy “będą” PSR-7 i jest to dobra wiadomość, bo będzie można prawie, że dowolnie podmieniać implementację tego interfejsu/specyfikacji.
Dzień drugi
Drugi dzień konferencji. Sobota miała być tym co programiści lubią najbardziej. Prelekcje w godzinach od 10:00 do 20:00 dawały teoretyczną możliwość poznania sporej porcji nowej wiedzy i weryfikację już posiadanej. Niestety w tym roku coś niedobrego stało się z prelekcjami. Pewne prelekcje zostały specjalnie wyróżnione w agendzie (S), coś czego nie było w latach poprzednich. Niby nic, ale merytoryka mocno spadła moim zdaniem. I nie chodzi o to, że były to tzw. “sponsorskie wykłady”. W poprzednich latach “mówiły” firmy, ale były to ciekawe case study lub przypadki opisu użytych technologii. Tym razem były to tylko wyjątki jak OLX lub getResponse.
PHP 7 w praktyce
Na PHPCon Poland najbardziej lubię posłuchać polskich prelegentów, zagranicznych mamy w kuluarach i na YT. Pierwszy wykład tego dnia przesiedziałem u Leszka na “PHP 7 w praktyce”, gdzie tytułowej praktyki mi zabrakło ale merytorycznie było bardzo dobrze. Dla osób myślących o przesiadce na PHP 7 przypominam, że dostępny jest darmowy ebook. Najważniejsze do zapamiętania – Udział PHP 5.3 w rynku to 36.4%, PHP które żyło w latach 2009-2014.
Bla Bla Bla – technical story
Abstrakt prelekcji “Bla Bla Bla – technical story” naprawdę zachęcał. Serwis obsługuje duży ruch, równie duża jest liczba deweloperów odpowiedzialnych za serwis. Niestety angielsko-francuski prelegentów (Benjamin de Bernardi, Olivier Dolbeau) sporo zepsuł. To co udało mi się wychwycić, to informacja że BlaBla najpierw było oparte o Mambo w 2005 roku, a dopiero później zaczęli stosować inne technologie, szczególnie gdy w 2010 roku weszli na inne rynki (Hiszpania, Włochy, UK). W pierwszych wersjach powstały takie potworki jak plik lib.trip.php, który posiadał prawie 4k linii kodu, bez żadnych testów. Dlatego zespół postanowił przejść z własnego rozwiązania na Symfony. A dlaczego Symfony? Ponieważ Symfony posiada duże community, szczególnie we Francji. Łatwiej również znaleźć nowych programistów, którzy szybko wdrożą się w projekt symfonowy. Obecnie BlaBlaCar korzysta z git, Atlassian Bamboo, phpunit, behat, Elasticsearch, rabbitMQ, varnish, chef, zabbix, hadoop, AWS, New Relic, Galera, swrrot. Jak tylko ukażą się nagrania (zapewne wiosną) warto obejrzeć, jak opowiadają o problemach z jakimi się zderzyli (chociażby kod spaghetti). Najważniejsze do zapamiętania – warto posiadać wewnętrzne API pomiędzy warstwami
Autor wpisu: zleek, dodany: 19.11.2015 09:14, tagi: php
Autor wpisu: Łukasz Socha, dodany: 18.11.2015 13:54, tagi: php
Autor wpisu: matipl, dodany: 17.11.2015 13:26, tagi: php
Jeszcze w tym miesiącu powinna być dostępna oficjalna wersja PHP 7.0. Z tej okazji Davey Shafik napisał i udostępnił za darmo ebook opisujący migrację systemów do PHP 7.0. Dostępne formaty to ePub, Mobi, PDF, a sama książka ma ponad 140 stron. Polecam.
Link: Upgrading to PHP 7
Artykuł Darmowy ebook – Upgrading to PHP 7 pochodzi z serwisu Mateusz matipl Kamiński.
Autor wpisu: matipl, dodany: 12.11.2015 17:19, tagi: php
Dzisiaj miała być dostępna oficjalna wersja PHP 7.0. Niestety z powodu znalezionych błędów została opublikowana kolejna, ostatnia wersja Release Candidate (PHP 7.0 RC7). W następnym tygodniu powinna być już oficjalna wersja. Sporo osób zastanawia się, czy przejść od razu po premierze PHP 7.0 na najnowszą wersję. Ale to nie powinno być Wasze pierwsze pytanie.
Pierwsze pytanie powinno brzmieć: czy moja aplikacja/framework zadziała poprawnie z PHP 7.0? Musimy pamiętać, że zysk wydajności i wprowadzone nowe możliwości zostały uzyskane poprzez poważne zmiany w samym rdzeniu PHP. Dlatego nie tylko musicie zweryfikować poprawne działanie Waszych rozwiązań w PHP, ale także powinniście zweryfikować listę rozszerzeń do PHP (PECL) z jakich korzystacie, bo nie wszystkie muszą zadziałać.
Z tego już nie skorzystasz
W PHP 7.0 jest spora ilość niekompatybilności w stosunku do poprzedniej wersji (5.6). Jeśli do tej pory ignorowaliście wszelki E_DEPRECATED powinniście jak najszybciej zacząć poprawiać zgłaszane problemy. Wraz z przejściem na PHP 7.0 wszelkie E_DEPRECATED zostaną zamienione w fatal error i uniemożliwią poprawne działanie aplikacji.
W PHP 7.0 nie skorzystacie również z następujących funkcji, które zostały usunięte:
- call_user_method()
- call_user_method_array()
- set_magic_quotes_runtime()
- set_socket_blocking()
- dl()
- funkcje GD Type1
Zrobiono również porządek z aliasami i następujące zostały usunięte:
- mcrypt_generic_end()
- mcrypt_ecb()
- mcrypt_cbc()
- mcrypt_cfb()
- mcrypt_ofb()
- datefmt_set_timezone_id()
- IntlDateFormatter::setTimeZoneID()
Największe nowości
Największą zmianą, zauważalną dla wszystkich jest duży wzrost wydajności. Średnio jest to 2x krotne zwiększenie szybkości oraz zmniejszenie zużycia pamięci. Jeśli tylko Twoja biblioteka, framework, aplikacja wspiera PHP 7.0 to jest to bardzo dobry powód do aktualizacji. Wordpress, Zend Framework 2, Symfony 2.8/3.0 w pełni wspierają już PHP 7.0. W nowej wersji otrzymamy także spójne wsparcie dla 64-bitów, jak również:
- zastąpienie wielu fatal errors poprzez wyjątki PHP
- usunięcie starych i niewspieranych SAPI i rozszerzeń
- Nowy operator ?? (The null coalescing operator)
//PHP 5.6 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; //PHP 7.0 $username = $_GET['user'] ?? 'nobody';
- Nowy operator < => (Combined comparison Operator)
echo 1 < => 1; // 0 echo 1 < => 2; // -1 echo 2 < => 1; // 1
- deklaracje zwracanego typu dla funkcji
function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); }
- Scalar type declarations
function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1)); //return int(9)
- klasy anonimowe
- filtrowanie podczas unserialize()
- możliwość grupowaniu deklaracji use
//PHP 5.6 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; // PHP 7.0 use some\namespace\{ClassA, ClassB, ClassC as C};
Nowości przez ostatnie lata były mocno wertowane, ale warto sobie przypomnieć pełna listę nowości, jak również rzucić okiem na zaimplementowane RFC.
Live test
Co kilka wersji RC robiłem na bieżąco testy jak działa PHP 7 z aplikacjami na serwerze. Poniżej chciałbym przedstawić tylko małą próbkę, abyście zdawali sobie sprawę ze skali zmian w prędkości.
Czas uruchomienia konsoli Symfony 2.6 przyspieszył x2.5:
- PHP 5.6 Time: 0,700 seconds
- PHP 7.0 Time: 0,279 seconds
Czas uruchomienia unit testów dla aplikacji (PHPUnit) przyspieszył x1.5:
Autor wpisu: matipl, dodany: 11.11.2015 09:30, tagi: php, zend_framework
W 2012 roku pisałem o podobnej dziurze w Zend Framework. Niestety historia się powtarza i wszelkie wersje Zend Framework włącznie do 2.4.2 oraz 1.12.13 są podatne na atak XXE (XML eXternal Entity Injection), jeśli na przykład wykorzystujecie ZF jako serwer XML-RPC.
Dokładny opis problemu opisał Dawid Goluński już w sierpniu. Problem jednak w tym, że obecnie z dwóch dużych frameworków dla PHP (Zend Framework i Symfony) nie korzystają tylko twórcy dedykowanych aplikacji. I jeśli nawet nie korzystamy bezpośrednio z tych frameworków, możemy korzystać z rozwiązań, które wykorzystują pośrednio ZF lub Sf. W dzisiejszych czasach musimy mieć oczy dookoła głowy, ponieważ producent (np. Drupal, Magento) może w porę nie zauważyć problemu.
Z powodu luki XXE w ZF problemy mają chociażby osoby korzystające z Magento. 27 października 2015 (prawie 3 miesiące po załataniu w ZF!) został opublikowany patch bezpieczeństwa SUPEE-6788, który rozwiązuje m.in. problem XXE/XEE attack on Zend XML functionality using multibyte payloads.
Zastanawiacie się zapewne co może się Wam stać poprzez taką małą dziurę? Ano możecie zarazić swój serwer ransomware’m Linux.Encoder.1 (napisany w C). A ten sprytny robak, który potrafi wykorzystać wspomnianą lukę XXE w ZF, szyfruje wszelkie nasze dane (np. /home, /root, /var/lib/mysql). Następnie żąda od nas okupu za klucz odszyfrowujący.
Dlatego, jeśli nie aktualizowaliście ZF w swoich aplikacjach od kilku miesięcy, warto przysiąść i wprowadzić odpowiednie zmiany.
Artykuł Dziura w Zend Framework i Linux.Encoder.1 pochodzi z serwisu Mateusz matipl Kamiński.