chevron-left chevron-right

Jak zaktualizować PHP na macOS Sierra?

W swojej codziennej pracy pracuję na projekcie, którego część backendowa została napisana w PHP. Mając to szczęście, że jako frontendowiec pracuję na MacBooku mam zarazem to nieszczęście, że czasem trzeba zaktualizować wersję PHP. To nie zawsze jest tak bezproblemowe jakbyśmy chcieli. Z pomocą tego tekstu będziesz w stanie uniknąć większość trudności.

W przypadku posiadania MacBooka z systemem macOS Sierra, domyślnie zainstalowaną wersją języka PHP jest wersja 5.6. Dodatkowo, tzw. maki posiadają własny preinstalowany serwer Apache, o czym warto pamiętać w procesie aktualizacji PHP. Ponieważ, brak świadomości nt. tego faktu może spowodować ból głowy próbując rozwiązać problemy związane z instalacją za pomocą narzędzia zwanego Homebrew.

W skrócie, Homebrew to menedżer pakietów dla systemów macOS. Coś w stylu npm (dla środowiska Node.js) czy apt-get (dla Ubuntu). Dzięki niemu, można zainstalować nową wersję PHP, Node.js czy też różnych narzędzi macOS. Więcej informacji można znaleźć na stronie internetowej narzędzia.

PHP 7.x - największe zalety

Zanim przejdziemy do instalacji zaktualizowanej wersji PHP, warto się przyjrzeć cechom, które sprawiają, że nowa wersja PHP jest dobra. Z punktu widzenia takiej osoby jak ja, czyli osoby, która nie ma zbyt często styczności z kodem PHP, największą zaletą jest szybkość działania backendu napisanego w PHP. Można powiedzieć, że w porównaniu do wersji 5.6 wydajność PHP wzrosła ok. dwukrotnie, co przy projektach opartych o systemy CMS, takie jak eZ Platform czy Joomla! ma niebagatelne znaczenie. Strony i aplikacje działają zdecydowanie szybciej!

Poza tym, pojawiło się typowanie parametrów funkcji oraz typowanie wartości wyjściowych z funkcji. Poprawiono obsługę błędów. Dodano nowe operatory, m.in. operator spaceship czyli <=> - jest zamiennikiem dla x <= 10 && x >= 0. Używając nowego operatora zapis będzie wyglądał następująco: 10 <=> 0. Więcej informacji nt. zmian w PHP wersji 7.x można znaleźć na stronie projektu.

Poprawna instalacja za pomocą Homebrew

Pora przejść do procesu aktualizacji PHP. Zakładając, że masz Homebrew zainstalowany w systemie, musisz wpisać w terminalu następujące komendy:

brew update && brew upgrade
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew unlink php56
brew uninstall --force php56
brew uninstall --force httpd24
brew cleanup
brew doctor
brew install httpd24
brew install php71 --with-httpd24
brew unlink httpd24

Przejdźmy po kolei po komendach i wytłumaczmy sobie co one robią. Zacznijmy od pierwszych czterech komend. Służą one aktualizacji informacji o pakietach, dzięki temu nasz system będzie posiadał informacje o najnowszych wersjach pakietów, które można zainstalować.

Piąta komenda służy do usunięcia zależności w systemie dotyczących PHP 5.6. Dzięki niej unikniemy problemów wynikających z nieaktualnych zależności między pakietami, które mogłyby powodować błędy w działaniu oprogramowania.

Komendy 6 i 7, odinstalowują kolejno PHP i serwer Apache dostarczany z Homebrew (inny niż domyślny w systemie). Jeśli podczas tego procesu wystąpi błąd, że nie można odinstalować pakietu, to nie przejmujemy się i wklepujemy kolejne komendy.

Komendy 8 i 9 sprzątają system po deinstalacji pakietów PHP i HTTPD24 i ewentualnie naprawiają zepsute zależności. Tym samym nie będziemy musieli się martwić, że któreś pakiety przestały działać.

Komenda nr 10 instaluje na nowo serwer Apache. Dzięki temu nie wystąpią problemy z generowaniem pliku libphp7.so. To jest ważne, bo bez niego nowa wersja PHP będzie dostępna tylko i wyłącznie z poziomu terminala, a nie będzie dostępna na serwerze Apache.

Zapis przedostatniej linijki jest bardzo ważny. Gdybyśmy nie podali parametru --with-httpd24, to wtedy instalator nie wygenerowałby pliku /usr/local/opt/php71/libexec/apache2/libphp7.so, który jest nam potrzebny do konfiguracji serwera Apache, tak aby nasze projekty webowe działały korzystając z nowej wersji PHP.

Za pomocą ostatniej komendy, usuwamy zależności do serwera Apache zainstalowanego za pomocą Homebrew. Dzięki temu, nie wystąpią konflikty z domyślnym systemowych serwerem Apache.

Ostatnią rzeczą jaką należy zrobić jest dopisanie następującej linijki do pliku httpd.conf: LoadModule php7_module /usr/local/opt/php71/libexec/apache2/libphp7.so. Jeśli wcześniej w pliku konfiguracyjnym Apache znajdował się wpis dotyczący modułu PHP 5.6 to należy go usunąć. Nie będzie już nam potrzebny.

Po wszystkim, trzeba zrestartować serwer Apache i cieszyć się nową wersją interpretera.

Problem z libz

Zakładam, że korzystając z kroków przedstawionych powyżej proces instalacji przeszedł pomyślnie. Jednak, zdarzyło mi się, że instalator nie mógł wygenerować pliku libphp7.so wyświetlając poniższy komunikat:

configure: error: Cannot find libz

Jest to spowodowane brakiem narzędzia Xcode, które służy do generowania plików binarnych (i nie tylko) dla systemów macOS. To co musimy w takim przypadku zrobić, to uruchomić polecenie:

xcode-select --install

Po zakończeniu procesu instalacji, możemy kontynuować instalację nowej wersji PHP, zaczynając od przedostatniego kroku z listy wymienionej powyżej.

Podsumowanie

Instalacja nowej wersji PHP nie zdarza się często, a informacje dotyczące poprawnej instalacji (dostępne na innych stronach) są bardzo często niekompletne i człowiek niepotrzebnie marnuje potem czas na znalezienie sposobu na poprawną instalację nowszej wersji interpretera. Powyższa lista komend nigdy mnie nie zawiodła i na pewno będziesz w stanie uniknąć frustracji wynikających z niespodziewanych błędów.

Mam nadzieję, że z pomocą tego wpisu pomyślnie przejdziesz proces aktualizacji wersji PHP i nic nie stanie na przeszkodzie, aby zająć się tym co jest ważne, czyli kodowaniem. Zdaję sobie sprawę, że bardzo popularnym rozwiązaniem jest korzystanie z Dockera, ale w moim przypadku korzystanie z niego nie przynosi większych korzyści.

  • Michał

    Jeśli korzystasz z systemowego PHP zapewne nie korzystasz z oprogramowania typu MAMP, jaką przewagę nad tego typu rozwiązaniem ma Apache wbudowany w system?

  • nrm
  • Tak czy siak musisz zainstalować PHP za pomocą Homebrew. Nie jestem devem PHP, więc nie jestem w stanie odpowiedzieć czy to narzędzie, o którym wspominasz, jest użyteczne. Niemniej jednak, dla zwykłego fronendowca, domyślnie instalowany Apache + zaktualizowany PHP są zupełnie wystarczające.

  • Przewaga jest taka, że to wszystko jest domyślnie zainstalowane i nie trzeba dodawać więcej dodatkowych narzędzi. Poza tym, przy instalacji rozwiązań typu MAMP, na macOS mogą wystąpić problemy spowodowane tym, że w systemie są dwie różne wersje Apache. Kiedyś pokutowałem przez te problemy (to było dawno temu, po przejściu z Windows na maka). Musiałem wtedy trochę pogrzebać i porobić swoje skrypty, aby właściwe środowisko się uruchamiało. Potem więcej już nie instalowałem na maku tego typu rozwiązań.

  • Łukasz Tkacz

    Obecnie działam homebrew ale szczerze przy aktualizacji potrafi robić cyrki. Dlatego w ten weekend zdecydowałem się przenieść na vagranta.

  • Maciej B

    Używam hemebrew od 5 lat i nie maiłem z nim problemów. Z vagrantem też pracowałem i właśnie z nim miałem problemy 🙂 Najlepszym rozwiązaniem obecnie jest docker.