Zend Framework – create custom view helper

Zend Framework is not as popular as Symfony, but it’s also nice and have a lot of nice features. One of them is view helpers – classes and objects which we can use in templates to make specific thinks. Zend has few build-in helpers, for example to use absolute app directory, set or receive HTML doctype, use partials templates or use authentication data. Sometimes we can (or maybe should) create our view helper to avoid repetition of the code. It’s simple, let’s try.

Continue reading “Zend Framework – create custom view helper”

PHP/Mongo – Nested set model

Last time I created some structure for linking different elements from similar groups. This project needed high performance and easy way to get elements hierarchy, but changes are not often. After consideration I decided to implement nested set tree model to do this. All is based on PHP and use Mongo database and I would like to show you some basis operations with that. It can be helful in some cases, and that model is very efficient in read operations.

Continue reading “PHP/Mongo – Nested set model”

Laravel: fix Specified key was too long error

I just started new Laravel app and had an error “Specified key was too long error” during first migration. Reason is simple and described on official Laravel blog – they changed default encondig and it isn’t working on MariaDB or MySQL lower than 5.7.7 versions. Fortunately solution is very simple, we must only add two line to file AppServiceProvider.php. First, use Schema facade:

And second, change boot method to:

Now it works perfectly. And we also know, when can we change default string lenght for other specific situations :)

Błąd “Can’t use function return value in write context” w PHP

Ostatnio jeden z użytkowników polskiego wsparcia MyBB zgłosił mi dosyć nietypowy problem z dodatkiem nieprzeczytane posty. Błąd dotyczył komunikatu PHP, jaki był mu wyświetlany. Próbowałem błąd powtórzyć we własnym środowisku, niestety nie byłem w stanie tego zrobić, wszystko działało doskonale. Uznałem, że może to wynikać z pobrania nieprawidłowej wersji dodatku, bo support posiada własny download, którego niestety nie aktualizuję (w końcu pliki są i na GitHubie i na MyBB.com, więc po co). Po dokładniejszym sprawdzeniu okazało się, że faktycznie błąd istnieje. Konstrukcja tego typu:

if (!empty($this->getConfig(‘Exceptions’)))

Kończyła się otrzymaniem następującego błędu:

Can’t use function return value in write context.

Nie będę niepotrzebnie tłumaczył, napiszę tylko, że klasy pluginów posiadają metodę getConfig, która pobiera moje ustawienia dodatku z globalnej tablicy MyBB, od tak dla wygody i skrócenia nazw, które przy niektórych nazwach są bardzo długie. Poszukałem i okazało się, że błąd jest jak najbardziej na miejscu, jeżeli używamy PHP w wersji niższej niż 5.5. Dlaczego? Właśnie ta wersja otrzymała wsparcie dla obsługi także wyrażeń w przypadku empty(), a nie tylko zmiennych. Oczywiście mógłbym używać operatorów zamiast empty, ale konstrukcje języka są zawsze szybsze i uważam to za dobry nawyk. Błędu nie wykryłem, bo na środowisku testowym mam właśnie PHP 5.5, ot i cała filozofia. Jak więc powinien wyglądać poprawiony kod? Nie ma tu żadnej filozofii, zamiast wyrażenia potrzebna jest zmienna, zrobimy więc tak:

$exceptions = $this->getConfig(‘Exceptions’);
if (!empty($exceptions))

No i taki kod nie będzie generował żadnego błędu.

PHP – proste sprawdzanie dostępności witryny

Dzisiaj dosyć szybki wpis, może po prostu komuś przyda się niewielki skrypt w PHP jaki napisałem jakiś czas temu na własne potrzeby. Jego zadaniem jest po prostu sprawdzanie dostępności witryny. Nie robi nic specjalnego, bo po prostu sprawdza kod odpowiedzi na żądanie do serwera przy użyciu cURLa. Jeżeli nie jest równy 200, czyli oznaczający że wszystko gra, to wysyła na podany adres wiadomość email o padzie. Gdy serwis wróci do życia, wyśle drugi email z informacją, jak długo trwał czas niedostępności. Jak można się domyślić, skrypt korzysta z crona i najlepiej właśnie z niego go odpalać. Dlaczego w ogóle w PHP? A dlaczego nie?

Continue reading “PHP – proste sprawdzanie dostępności witryny”