Installation PHP

Installation PHP

cd /usr/ports/lang/php83
make install clean
┌────────────────────────┤php83-8.3.3├────────────────────────┐
│ 'F1' for Ports Collection help. │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │new [X] CGI Build CGI version │ │
│ │new [X] CLI Build CLI version │ │
│ │new [ ] DEBUG Build with debugging support │ │
│ │new [X] DTRACE Build with DTrace probes │ │
│ │new [X] EMBED Build embedded library │ │
│ │new [X] FPM Build FPM version │ │
│ │new [X] IPV6 IPv6 protocol support │ │
│ │new [X] LINKTHR Link thread lib (for threaded extensions)│ │
│ │new [X] MYSQLND Build with MySQL Native Driver │ │
│ │new [ ] NOASLR Disable ASLR support │ │
│ │new [X] PCRE Use system pcre instead of bundled one │ │
│ │new [ ] PHPDBG Interactive PHP debugger │ │
│ │new [ ] ZTS Force Zend Thread Safety (ZTS) build │ │
│ └─────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ [ OK ] [Cancel] │
└─────────────────────────────────────────────────────────────┘

Installation PHP Extensions

cd /usr/ports/lang/php5-extensions/
make install clean

Config Deinen Bedürfnissen anpassen. Bei mir sieht sie so aus:

   lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
   x Options for php5-extensions 1.6                                    x
   x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
   x x    [*] CALENDAR    calendar conversion support                 x x
   x x    [*] CTYPE       ctype functions                             x x
   x x    [*] CURL        CURL support                                x x
   x x    [*] FILEINFO    fileinfo support                            x x
   x x    [*] FILTER      input filter support                        x x
   x x    [*] FTP         FTP support                                 x x
   x x    [*] GD          GD library support                          x x
   x x    [*] HASH        HASH Message Digest Framework               x x
   x x    [*] IMAP        IMAP support                                x x
   x x    [*] JSON        JavaScript Object Serialization support     x x
   x x    [*] MBSTRING    multibyte string support                    x x
   x x    [*] MCRYPT      Encryption support                          x x
   x x    [*] MYSQL       MySQL database support                      x x
   x x    [*] MYSQLI      MySQLi database support                     x x <- besser für chat
   x x    [*] OPENSSL     OpenSSL support                             x x
   x x    [*] PCNTL       pcntl support (CLI only)                    x x <- besser für chat
   x x    [*] PDF         PDFlib support (implies GD)                 x x
   x x    [*] POSIX       POSIX-like functions                        x x
   x x    [*] PSPELL      pspell support                              x x
   x x    [*] SESSION     session support                             x x
 x x    [*] SIMPLEXML   simplexml support                           x x
   x x    [*] SOCKETS     sockets support                             x x
   x x    [*] TOKENIZER   tokenizer support                           x x
   x x    [*] XML         XML support                                 x x
   x x    [*] XMLREADER   XMLReader support                           x x
   x x    [*] XMLWRITER   XMLWriter support                           x x
   x x    [*] ZLIB        ZLIB support                                x x
   x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq100%qqqqj x
   tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
   x                   <  OK  >          <Cancel>                       x
   mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Ganz wichtig!! Damit mysql 5.5.x unter der neusten PHP Version auch funktioniert, muss man databases/php5-mysqli sowie databases/php5-mysql WITH_MYSQLND=1 kompilieren. Macht man das nicht, lastet php -v zu über 100% die CPU aus…

  lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
  x                   Options for php5-mysql 5.3.9                     x
  x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
  x x              [X] MYSQLND  Use MySQL Native Driver              x x
  tqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjqu
  x                       [  OK  ]       Cancel                        x
  mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Konfiguration

Session Verzeichnis erstellen

mkdir /tmp_www/phpsessions
chown www:www /tmp_www/phpsessions

php.ini

Am besten kopiere bestehendes eigenes php.ini. Falls noch kein eigenes php.ini vorhanden ist, kopiere die Vorlage von PHP und passe sie Deinen Bedürfnissen an:

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
vi /usr/local/etc/php.ini
   memory_limit = 50M
   upload_max_filesize = 10M
   session.save_path = /tmp_www/phpsessions
   include_path = "/www/server/phpincludes:/www/server/phpinclude"
   upload_tmp_dir = /tmp_www
   register_globals = ON
   ;extension_dir = "./"

httpd.conf

# vi /www/server/apache/httpd.conf

Mit diesem Inhalt ergänzen:

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi .php .php3
  FCGIWrapper /usr/local/bin/php-cgi .php
  SocketPath /var/run/fcgidsock/
  IPCConnectTimeout 10
  IPCCommTimeout 20
  OutputBufferSize 0
  FcgidIPCDir /var/run/mod_fcgid
  FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
</IfModule>

<Files ~ (.php)>
SetHandler fcgid-script
FCGIWrapper /usr/local/bin/php-cgi .php
Options +ExecCGI
allow from all
</Files>

php-fpm.conf (nur bei NGINX Konfiguration)

vi /usr/local/etc/php-fpm.conf

Folgende Zeile anpassen:

 ;listen = 127.0.0.1:9000
listen = /tmp/php-fpm.sock

Weitere Infos und Beispiele von php-fpm gibt es hier.

rc.conf (nur bei NGINX Konfiguration)

vi /etc/rc.conf

Mit diesem Eintrag ergänzen:

#-----------------------------------------------#
#       PHP                                     #
#-----------------------------------------------#
php_fpm_enable="YES"

Starten

auch hier – php-fpm braucht man nur zu starten bei einer Nginx Konfiguration. Bei Apache verwenden wir mod_fcgid.

/usr/local/etc/rc.d/php-fpm start
/usr/local/etc/rc.d/apache22 start

Alias hinzufügen

Damit man php später etwas schneller restarten kann ein Alias / Shortcut einrichten in der .bashrc

vi ~/.bashrc
alias phpctl='/usr/local/etc/rc.d/php-fpm'

nun kann man per

# phpctl restart

PHP restarten / stoppen etc.

Zusätzliche PHP PCEL Plugins

WICHTIG BEI PHP UPGRADES

Neu kann man das einfacher installieren:

pkg install pecl-runkit

 

Wichtig ist, dass bei jedem PHP Update auch diese Plugins wieder neu konfiguriert werden. Sonst läufts nicht! Einfach (pro Plugin) Neuinstallation machen. Hier ein Beispiel anhand von runkit:

cd /usr/local/software/runkit/pecl/runkit
make clean
phpize
./configure
make
make test
make install

Upload Progress Meter

runkit – Superglobals

Memcache

  • Installation Memcache

APC

Expired: läuft nicht mehr ab PHP Version PHP 5.5+ / kein Support mehr unter lang/php56

APC ist ein PHP Cache (wie z.B. auch eAccelerator). Durch die Verwendung vom APC Cache können PHP Seiten im Durchschnitt bis zu 10x schneller geladen werden. APC wird vom PHP Team weiterentwickelt und wird wahrscheinlich ab PHP 6 bereits in PHP integriert sein. Der eAccelerator hat zwar in Benchmark Tests oft ein wenig besser als APC abgeschnitten. Die Tatsache jedoch, dass mittlerweile viele ehemalige begeisterte eAccelerator Nutzer seit dem letzten Release 0.9.6 aus Enttäuschung zu APC gewechselt sind, hat mich dazu bewegt mich für APC zu entscheiden.

Die Installation geht schnell, hat aber einen sehr grossen Impact 🙂

cd /usr/ports/www/pecl-APC
make install clean

Zusätzliche Options habe ich keine enabled.

Im Extensions File /usr/local/etc/php/extensions.ini sollte APC nach der Installation nun automatisch eingefügt worden sein:

extension=apc.so

Die Installation ist hiermit bereits abgeschlossen. php-fpm restarten und APC ist bereits in phpinfo() aufgeführt. Die default Settings kann man natürlich im php.ini bei Bedarf entsprechend anpassen. Hier gehts zu den APC Konfigurations-Optionen.

Für ein optimales APC Tuning, kann man die APC Cache Usage auch Monitoren. Hier ein guter Artikel dazu.

Module wieder deinstallieren

Will man gleich alle Extensions wieder deinstallieren (z.B. für die Fehlersuche) geht das einfach so:

pkg_delete -vdr php5-*

Ansonsten jedes einzelne…

cd /usr/ports/

z.b. suchen wir php4-gd:

make search name=php4-gd

output:

Port:   php4-gd-4.4.0
Path:   /usr/ports/graphics/php4-gd
Info:   The gd shared extension for php
Maint:  ale@FreeBSD.org
B-deps: apache-1.3.33_2 autoconf-2.59_2 expat-1.95.8_3 fontconfig-2.2.3,1 freetype2-2.1.10_1 jpeg-6b_3 m4-1.4.3 perl-5.8.7 php4-4.4.0 pkgconfig-0.17.2 png-1.2.8_2 t1lib-5.0.1,1 xorg-libraries-6.8.2
R-deps: apache-1.3.33_2 expat-1.95.8_3 fontconfig-2.2.3,1 freetype2-2.1.10_1 jpeg-6b_3 perl-5.8.7 php4-4.4.0 pkgconfig-0.17.2 png-1.2.8_2 t1lib-5.0.1,1 xorg-libraries-6.8.2
WWW:    http://www.php.net/

wenn wir es jetzt deinstallieren wollen, gehe zu

cd /usr/ports/graphics/php4-gd
make deinstall clean

falls noch alte configs vorhanden sind, eventuell ebenfalls entfernen

make rmconfig

Zend Optimizer  & FreeBSD

Zend wird für FreeBSD nicht mehr weiterentwickelt. Weitere Infos dazu gibts hier. xCache wurde mir als Alternative empfohlen:

http://xcache.lighttpd.net/

und zum encoden (verschlüsseln) wäre das ev. noch eine variante: http://www.rssoftlab.com/downloads.php

Weitere Zend Alternativen

Dieses Projekt ist nochmals anders

Es nimmt den bestehenden PHP Code und schreibt alle Funktionen etc. um, so dass es ein normalsterblicher nicht mehr lesen kann. Es wird aber nicht auf die Art codiert, wie zend es macht.

*NEU* Alternativer Zend Optimizer Port für FreeBSD

Seit kurzem gibt es einen alternativen FreeBSD Port vom Zend Optimizer. Weitere Infos dazu gibt es auf der Seite von phaq.

Installation:

cd /usr/ports/devel
fetch -o- http://phaq.phunsites.net/files/2013/02/ZendOptimizerPlus.tgz | tar -xzpvf -
cd /usr/ports/devel/ZendOptimizerPlus
make install clean

Fertig 🙂

Weitere Infos hier: http://phaq.phunsites.net/2013/02/16/inofficial-freebsd-port-for-zend-optimizer-plus/

Fehlerbehebung

Problembehebung bei Extensions

Läuft php nicht mehr korrekt, nach der Install mehrerer Extensions nicht mehr, muss getestet werden, was genau nicht geht. Dazu im File

vi /usr/local/etc/php/extensions.ini

eine Extension nach der anderen auskommentieren und jeweils mit

php -v

testen, obs danach geht. Fehlerhafte Extension reparieren oder deinstallieren.

PNG Problem nach Update

Nach einem Update kann es vorkommen, dass die PNG Scripts (imagecreatefrompng etc.) nicht mehr funktionieren. Dynamisch generierte Fotos (z.B. mit Watermark) können dann nicht mehr angezeigt werden.

Lösung:

portupgrade -fr png-1.2.40

Unknown(): Unable to load dynamic library

Beim Apache restart kommen solche Fehler:

root@testserver(/www/server/bin)> tail -f /var/log/httpd-error.log 
PHP Warning:  Unknown(): Unable to load dynamic library './ftp.so' - Cannot open "./ftp.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './gd.so' - Cannot open "./gd.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './imap.so' - Cannot open "./imap.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './mcrypt.so' - Cannot open "./mcrypt.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './mhash.so' - Cannot open "./mhash.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './pdf.so' - Cannot open "./pdf.so" in Unknown on line 0
PHP Warning:  Unknown(): Unable to load dynamic library './sockets.so' - Cannot open "./sockets.so" in Unknown on line 0
[Wed Sep 14 17:42:18 2005] [notice] Apache/2.0.54 (FreeBSD) PHP/4.4.0 mod_ssl/2.0.54 OpenSSL/0.9.7e configured -- resuming normal operations
[Wed Sep 14 17:46:16 2005] [notice] SIGHUP received.  Attempting to restart
[Wed Sep 14 17:46:18 2005] [notice] Apache/2.0.54 (FreeBSD) PHP/4.4.0 mod_ssl/2.0.54 OpenSSL/0.9.7e configured -- resuming normal operations

Lösung:

vi /usr/local/etc/php.ini

die Zeile muss auskommentiert sein

;extension_dir = "./"
apachectl restart

Segmention fault (pspell)

Pspell generiert unter FreeBSD einen Segmention Fault. Anfangs konnte man dies korrigieren, indem man Zend einfach nicht benutzte. Seit der PHP Version 5.2.11 jedoch, nützt dies nichts mehr, da Zend anscheinend trotzdem benutzt wird.

Die Lösung des Problems ist jedoch einfach: im File

/usr/local/etc/php/extensions.ini

muss

extension=pspell.so

am ENDE DER LISTE stehen. Dann gehts und wir können sogar den Zend Optimizer wieder ganz normal nutzen.

Siehe Bugreports für weitere Infos:

Invalid command ‚php_admin_flag‘, perhaps misspelled or defined by a module not included in the server configuration

Wenn wir Apache als Worker laufen lassen und PHP per php-fpm angesprochen wird – also PHP nicht als Apache Modul läuft, funktionieren die PHP Direktiven im httpd.conf (oder .htaccess) nicht!

Ab PHP 5.3.0 gibt es jedoch die .user.ini Datei, die ähnlich wie .htaccess funktioniert.

Aber achte unbedingt auf die korrekte Schreibweise:

.htaccess

php_flag register_globals on

httpd.conf

php_admin_flag register_globals 0n

.user.ini

register_globals=on 

Weitere Infos dazu gibts im PHP Manual.

 

PHP Versions Upgrade

Bevor man upgraded, unbedingt vorher die Liste aller installierten PHP Ports / Extensions speichern:

pkg info php7* > ~/installed-php-ports-list

Jetzt neuen Port am besten parallel installieren, damit man vorher noch testen kann bevor wir mit der neuen Version live gehen.

Mehrere PHP Versionen parallel installieren

Testen

Jetzt am besten mal PHP output testen:

php -v

Wenn jetzt Fehlermeldungen kommen, beheben:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/overload.so' - Cannot open "/usr/local/lib/php/20060613/overload.so" in Unknown on line 0
PHP 5.2.5 with Suhosin-Patch 0.9.6.2 (cli) (built: Dec  4 2007 10:37:36) 
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

ok, die Overload extension gibt es in php5 nicht mehr.

vi /usr/local/etc/php/extensions.ini

delete line:

extension=overload.so

nochmals testen:

% php -v
PHP 5.2.5 with Suhosin-Patch 0.9.6.2 (cli) (built: Dec  4 2007 10:37:36) 
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Restart

Restart Apache. Fertig.

Mehrere PHP Versionen nebeneinander auf einem Server installieren

Manchmal ist es hilfreich, vor dem endgültigen Upgrade die Webs auf Kompatibiliät auf die neue PHP Version testen zu können. Dazu kann man auf einem Webserver gleichzeitig mehrere PHP Versionen installieren und die Testumgebung mit der gewünschten Version starten.

Dazu muss man die Installation über die Ports nutzen – leider geht es nicht über den Package Install (pkg).

In diesem Beispiel habe ich php56 installiert, zum Testen möchte ich nun PHP7.0 zusätzlich installieren.

Beachte: über die Ports kann man alte Versionen nur so lange installieren, wie sie von FreeBSD zur Verfügung gestellt werden. Sind sie also in den Ports nicht mehr vorhanden, muss der gewünschte Tarball direkt von PHP heruntergeladen und kompiliert werden.

Installation über Ports

als erstes das ins make.conf rein machen:

vi /etc/make.conf
#alternative php versionen
# PHP_ALT=php52 php53 php55 php70 php71
PHP_ALT=php56 php73 php83
.for port in ${PHP_ALT}
.if ${.CURDIR:M*/ports*/*/${port}*}
DISABLE_CONFLICTS=YES
PREFIX=/usr/local/${port}
PHPBASE=/usr/local/${port}
LOCALBASE=/usr/local
#CONFIGURE_ARGS+=--datadir=/usr/local/${port}/share
#CONFIGURE_ARGS+=--bindir=/usr/local/${port}/bin
#CONFIGURE_ARGS+=--with-config-file-scan-dir=/usr/local/${port}/etc/php
.endif
.endfor

jetzt installieren:

cd /usr/ports/lang/php56
make config
   lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
  x Options for php56-5.6.40                                           x
   x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
   x x [*] CLI        Build CLI version                               x x
   x x [*] CGI        Build CGI version                               x x
   x x [*] FPM        Build FPM version (experimental)                x x
  x x [*] EMBED Build embedded library          x x
  x x [ ] PHPDBG                            x x
   x x [ ] DEBUG      Enable debug                                    x x
  x x [ ] DTRACE Enable DTrace support                x x
  x x [*] IPV6       Enable ipv6 support                             x x
   x x [*] MAILHEAD   Enable mail header patch                        x x
   x x [*] LINKTHR    Link thread lib (for threaded extensions)       x x
  x x [ ] ZTS Force Zend Thread Safety (ZTS) build                x x
   x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
   tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
   x                   <  OK  >          <Cancel>                       x
   mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

#braucht es nicht mehr wegen dem make.conf
#make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 install clean DISABLE_CONFLICTS=1

make install clean
cd /usr/ports/lang/php70-extensions/
make config
make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 install clean

Wichtig! Jetzt Pakete locken:

pkg lock php70
pkg lock php70-extensions

Wenn wir jetzt noch PECL Extensions haben, diese auch noch installieren und LOCKEN!

cd /usr/ports/graphics/pecl-imagick
make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 install clean
pkg lock php70-pecl-imagick
cd /usr/ports/print/pecl-pdflib
make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 install clean
pkg lock php70-pecl-pdflib

PHP56

Nettweise hat jemand ein Backup des alten FreeBSD Ports gemacht:

https://github.com/mariancerny/freebsd-ports-php56

So lässt sich PHP56 im Nachhinein trotzdem noch installieren. Das make.conf File so anpassen wie oben beschrieben:

mkdir -p /opt/ports/php56
git clone https://github.com/mariancerny/freebsd-ports-php56.git /opt/ports/php56

damit man alle abhängigkeiten mitinstallieren kann:

mount -t unionfs /opt/ports/php56 /usr/ports

danach weiter wie oben beschrieben mit (PREFIX müssen wir nicht angeben, da wir das ja schon im make.conf reingeschrieben haben)

cd /usr/ports/lang/php56
make config
make -j3
make -j3 test
make -j3 install


etc.

 

Installation über Tarball

Kopiere den Link zum gewünschten Tarball von der PHP Download Page. Wenn ich nun PHP56 installieren möchte, installiere ich alles ins /usr/local/php56 Verzeichnis. Beachte den OpenSSL Pfad -> dieser zeigt auf eine alte openssl Version, die von php56 benötigt wird.

mit „make -j3“ sage ich, dass 3 kerne für die kompilierung verwendet werden sollen

cd /usr/local/software
fetch https://www.php.net/distributions/php-5.6.40.tar.gz
tar xfzv php-5.6.40.tar.gz
cd php-5.6.40
./configure --prefix=/usr/local/php56 --with-openssl=/usr/local/openssl-unsafe --enable-libxml --enable-mysqlnd --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-embed --with-regex=php --with-zend-vm=CALL --localstatedir=/var --enable-opcache --enable-calendar --with-curl --with-gd --enable-ftp --enable-mbstring --with-mcrypt --with-mysql --with-mysqli --enable-mysqlnd --enable-pcntl --with-pspell --enable-sockets --with-zlib
make -j3
make -j3 install clean

Alte OpenSSL Version installieren für php56

Beachte: php56 läuft nicht mit der aktuellen openssl Version. Daher müssen wir parallel noch eine alte Version installieren. Diese wird in den Ports bereitgestellt 🙂

pkg install openssl-unsafe-1.0.2.20170706

Die alte openssl version wird parallel zur aktuellen Version nach /usr/local/openssl-unsafe/ installiert.

 

Fehlermeldungen

Da wir ja parallel installieren, kann es bei den Extensions teilweise Probleme geben:

===>  Staging for pecl-pdflib-4.1.1
===>   pecl-pdflib-4.1.1 depends on file: /usr/local/php70/include/php/main/php.h - found
===>   pecl-pdflib-4.1.1 depends on file: /usr/local/php70/lib/php/20151012/gd.so - found
===>   Generating temporary packing list
====> Compressing man pages (compress-man)
===>  Installing for pecl-pdflib-4.1.1
===>  Checking if pecl-pdflib already installed
===>   pecl-pdflib-4.1.1 is already installed
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of pecl-pdflib
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/print/pecl-pdflib
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/lang/php70-extensions
*** Error code 1

Stop.
make: stopped in /usr/ports/lang/php70-extensions

Ein einfaches make deinstall und make reinstall funktioniert hier nicht – wir wollen ja die live-version nicht deinstallieren. Für mich hat das funktioniert:

cd /usr/ports/print/pecl-pdflib
make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 reinstall

Und danach gehts weiter mit der Installation

cd /usr/ports/lang/php70-extensions/
make PREFIX=/usr/local/php70 PHPBASE=/usr/local/php70 install clean

Konfiguration

Per default hört php-fpm auf Port 9000. Die zusätzliche Version muss nun natürlich auf einem anderen Port hören. z.B. 9010

vi /usr/local/php70/etc/php-fpm.d/www.conf

hier

listen = 127.0.0.1:9000

auf

listen = 127.0.0.1:9070

(oder einen anderen gewünschten Port) ändern. Ich mache gerne 90<phpversion> also für php 70 gibts Port 9070, php72 Port 9072 etc.

In Nginx nun bei den gewünschten Hosts auf den neuen Port pointen:

    server {
        listen       443 ssl;
        ssl on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        server_name  sandbox.mydomain.com;
        root         /www/mydomain.com/sandbox;

   ssl_certificate /global/configs/letsencrypt_data/live/www.mydomain.com/fullchain.pem;
   ssl_certificate_key /global/configs/letsencrypt_data/live/www.mydomain.com/privkey.pem;

        # -- added -- php 7.0 testen
        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9010;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  "${document_root}${fastcgi_script_name}";
            include        fastcgi_params;
        }
# eof php 7.0 testing

        # include my global configuration file
        include global/globals.server;


    }

Dann noch ein paar Änderungen, damit php-fpm nicht mit der live Version in Konflikt gerät:

vi /usr/local/php70/etc/php-fpm.conf

Im PID File Versionshinweis hinzufügen:

pid = run/php70-fpm.pid

 

mv /usr/local/php70/etc/rc.d/php-fpm /usr/local/php70/etc/rc.d/php70-fpm
vi /usr/local/php70/etc/rc.d/php70-fpm

auch hier noch mit Version ergänzen, damit man es starten kann:

name="php70_fpm"
rcvar=php70_fpm_enable
pidfile="/var/run/php70-fpm.pid"

Startfile richtig verlinken

cd /usr/local/etc/rc.d/
ln -s /usr/local/php70/etc/rc.d/php70-fpm .
vi /etc/rc.conf

noch folgendes hinzufügen:

php70_fpm_enable="YES"

Beim PHP.INI nehme ich einfach mein bestehendes:

cd usr/local/php70/etc
ln -s /global/configs/php.ini.corky php.ini

 

Nun alles starten / restarten und testen:

/usr/local/etc/rc.d/php70-fpm start
nxctl restart

Referenz: http://www.ondrejsimek.com/blog/running-multiple-php-versions-is-so-easy-with-fastcgi/

Composer mit anderer Version laufen lassen

Ich hatte das Problem, dass gewisse Pakete nur noch ab PHP Version 7.0 kompatibel waren.

php composer.phar update
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for genkgo/camt dev-master -> satisfiable by genkgo/camt[dev-master].
    - genkgo/camt dev-master requires php ^7.0 -> your PHP version (5.6.30) does not satisfy that requirement.

Hier sollte man natürlich vorher abwägen, inwiefern es safe ist, das update der Pakete mit PHP 7 zu forcieren. Hier war es nur aufgrund von phpunit – somit geht das schon 😉

/usr/local/php70/bin/php composer.phar update

Wenn man sich von PHP 5 noch nicht komplett verabschieden kann, kann man natürlich auch 2 verschiedene libraries laufen lassen. Eine, die unter php 5.x und eine die unter php 7.x installiert wird.

Also werden die Composer files für PHP 5.x Webseiten unter

class/Composer_PHP5/vendor/

generiert und für die PHP 7 webseiten zusätzlich unter

class/vendor/

Referenzen

Meine Konfiguration von PHP mit Apache Worker basiert auf diesem Artikel. Danke dafür 🙂

 

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben