Aggiornamento del tuo server Linux a PHP 7.0

Cosa starai creando

Immagine di copertina tramite PONTIER

introduzione

PHP 7 è stato rilasciato lo scorso dicembre. Una volta testato il codice in locale per eseguirlo, è ora di aggiornare il server di produzione. In generale, ho scoperto che la maggior parte dei miei siti funziona bene.

Tuttavia, sospetto che non molti siti siano ancora aggiornati. Spesso è più sicuro e più semplice rimanere nelle versioni precedenti. Infatti, un sondaggio su siti WordPress ha mostrato che pochi hanno:

"A novembre 2016, il 52,9% dei siti Web WordPress esegue una versione PHP meno PHP 5.5. Solo il 3,4% dei siti Web WordPress esegue PHP 7, l'attuale versione principale di PHP." tramite PHP Compatibility Checker.

Ma PHP 7 è uscito da quasi un anno. 

Nell'episodio di oggi, ti guiderò attraverso il mio approccio raccomandato per l'aggiornamento a PHP 7 su Ubuntu 14.x e la risoluzione dei problemi con PHPMyAdmin, a cui sono finiti molti primi sviluppatori.

Al momento, se utilizzi WordPress, installa il plug-in Controllo compatibilità PHP per assicurarti che non si verifichino problemi imprevisti con l'array di plug-in.

Apprezzo sempre le tue idee e feedback. Se hai una domanda o un suggerimento sull'argomento, per favore pubblica i tuoi pensieri nei commenti qui sotto.

Puoi anche raggiungermi su Twitter direttamente @reifman. Questo è particolarmente vero con gli script di aggiornamento più diffusi come questo, in cui l'esperienza e l'input degli utenti saranno unici e preziosi.

Aggiornamento del server

Ho provato ad utilizzare alcune guide standard per l'aggiornamento di PHP 7 e ho incontrato una serie di problemi diversi. Quindi gli script che condivido con te sono stati testati ripetutamente e credo che ciò che sto presentando funzionerà bene per te.

Ancora una volta, ho apprezzato molto Digital Ocean, che semplifica il backup del mio server e crea ripetutamente istanze di test per l'esecuzione da zero dei passaggi di aggiornamento.

Iniziamo.

Nota Qualsiasi personalizzazione in PHP 5

A questo punto potresti voler prendere nota delle personalizzazioni PHP .ini e possibilmente eseguire il backup del tuo file php.ini, poiché in seguito dovrai migrare questi in PHP 7.

Questo dovrebbe aiutarti a trovare il tuo file .ini:

$ php --ini

Questo mi ha mostrato:

$ php --ini Avviso PHP: avvio PHP: impossibile caricare la libreria dinamica '/usr/lib/php5/20121212/newrelic.so' - /usr/lib/php5/20121212/newrelic.so: impossibile aprire il file oggetto condiviso: Nessun file o directory in Unknown on line 0 File di configurazione (php.ini) Percorso: / etc / php5 / cli File di configurazione caricato: /etc/php5/cli/php.ini Ricerca di file .ini aggiuntivi in: / etc / php5 / cli / conf.d ... 

Per Apache, il mio era dentro / Etc / php5 / apache2.

Rimuovi PHP5 e pacchetti correlati

Per prima cosa, eliminiamo tutti i nostri pacchetti PHP precedenti. Ho scoperto che era meglio farlo a fondo, coprendo non solo PHP5 ma anche 5.5 e 5.6, che avevo sperimentato sul mio server.

$ sudo apt-get -y purge php php-comune php-mcrypt php-mbstring $ sudo apt-get -y purge php5 php5-comune php5-cli libapache2-mod-php5 php5-curl php5-gd php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-pspell php5-readline php5-sqlite $ sudo apt-get -y purge php5.5 php5.5-comune php5.5-mcrypt php5.5-mbstring $ sudo apt-get - y purge php5.6 php5.6-common $ sudo apt-get autoremove 

Quando non ho eliminato tutte queste varianti di PHP, ho avuto dei problemi in seguito cercando di configurare PHP 7. Se hai un approccio semplice, condividilo nei commenti.

Aggiunta di un archivio di pacchetti personali per PHP7 e PHPMyAdmin

$ sudo add-apt-repository ppa: ondrej / php Versioni PHP co-installabili: PHP 5.5, 5.6, PHP 7.0 e batterie incluse. Puoi ottenere maggiori informazioni sui pacchetti su https://deb.sury.org Per PHP 5.4 su Ubuntu 12.04 usa: ppa: ondrej / php5-oldstable BUGS & FEATURES: Questo PPA ora ha un tracker di problemi: https: //deb.sury .org / # bug-reporting PER FAVORE LEGGI: ​​Se ti piace il mio lavoro e vuoi darmi un po 'di motivazione, ti preghiamo di considerare la donazione regolarmente: https://donate.sury.org/ ATTENZIONE: add-apt-repository è rotto con non -Fine locali UTF-8, vedere https://github.com/oerdnj/deb.sury.org/issues/56 per soluzione alternativa: # LC_ALL = C.UTF-8 add-apt-repository ppa: ondrej / php Altre informazioni: https://launchpad.net/~ondrej/+archive/ubuntu/php Premere [INVIO] per continuare o ctrl-c per annullare l'aggiunta di gpg: keyring '/tmp/tmpj6czswxr/secring.gpg' creato gpg: keyring '/ tmp / tmpj6czswxr / pubring.gpg 'creato gpg: richiesta chiave E5267A6C dal server hkp keyserver.ubuntu.com gpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb creato gpg: chiave E5267A6C: chiave pubblica "Launchpad PPA per Ondřej Surý" importato gpg: numero totale elaborato: 1 gpg: importato: 1 (RSA: 1) OK 

E poi ho aggiornato i miei pacchetti e la distribuzione e pulito tutti i file rimanenti:

$ sudo apt-get update $ sudo apt-get dist-upgrade $ sudo apt-get autoremove

Potresti vedere errori come questo:

Il link /vmlinuz.old è un collegamento danneggiato Rimozione del link simbolico vmlinuz.old potrebbe essere necessario eseguire nuovamente il boot loader [grub]

Ho scelto di riavviare a questo punto, e quello sembrava funzionare:

$ sudo reboot

Installa PHP7

Successivamente, installiamo PHP7 e tutti i suoi pacchetti:

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-tidy php-xml php -json php7.0-mbstring php-gettext libmcrypt-dev mcrypt php-gd libmcrypt4 libmhash2 libtidy5 libxslt1.1 php-apcu-bc php-pear php7.0-mbstring php7.0-xml

A questo punto vorrai migrare qualsiasi impostazione modificata nei tuoi file di configurazione a /etc/php/7.0/apache2/php.ini.

Dovevo anche aggiungere extension = apc.so al mio file php.ini:

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

L'ho incollato qui:

; extension = php_openssl.dll; extension = php_pdo_firebird.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; estensione = estensione php_shmop.dll = apc.so

Disabilitazione di PHPMyAdmin

A questo punto, se esegui PHPMyAdmin, ti imbatterai in problemi di ricarica di Apache. In questo caso, dovrai disabilitare PHPMyAdmin:

$ sudo nano /etc/apache2/apache2.conf

Commenta la linea che la carica in basso:

# Include le directory che ignorano i file di backup di editors e dpkg, # vedi README.Debian per i dettagli. # Include snippet di istruzioni generici IncludeOptional conf-enabled / *. Conf # Include le configurazioni dell'host virtuale: IncludeOptional sites-enabled / *. Conf # vim: syntax = apache ts = 4 sw = 4 sts = 4 sr noet # Include / etc /phpmyadmin/apache.conf

Quindi, ho abilitato mcrypt e mbstring e quindi riavviato Apache:

$ sudo phpenmod mcrypt $ sudo phpenmod mbstring $ sudo service apache2 restart

Ho provato questo su un server con app create solo su HTML, per PHP e per Yii1.x, e tutte hanno funzionato.

Reinstallare PHPMyAdmin

Quindi, ripariamo l'installazione di PHPMyAdmin. Un sacco di persone hanno lottato con questo.

Per prima cosa ho aggiunto il repository del pacchetto a nijel:

$ sudo add-apt-repository ppa: nijel / phpmyadmin Ultimi pacchetti phpMyAdmin - https://www.phpmyadmin.net/. Basato sui pacchetti disponibili in Debian. Ci sono alcuni cambiamenti notevoli: * attualmente richiede pacchetti PHP aggiornati, puoi ottenere pacchetti da https://launchpad.net/~ondrej/+archive/ubuntu/php/ * include le copie incorporate delle librerie PHP Se ti piace phpMyAdmin , puoi supportare il suo ulteriore sviluppo su https://www.phpmyadmin.net/donate/ o https://www.phpmyadmin.net/sponsors/, grazie! Maggiori informazioni: https://launchpad.net/~nijel/+archive/ubuntu/phpmyadmin Premere [INVIO] per continuare o ctrl-c per annullare l'aggiunta di gpg: keyring '/tmp/tmp6zix40vr/secring.gpg' creato gpg: keyring '/tmp/tmp6zix40vr/pubring.gpg' creato gpg: richiesta chiave 06ED541C dal server hkp keyserver.ubuntu.com gpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb creato gpg: chiave 06ED541C: chiave pubblica "Launchpad PPA per Michal Čihař "gpg importato: nessuna chiave attendibile trovata gpg: numero totale elaborato: 1 gpg: importato: 1 (RSA: 1) OK 

Quindi, ho aggiornato i pacchetti e installato PHPMyAdmin:

$ sudo apt-get update $ sudo apt-get install phpmyadmin 

Nota, questo ricaricherà ancora un mucchio di vecchi pacchetti PHP 5.x, ma PHPMyAdmin funzionerà alla fine.

Quindi, ho decommentato la riga PHPMyAdmin che abbiamo commentato sopra.

$ sudo nano /etc/apache2/apache2.conf

Qui:

# Include le directory che ignorano i file di backup di editors e dpkg, # vedi README.Debian per i dettagli. # Include snippet di istruzioni generici IncludeOptional conf-enabled / *. Conf # Include le configurazioni dell'host virtuale: IncludeOptional sites-enabled / *. Conf # vim: syntax = apache ts = 4 sw = 4 sts = 4 sr noet Includi / etc / phpmyadmin / apache.conf

E, ho riavviato Apache:

$ sudo service apache2 restart

Proteggi l'installazione di PHPMyAdmin

Questo PHPMyAdmin installato torna nella posizione predefinita, che è molto insicuro e hackerabile. Si prega di seguire Installazione e utilizzo di PHPMyAdmin con WordPress per proteggere meglio l'installazione.

Verifica che PHP 7 sia in esecuzione

In seguito, ho costruito un piccolo phpinfo (); file per verificare che PHP 7 fosse attivo:

In chiusura

L'aggiornamento a PHP 7 sulla mia attuale Ubuntu 14.x era problematico e richiedeva molte modifiche dagli script pubblicati per avere ragione. Spero che il tutorial di oggi sia utile.

Se ti è piaciuto questo, guarda i prossimi tutorial nella nostra serie Programming With Yii2 e Building the Startup With PHP, che documenta il processo di creazione della mia startup, Meeting Planner.

Puoi anche seguirmi @reifman su Twitter o controllare la mia pagina per gli istruttori per gli aggiornamenti. 

Link correlati

  • Il PPA principale per PHP (5.5, 5.6, 7.0) con molte estensioni PECL (Ondřej Surý)
  • Plugin di compatibilità PHP per WordPress Plugin
  • Installazione e utilizzo di PHPMyAdmin con WordPress (Envato Tuts +)