Uppgradera din Linux Server till PHP 7.0

Vad du ska skapa

Täck bild via PONTIER

Introduktion

PHP 7 släpptes i december förra året. När du har testat din kod lokalt för att köra på den är det dags att uppgradera din produktionsserver. Generellt fann jag att de flesta av mina webbplatser fungerar bra på den.

Jag misstänker emellertid att inte många webbplatser har uppgraderats än. Det är ofta säkrare och lättare att stanna på äldre utgåvor. Faktum är att en undersökning av WordPress-webbplatser visade att få har:

"Från och med november 2016 kör 52,9% av WordPress-webbplatser en PHP-version med mindre PHP 5.5. Endast 3,4% av WordPress-webbplatser kör PHP 7, den nuvarande huvudversionen av PHP." via PHP Compatibility Checker.

Men PHP 7 har nu varit ute i nästan ett år. 

I dagens avsnitt går jag igenom mina rekommenderade inställning för att uppgradera till PHP 7 på Ubuntu 14.x och lösa problem med PHPMyAdmin, vilket många tidiga uppgraderare stötte på.

Vid den här tiden, om du använder WordPress, installera plug-in för PHP Compatibility Checker för att säkerställa att du inte kommer att stöta på några oväntade problem med din mängd plugins.

Jag uppskattar alltid dina idéer och feedback. Om du har en fråga eller ett ämnesförslag, vänligen lägg in dina tankar i kommentarerna nedan.

Du kan också nå mig på Twitter @ reifman direkt. Detta gäller särskilt med populära uppgraderingsskript som den här, där användarens egna erfarenheter och inmatningar kommer att vara unika och värdefulla.

Uppgradering av din server

Jag försökte använda några standardguider för att uppgradera PHP 7 och stötte på en rad olika problem. Så de skript som jag delar med dig nedan har testats upprepade gånger, och jag tror vad jag presenterar kommer att fungera bra för dig.

Återigen uppskattade jag mycket Digital Ocean, vilket gör det enkelt att säkerhetskopiera min server och upprepade gånger skapa testinstanser för att springa igenom uppgraderingssteg från början.

Låt oss börja.

Notera eventuella anpassningar till PHP 5

Vid denna tidpunkt kanske du vill notera dina PHP .ini anpassningar och eventuellt säkerhetskopiera din php.ini-fil eftersom du senare måste migrera dessa till PHP 7.

Det här hjälper dig att hitta din .ini-fil:

$ php --ini

Detta visade mig:

$ php --ini PHP Varning: PHP Startup: Kan inte ladda dynamiskt bibliotek '/usr/lib/php5/20121212/newrelic.so' - /usr/lib/php5/20121212/newrelic.so: kan inte öppna delad objektfil: Ingen sådan fil eller katalog i Okänd på rad 0 Konfigurationsfil (php.ini) Sti: / etc / php5 / cli Lastad konfigurationsfil: /etc/php5/cli/php.ini Skanna efter ytterligare .ini-filer i: / etc / php5 / cli / conf.d ... 

För Apache var minen i / Etc / php5 / apache2.

Ta bort PHP5 och relaterade paket

Låt oss först rena alla våra äldre PHP-paket. Jag fann att det var bäst att göra det noggrant, vilket inte bara täckte PHP5 men också 5.5 och 5.6, som jag hade experimenterat med på min server.

$ sudo apt-get -y rena php php-common php-mcrypt php-mbstring $ sudo apt-få-rena php5 php5-vanliga php5-cli libapache2-mod-php5 php5-curl php5-gd php5-imap php5-intl php5-mysql php5-pspell php5-readline php5-sqlite $ sudo apt-få-rena php5.5 php5.5-vanliga php5.5-mcrypt php5.5-mbstring $ sudo apt-get - och rena php5.6 php5.6-common $ sudo apt-get autoremove 

När jag inte renade alla dessa variationer av PHP, gick jag in i problem som senare försökte konfigurera PHP 7. Om du har ett enkelt tillvägagångssätt, snälla dela det i kommentarerna.

Lägga till ett personligt paketarkiv för PHP7 och PHPMyAdmin

$ sudo add-apt-repository ppa: ondrej / php Co-installerbara PHP-versioner: PHP 5.5, 5.6, PHP 7.0 och batterier ingår. Du kan få mer information om paketet på https://deb.sury.org För PHP 5.4 på Ubuntu 12.04 Användning: PPA: Ondrej / Php5-oldstable BUGS & FUNKTIONER: Denna PPA har nu en frågespårare: https: //deb.sury .org / # bug-rapportering VÄLKOMMEN LÄS: Om du gillar mitt arbete och vill ge mig lite motivation, vänligen överväga att donera regelbundet: https://donate.sury.org/ VARNING: add-apt-repository är bruten med icke -UTF-8-platser, se https://github.com/oerdnj/deb.sury.org/issues/56 för lösningen: # LC_ALL = C.UTF-8 add-apt-repository ppa: ondrej / php Mer information: https://launchpad.net/~ondrej/+archive/ubuntu/php Tryck på [ENTER] för att fortsätta eller ctrl-c för att avbryta lägga till det gpg: keyring '/tmp/tmpj6czswxr/secring.gpg' skapade gpg: nyckelring / tmp / tmpj6czswxr / pubring.gpg 'skapade gpg: begärande nyckel E5267A6C från hkp-server keyserver.ubuntu.com gpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb skapade gpg: nyckel E5267A6C: offentlig nyckel "Launchpad PPA för Ondřej Surý" importerad gpg: Totalt antal bearbetade: 1 gpg: importerat: 1 (RSA: 1) OK 

Och sedan uppdaterade jag mina paket och distribution och renade alla återstående filer:

$ sudo apt-get update $ sudo apt-få dist-uppgradera $ sudo apt-get autoremove

Du kan se fel på följande sätt:

Länken /vmlinuz.old är en skadad länk Ta bort symbolisk länk vmlinuz.old du kan behöva åter köra din startlastare [grub]

Jag valde att starta om på den här tiden, och det tycktes fungera:

$ sudo omstart

Installera PHP7

Därefter installerar vi PHP7 och alla dess paket:

sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php-apcu php7.0-gd php7.0-mcrypt php-memcache php7.0-curl php7.0-städad php-xml php -json php7.0-mbstring php-gettext libmcrypt-dev mcrypt php-gd libmcrypt4 libmhash2 libtidy5 libxslt1.1 php-apcu-bc php-pär php7.0-mbstring php7.0-xml

Vid denna tidpunkt vill du migrera alla ändrade inställningar i dina konfigurationsfiler till /etc/php/7.0/apache2/php.ini.

Jag behövde också lägga till extension = apc.so till min php.ini-fil:

$ sudo nano /etc/php/7.0/apache2/php.ini

Jag klistrade in det här:

; extension = php_pens_db; extension = php_pdo_pg.dll; extension = php_pdo_mysql.dll; extension = php_pdo_oci.dll; extension = php_pdo_odbc.dll; extension = php_pdo_pgsql.dll; extension = php_pdo_sqlite.dll; extension = php_pgsql.dll; = php_shmop.dll extension = apc.so

Inaktiverar PHPMyAdmin

Vid denna punkt, om du kör PHPMyAdmin får du problem med att ladda Apache igen. Om så är fallet måste du avaktivera PHPMyAdmin:

$ sudo nano /etc/apache2/apache2.conf

Kommentera raden som laddar den längst ner:

# Inkludera kataloger ignorerar redaktörernas och dpkgs backupfiler, # se README.Debian för detaljer. # Inkludera generella utdrag av uttalanden IncludeOptional conf-enabled / *. Conf # Inkludera de virtuella värdkonfigurationerna: IncludeOptional sites-enabled / *. Conf # vim: syntax = apache ts = 4 sw = 4 sts = 4 sr noet # Inkludera / etc /phpmyadmin/apache.conf

Då aktiverade jag mcrypt och mbstring och startade sedan Apache:

$ sudo phpenmod mcrypt $ sudo phpenmod mbstring $ sudo service apache2 omstart

Jag testade detta på en server som körde appar som byggdes på endast HTML, för PHP och för Yii1.x, och alla arbetade.

Installera om PHPMyAdmin

Låt oss sedan reparera PHPMyAdmin-installationen. Många människor kämpade med detta.

Först lade jag till paketförvaret av nijel:

$ sudo add-apt-repository ppa: nijel / phpmyadmin Senaste phpMyAdmin-paket - https://www.phpmyadmin.net/. Baserat på paket som finns i Debian. Det finns några anmärkningsvärda förändringar: * det kräver för närvarande uppdaterade PHP-paket, du kan få paket från https://launchpad.net/~ondrej/+archive/ubuntu/php/ * det innehåller inbäddade kopior av PHP-bibliotek Om du gillar phpMyAdmin , kan du stödja det vidareutveckling på https://www.phpmyadmin.net/donate/ eller https://www.phpmyadmin.net/sponsors/, tack! Mer information: https://launchpad.net/~nijel/+archive/ubuntu/phpmyadmin Tryck på [ENTER] för att fortsätta eller ctrl-c för att avbryta lägga till det gpg: keyring '/tmp/tmp6zix40vr/secring.gpg' skapade gpg: keyring '/tmp/tmp6zix40vr/pubring.gpg' skapade gpg: begärande nyckel 06ED541C från hkp-server keyserver.ubuntu.com gpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb skapade gpg: nyckel 06ED541C: public key "Launchpad PPA för Michal Čihař "importerade gpg: inga tillförlitliga nycklar hittades gpg: Totalt antal bearbetade: 1 gpg: importerade: 1 (RSA: 1) OK 

Sedan uppdaterade jag paketen och installerade PHPMyAdmin:

$ sudo apt-få uppdatering $ sudo apt-get installera phpmyadmin 

Obs! Det här återställer fortfarande en massa äldre PHP 5.x-paket, men PHPMyAdmin kommer till slut att fungera.

Sedan uncommented jag PHPMyAdmin-linjen som vi kommenterade ovan.

$ sudo nano /etc/apache2/apache2.conf

Här:

# Inkludera kataloger ignorerar redaktörernas och dpkgs backupfiler, # se README.Debian för detaljer. # Inkludera generella utdrag av uttalanden InkluderaOptional conf-enabled / *. Conf # Inkludera de virtuella värdkonfigurationerna: IncludeOptional sites-enabled / *. Conf # vim: syntax = apache ts = 4 sw = 4 st = 4 sr noet Inkludera / etc / phpmyadmin / apache.conf

Och jag startade om Apache:

$ sudo service apache2 omstart

Säkra din PHPMyAdmin-installation

Detta installerade PHPMyAdmin tillbaka till standardplatsen, vilket är mycket osäkert och hackbart. Vänligen följ Installera och använda PHPMyAdmin Med WordPress för att bättre säkra din installation.

Verifiera PHP 7 körs

Efteråt byggde jag en liten phpinfo (); fil för att verifiera PHP 7 var aktiv:

I stängning

Uppgradering till PHP 7 på min befintliga Ubuntu 14.x var problematisk och krävde många ändringar från de publicerade skripten för att få rätt. Jag hoppas att du hittar dagens handledning till hjälp.

Om du tyckte om det här, vänligen titta på kommande handledning i vår Programmering med Yii2-serien och bygga din start med PHP-serien, som dokumenterar processen att bygga upp min start, mötesplanerare.

Du kan också följa mig @ reifman på Twitter eller kolla min instruktörssida för uppdateringar. 

relaterade länkar

  • Den viktigaste PPA för PHP (5.5, 5.6, 7.0) med många PECL-förlängningar (Ondřej Surý)
  • WordPress Plugin PHP Kompatibilitet Checker
  • Installera och använda PHPMyAdmin med WordPress (Envato Tuts +)