[]How To Upgrade to PHP 7 on Ubuntu 14.04

来源:互联网 发布:统计直报网乱报数据 编辑:程序博客网 时间:2024/05/21 04:25

注:此文复制于https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-ubuntu-14-04


Sign UpLog InTutorialsQuestionsProjectsMeetupsMain Site DigitalOcean CommunityTutorialsQuestionsProjectsMeetupsSign UpLog InD3f0273e4e4eb87e1002b3653f30eb5ba32eedf8Brennen Bearnes Subscribe     Share Contents How To Upgrade to PHP 7 on Ubuntu 14.0441How To Upgrade to PHP 7 on Ubuntu 14.04Posted Dec 15, 2015 298.5kviews PHP Apache LAMP Stack Nginx LEMP UbuntuIntroductionPHP 7, which was released on December 3, 2015, promises substantial speed improvements over previous versions of the language, along with new features like scalar type hinting. This guide explains how to quickly upgrade an Apache or Nginx web server running PHP 5.x (any release) to PHP 7.Warning: As with most major-version language releases, it's best to wait a little while before switching to PHP 7 in production. In the meanwhile, it's a good time to test your applications for compatibility with the new release, perform benchmarks, and familiarize yourself with new language features.If you're running any services or applications with active users, it is safest to first test this process in a staging environment.PrerequisitesThis guide assumes that you are running PHP 5.x on an Ubuntu 14.04 machine, using either mod_php in conjunction with Apache, or PHP-FPM in conjunction with Nginx. It also assumes that you have a non-root user configured with sudo privileges for administrative tasks.Adding a PPA for PHP 7.0 PackagesA Personal Package Archive, or PPA, is an Apt repository hosted on Launchpad. PPAs allow third-party developers to build and distribute packages for Ubuntu outside of the official channels. They're often useful sources of beta software, modified builds, and backports to older releases of the operating system.Ondřej Surý maintains the PHP packages for Debian, and offers a PPA for PHP 7.0 on Ubuntu. Before doing anything else, log in to your system, and add Ondřej's PPA to the system's Apt sources:sudo add-apt-repository ppa:ondrej/phpYou'll see a description of the PPA, followed by a prompt to continue. Press Enter to proceed.Note: If your system's locale is set to anything other than UTF-8, adding the PPA may fail due to a bug handling characters in the author's name. As a workaround, you can install language-pack-en-base to make sure that locales are generated, and override system-wide locale settings while adding the PPA:sudo apt-get install -y language-pack-en-basesudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/phpOnce the PPA is installed, update the local package cache to include its contents:sudo apt-get updateNow that we have access to packages for PHP 7.0, we can replace the existing PHP installation.Upgrading mod_php with ApacheThis section describes the upgrade process for a system using Apache as the web server and mod_phpto execute PHP code. If, instead, you are running Nginx and PHP-FPM, skip ahead to the next section.First, install the new packages. This will upgrade all of the important PHP packages, with the exception ofphp5-mysql, which will be removed.sudo apt-get install php7.0Note: If you have made substantial modifications to any configuration files in /etc/php5/, those files are still in place, and can be referenced. Configuration files for PHP 7.0 now live in /etc/php/7.0.If you are using MySQL, make sure to re-add the updated PHP MySQL bindings:sudo apt-get install php7.0-mysqlUpgrading PHP-FPM with NginxThis section describes the upgrade process for a system using Nginx as the web server and PHP-FPM to execute PHP code.First, install the new PHP-FPM package and its dependencies:sudo apt-get install php7.0-fpmYou'll be prompted to continue. Press Enter to complete the installation.If you are using MySQL, be sure to re-install the PHP MySQL bindings:sudo apt-get install php7.0-mysqlNote: If you have made substantial modifications to any configuration files in /etc/php5/, those files are still in place, and can be referenced. Configuration files for PHP 7.0 now live in /etc/php/7.0.Updating Nginx Site(s) to Use New Socket PathNginx communicates with PHP-FPM using a Unix domain socket. Sockets map to a path on the filesystem, and our PHP 7 installation uses a new path by default:PHP 5PHP 7/var/run/php5-fpm.sock/var/run/php/php7.0-fpm.sockOpen the default site configuration file with nano (or your editor of choice):sudo nano /etc/nginx/sites-enabled/defaultYour configuration may differ somewhat. Look for a block beginning with location ~ \.php$ {, and a line that looks something like fastcgi_pass unix:/var/run/php5-fpm.sock;. Change this to useunix:/var/run/php/php7.0-fpm.sock./etc/nginx/sites-enabled/defaultserver {    listen 80 default_server;    listen [::]:80 default_server ipv6only=on;    root /var/www/html;    index index.php index.html index.htm;    server_name server_domain_name_or_IP;    location / {        try_files $uri $uri/ =404;    }    error_page 404 /404.html;    error_page 500 502 503 504 /50x.html;    location = /50x.html {        root /usr/share/nginx/html;    }    location ~ \.php$ {        try_files $uri =404;        fastcgi_split_path_info ^(.+\.php)(/.+)$;        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    }}Exit and save the file. In nano, you can accomplish this by pressing Ctrl-X to exit, y to confirm, and Enter to confirm the filename to overwrite.You should repeat this process for any other virtual sites defined in /etc/nginx/sites-enabled which need to support PHP.Now we can restart nginx:sudo service nginx restartTesting PHPWith a web server configured and the new packages installed, we should be able to verify that PHP is up and running. Begin by checking the installed version of PHP at the command line:php -vOutputPHP 7.0.0-5+deb.sury.org~trusty+1 (cli) ( NTS )Copyright (c) 1997-2015 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend TechnologiesYou can also create a test file in the web server's document root. Depending on your server and configuration, this may be one of:/var/www/html/var/www//usr/share/nginx/htmlUsing nano, open a new file called info.php in the document root. By default, on Apache, this would be:sudo nano /var/www/html/info.phpOn Nginx, you might instead use:sudo nano /usr/share/nginx/html/info.phpPaste the following code:info.php<?phpphpinfo();?>Exit the editor, saving info.php. Now, load the following address in your browser:http://server_domain_name_or_IP/info.phpYou should see PHP version and configuration info for PHP 7. Once you've double-checked this, it's safest to to delete info.php:sudo rm /var/www/html/info.phpConclusionYou now have a working PHP 7 installation. From here, you may want to check out Erika Heidi's Getting Ready for PHP 7 blog post, and look over the official migration guide.D3f0273e4e4eb87e1002b3653f30eb5ba32eedf8 Author:Brennen BearnesD3f0273e4e4eb87e1002b3653f30eb5ba32eedf8 Editor:Brennen BearnesSpin up an SSD cloud server in under a minute.Simple setup. Full root access. Straightforward pricing.DEPLOY SERVERRelated TutorialsHow to Protect Your Server Against the HTTPoxy VulnerabilityHow To Configure Nginx as a Web Server and Reverse Proxy for Apache on One Ubuntu 16.04 ServerHow To Install and Use Composer on Ubuntu 16.04How To Install and Secure phpMyAdmin on Ubuntu 16.04How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.0456 CommentsBIULOLLinkCodeHighlightTableLeave a comment...Log In to Comment0bojanrnr December 16, 2015Doesn't work for me on Ubuntu 14.04.3 & Nginx 1.9.7...I've added the PPA and updated the package cache, but got this when trying to install php7.0-fpm:apt-get install php7.0-fpmReading package lists... DoneBuilding dependency treeReading state information... DoneSome packages could not be installed. This may mean that you haverequested an impossible situation or if you are using the unstabledistribution that some required packages have not yet been createdor been moved out of Incoming.The following information may help to resolve the situation:The following packages have unmet dependencies: php7.0-fpm : Depends: php7.0-cli but it is not going to be installed              Depends: php7.0-common (>= 7.0.0-6+deb.sury.org~trusty+1) but it is not going to be installed              Depends: php7.0-json but it is not going to be installed              Depends: php7.0-opcache but it is not going to be installedE: Unable to correct problems, you have held broken packages.I tried to install them all, but I keep getting more dependencies and conflictsThe following packages have unmet dependencies: php7.0-cli : Recommends: php-readline but it is not installable              Breaks: php5-cli but 5.5.30+dfsg-1+deb.sury.org~trusty+1 is to be installed php7.0-common : Conflicts: php5-common but 5.5.30+dfsg-1+deb.sury.org~trusty+1 is to be installedE: Unable to correct problems, you have held broken packages. 1kaska December 19, 2015@bojanrnr I received similar messages. I ran sudo apt-get remove php5-common and then ran from the top of this page again 0adamwaatson December 21, 2015Have you tried this? http://askubuntu.com/questions/705880/how-to-install-php-7Purging first, then installing all the PHP packages 0desiredpersona December 16, 2015@bojanrnr i had same issue but i used the following command to remove PHP 5.6 firstsudo apt-get -y purge php5 0grozanc182643 December 16, 2015I can get PHP 7 running on Ubuntu 14.04 with Nginx, but I can't get phpmyadmin installed even using the latest version because php-gettext and php-seclib are missing from the PHP 7 install. HAs anyone gotten phpmyadmin to work and willing to post directions? 0bpb MOD December 31, 2015See my comment here.How To Upgrade to PHP 7 on Ubuntu 14.04PHP 7.0 was released on December 3, 2015. It promises substantial speed improvements over previous versions of the language, along with new features like scalar type hinting. This guide explains how to quickly upgrade a PHP 5.x installation on an Ubuntu 14.04 system with Apache or Nginx, using community-provided packages. 0desiredpersona December 16, 2015Got the following error after installing php7.0-mcrypt. Anyone have a solution?PHP Warning:  Module 'mcrypt' already loaded in Unknown on line 0 1bpb MOD December 16, 2015This rings a bell. I suspect that mcrypt is already compiled in.You can kill the error by commenting extension=mcrypt.so in /etc/php/mods-available/mcrypt.ini(which should cover both the CLI and FPM SAPIs), like so:root@lempet2:/etc/php/mods-available# cat mcrypt.ini ; configuration for php mcrypt module; priority=20;extension=mcrypt.soEven after doing this, it shows up in the list of compiled modules:root@lempet2:/etc/php/mods-available# php -m | grep mcryptmcryptThat said, there's obviously still a problem here if code doesn't work. I do notice that some mcrypt_*functions seem to have been deprecated in this release. 0desiredpersona December 17, 2015@bpb Thanks Brennen 0j.maes97 December 18, 2015Thank you for writing this article.I'm getting a 500 error code after following the tutorial with a LAMP on Ubuntu 14.04. Replicated every step perfectly but it seems like PHP7 and MySQL won't work together. Any ideas? 0bpb MOD December 18, 2015You mention MySQL, so I'm guessing you have some log output pointing that direction? Could you paste any specific errors you're seeing from /var/log/apache2/error.log? 0dimitriacosta December 18, 2015I thought the socket path was like this:/run/php/php7.0-fpm.sock; 0bpb MOD December 18, 2015Interesting. Looks like /var/run symlinks to /run. I confess I haven't really followed this change, but itsounds like /run has been canonical (or headed that way) for the major distros for a while now.Thanks for the note. I'll do a bit of further reading and update the instructions. 0dimitriacosta December 19, 2015I saw that when I was looking into the /etc/php/7.0/fpm/pool.d/www.conf file. 0robinwilson December 22, 2015I have just tested this and it refuses to work for me and just goes around in circles with unmet dependencies.Trying to run this:sudo apt-get install php7.0Results in:The following packages have unmet dependencies: php7.0 : Depends: libapache2-mod-php7.0 (>= 7.0.1-2+deb.sury.org~wily+1~) but it is not going to be installed or                   php7.0-cgi (>= 7.0.1-2+deb.sury.org~wily+1~) but it is not going to be installed or                   php7.0-fpm (>= 7.0.1-2+deb.sury.org~wily+1~) but it is not going to be installed          Depends: php7.0-common (= 7.0.1-2+deb.sury.org~wily+1) but it is not going to be installedE: Unable to correct problems, you have held broken packages.So then I try to install libapache2-mod-php7.0 and get a different unmet dependency:The following packages have unmet dependencies: libapache2-mod-php7.0 : Depends: php7.0-cli but it is not going to be installed                         Depends: php7.0-common (= 7.0.1-2+deb.sury.org~wily+1) but it is not going to be installed                         Depends: php7.0-json but it is not going to be installed                         Depends: php7.0-opcache but it is not going to be installed                         Conflicts: libapache2-mod-php5filter but 5.6.11+dfsg-1ubuntu3.1 is to be installedE: Unable to correct problems, you have held broken packages.Then finally I try to go back one more stage and install php7.0-cli but this also doesn't work due to unmet dependencies:The following packages have unmet dependencies: php7.0-cli : Depends: php7.0-common (= 7.0.1-2+deb.sury.org~wily+1) but it is not going to be installed              Depends: php7.0-json but it is not going to be installed              Depends: php7.0-opcache but it is not going to be installed              Recommends: php-readline but it is not going to be installed              Breaks: php5-cli but 5.6.11+dfsg-1ubuntu3.1 is to be installedE: Unable to correct problems, you have held broken packages.If I instead try to purge PHP5 first then it removes Roundcube and PHPMyAdmin and they refuse to install again afterwards due to missing modules.Is there anything else I can try?ThanksRobin 0robinwilson December 22, 2015Ok I've figured out how to get PHP 7.0 installed which involved doing these steps instead (on my server):sudo apt-get -y purge php5 libapache2-mod-php5 php5 php5-cli php5-common php5-curl php5-gd php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-pspell php5-readline php5-sqliteThen remove a few extra things that were left behind:sudo apt-get autoremoveThen install PHP 7.0:sudo apt-get install php7.0Then as PHPMyAdmin was removed Apache2 wouldn't start so I had to remove the config file (I could have moved it instead):sudo rm /etc/apache2/conf-enabled/phpmyadmin.confThen I had to restart Apache2:sudo service apache2 restartPHP 7.0 was then runningHowever I can't now figure out how to get PHPMyAdmin installed again as it just says there are unmet dependencies with PHP 5 even though 7.0 is loaded and running (confirmed with PHPINFO(); 0bpb MOD December 22, 2015Thanks for the detailed breakdown. I'll see what I can figure out with regards to PHPMyAdmin. 0bgarrison25 December 31, 2015I am also having an issue with phpMyAdmin....seems the package still relies on php5 packages so you can't install through apt-get 1bpb MOD December 31, 2015For upgrading by way of APT, this PPA looks promising; a quick run-through on an Apache installation appears to work:sudo add-apt-repository ppa:nijel/phpmyadminsudo apt-get install phpmyadminIt's somewhat iffier for Nginx, and it's possible that installing PHPMyAdmin directly from upstream sources is a better idea. I'm still en route home from a holiday visit to family, but I'll do a bit of digging and a more complete writeup this coming weekend. 0robinwilson January 9, 2016Thanks bpb (replying to the post above as there is no option to reply to your post for some reason!)I have now tested this repository and can confirm it does indeed update to a much newer version of PHPMyAdmin.I did encounter an issue where it ran an SQL update script which failed but I worked around it by running the .sql update afterwards.Here are my steps in case it is of use to others:First I installed the package and tried to upgrade the package:sudo add-apt-repository ppa:nijel/phpmyadminsudo apt-get updatesudo apt-get upgradeHowever this said the package had been held back and didn't update to it but running this forced it to update:sudo apt-get dist-upgradeUnfortunately during the upgrade it failed with an error as the PHPMyAdmin SQL upgrade script (upgradecolumninfo430+.sql) tries to add the following two columns to pmacolumninfo but they already exist:input_transformationinput_transformation_optionsThis generates the following error:mysql said: ERROR 1060 (42S21) at line 28: Duplicate column name 'input_transformation'I chose to ignore the warning and then went to /usr/share/phpmyadmin/sql after install and ran the upgradecolumninfo43_0+.sql script manually removing this offending part:ALTER TABLE `pma__column_info`  ADD `input_transformation` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',  ADD `input_transformation_options` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';Finally I had to edit the config file at /etc/phpmyadmin/config.inc.php and add the following two lines:$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';The errors about the extended features then went away.The next step is to try PHP7 again! 0iamkingsleyf December 24, 2015Nice......... i will try it when there is time 0akpanpromise December 31, 2015Kingsley, better chill.Let Ubuntu release a major update and we will see if it will have provisions for php7 0iamkingsleyf January 5, 2016lol,i hope it will be included in ubuntu 16.04 0malcsilberman January 3, 2016I am getting on Apache installationservice apache2 restartRestarting web server apache2 [fail]The apache2 configtest failed. Output of config test was: apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /usr/lib/apache2/modules/libphp5.so: cannot open shared object file: No such file or directory Action 'configtest' failed. The Apache error log may have more information. 0bpb MOD January 4, 2016It looks like the upgrade process left /etc/apache2/mods-enabled/php5.load in place, which refers to a no-longer-installed shared library. Give this a shot:sudo a2dismod php5sudo apache2ctl configtestOn my test system, I get:OutputModule php5 disabled.To activate the new configuration, you need to run:  service apache2 restartAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this messageSyntax OKYour output might be missing the ServerName warning. As long as you see Syntax OK, you can restart Apache:sudo service apache2 restart 0squarology January 12, 2016This worked perfectly for me.Thanks a lot!! 1oerdnj January 14, 2016Brennen, could you please change the repositories to ppa:ondrej/php, I will deprecate ppa:ondrej/php-7.0 repository at some point in time as it contains exactly the same PHP 7.0 packages as ppa:ondrej/php. 0bpb MOD January 14, 2016Will do momentarily. Thanks for the heads up. (Not to mention all your hard work on the packages.)Edit: Done. 0oerdnj January 14, 2016It will take some time, I will try to hunt all the popular guides around to change the repository URL before killing the old one. 0mistry01 January 20, 2016A PPA is easier of course, but I have resolved a lot of issues to build PHP 7 and configure it on Ubuntu 15.04 and 15.10 if you decide to upgrade from 14.04.You may need to choose a particular release branch and run the script instead of building right from master.https://gist.github.com/m1st0/1c41b8d0eb42169ce71a 0yuriywebdevelop February 10, 2016I'm using Ubuntu. After installing php7.0, server stopped parsing php files. From cli I can run php, but when I run a script from http://XX.XX.XX.XX/info.php I get only "<?php phpinfo(); ?> "When I run phpinfo from cli, it shows smth likePHP Version => 7.0.3-3+deb.sury.org~trusty+1System =>XXXX 3.13.0-57-generic #95-Ubuntu SMP Fri Jun 19 09:28:15 UTC 2015 x86_64Server API => Command Line InterfaceVirtual Directory Support => disabledConfiguration File (php.ini) Path => /etc/php/7.0/cliLoaded Configuration File => /etc/php/7.0/cli/php.iniScan this dir for additional .ini files => /etc/php/7.0/cli/conf.dAdditional .ini files parsed => /etc/php/7.0/cli/conf.d/10-opcache.ini,/etc/php/7.0/cli/conf.d/20-json.ini,/etc/php/7.0/cli/conf.d/20-readline.ini....So, how can I make the server to parse php files by outside, from http://XX.XX.XX.XX/info.php ?Thanks 0Halonen February 11, 2016What web server are you using?Have you installed the appropriate PHP7 processors (modphp for apache and phpfpm for nginx)? 2rypskar February 11, 2016Thank you for the article.I had to also run sudo apt-get install libapache2-mod-php7.0 before I got this to work in apache, nginx did work with without any prolems 0warpaintmedia March 4, 2016I had to do this as well. 0lukadolancic March 10, 2016thank you!!! 0edbayudan May 1, 2016This also did it for me. 1ggirtsou February 21, 2016I installed PHP 7 on Apache prior removing PHP 5.6.Creating config file /etc/php/7.0/apache2/php.ini with new versionERROR: php5 module already enabled, not enabling PHP 7.0$ php -vyield php 7 version, on browser's phpinfo(), I got php 5.6. So I removed PHP 5.6, and then executed:$ sudo a2enmod php7.0 && sudo service apache2 restart 0parziphal February 24, 2016I installed PHP 7.0.3 this way, then I installed php-pear to install some extensions. Upon calling pear orpecl I'd get a long list of errors, all related to the XML extension not being enabled, even though that extension is enabled by default. 0jefersondaniel June 9, 2016I had the same problem. I solved by installing the php-pear package again 0stoffmasta February 28, 2016How come XML is disabled?Do you have any source with XML enabled? Or any ideas how i can get that working?Migrating a few of my web apps went fine, however XML support is missing :( 2neilyamit February 29, 2016I have the same issue. SimpleXML disables after updating to 7.0.3.Found the solution. Just run this:sudo apt-get install php7.0-xml 0newbie March 11, 2016@asb isnt the 7.0.4 current stable version? is it safe to install 7.0.4 or should i stick to 7.0?can i simply install the latest stable by the following command?sudo apt-get install php7.0.4 1asb MOD March 11, 2016The current version in the PPA that this article recommends is 7.0.4. Though the package name is stillphp7.0 It will only change for major versions, not minor ones like 7.0.x 1bobz March 14, 2016Hi there, and thanks for the tutorial.I have upgraded mine droplet to php 7, and so far so good.After upgrade I bumped into a problem: Error 502.PHP 7.0.4Ubuntu 14.04.Nginx 1.9.6I figured out that php7.0-fpm.sock in my installation ended up in:/var/run/php/php7.0-fpm.sock (instead of /var/run/php7.0-fpm.sock like suggested in tutorial)So I fixed my path in nginx.conffastcgi_pass unix:/var/run/php/php7.0-fpm.sock;After I updated my path in server block, I got error:*143 connect() to unix:/var/run/php/php7.0-fpm.sock failed (13: Permission denied) ...So I updated permissions to sudo chmod 666 /var/run/php/php7.0-fpm.sock, and now everything worksSo my question here is about the permissions, is this ok to have it 666?Or anyone could suggest some better solution to my problem.And one more thing, php folder in /var/run/php/php7.0-fpm.sock is ownde by www-data:drwxr-xr-x 2 www-data www-data 80 Mar 14 13:41 phpShould it be owned by root, like all others in same folder?Thanks in advancedEdit:have chowned php dir to sudo chown -R nginx:nginx php/ which is mine nginx user, and restored permissions to 0644 for /var/run/php/php7.0-fpm.sockAgain everything works Load More CommentsCreative Commons LicenseThis work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.Copyright © 2016 DigitalOcean™ Inc.Community Tutorials Questions Projects Tags Newsletter RSS  Distros & One-Click Apps Terms, Privacy, & Copyright Security Report a Bug Get Paid to Write


0 0
原创粉丝点击