Installation PHP
Installation PHP
- Die Installation von Nginx hat hier ein eigenes Kapitel.
- Die Installation von Apache Worker hat hier ein eigenes Kapitel.
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
- http://www.ioncube.com/
- http://turck-mmcache.sourceforge.net/
- http://eaccelerator.net/
- http://pecl.php.net/package/bcompiler
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 🙂