This setup should only be used as PHP development environment on Windows as it has not been tested on production.
If you followed the steps from the previous post on PHP installation on Windows using Web Platform Installer, you will now have PHP 7.0 to do your web development.
The problem using Web Platform Installer (WPI) is that most likely you won’t be using the latest version of PHP (at the time of this writing, it’s 7.0.15 and 7.1.1 and WPI only gives you version 7.0.9).
Fortunately, if you want to upgrade to the latest version, you can do it manually in a few simple steps described below.
Before we start, please keep in mind that this installation is for a local PHP server on IIS, not Apache web server.
Steps to Upgrade PHP to 7.1
-
Open Control Panel, click on Programs and Features, and then Turn Windows features on or off. Under Internet Information Services, World Wide Web Services, Application Development Features, make sure that option CGI is checked. This enables both the CGI and FastCGI services, which is recommended for PHP applications.
-
Download PHP for Windows. Since we’re using PHP as FastCGI, we’ll use the 64-bit Non-Thread Safe (NTS) version (i.e., php-7.1.1-nts-Win32-VC14-x64.zip).
-
Extract file php-7.1.1-nts-Win32-VC14-x64.zip to its own folder.
-
Copy your current PHP7 installation from v7.0 and rename the copy to v7.1.
-
Copy all files from the PHP7 zip folder (Step 3) to the new renamed v7.1 folder (Step 4).
-
Edit the php.ini (C:\Program Files\PHP\v7.1\php.ini) to reflect the new version (7.1) under [WebPIChanges] as shown below (see highlighted changes):
[WebPIChanges] error_log=C:\WINDOWS\temp\PHP71x64_errors.log upload_tmp_dir=C:\WINDOWS\temp session.save_path=C:\WINDOWS\temp cgi.force_redirect=0 cgi.fix_pathinfo=1 fastcgi.impersonate=1 fastcgi.logging=0 max_execution_time=300 date.timezone=Australia/Melbourne extension_dir="C:\Program Files\PHP\v7.1\ext\" [ExtensionList] ;extension=php_mysql.dll extension=php_mysqli.dll extension=php_mbstring.dll extension=php_gd2.dll extension=php_gettext.dll extension=php_curl.dll extension=php_exif.dll extension=php_xmlrpc.dll extension=php_openssl.dll extension=php_soap.dll extension=php_pdo_mysql.dll extension=php_pdo_sqlite.dll extension=php_imap.dll extension=php_tidy.dll [PHP_WINCACHE] extension=php_wincache.dll
Please note the change in line 1857. Although it’s not related to PHP upgrade, you need to double check that the
extension=php_mysql.dll
is either commented out or deleted.MySQL extension was deprecated on PHP version 5.5 and removed on version 7. If it’s not excluded, you’ll see the following error:
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Program Files\PHP\v7.1\ext\php_mysql.dll' - The specified module could not be found. in Unknown on line 0
Line 1872-1873 are for WinCache setting. Just make sure it’s there or else you will also encounter an error.
-
Open IIS Manager and click on FastCGI Settings.
-
Double-click on the PHP 7.0 settings and copy all the property values including the Environment Variables (PHP_FCGI_MAX_REQUESTS, PHPRC) and Advanced Settings. We’re just going to reuse all the values from the existing installation instead of starting from scratch.
Click Cancel button after you’re done.
-
Now from FastCGI Settings window, click on Add Application… on the Actions pane on the right.
-
Type in C:\Program Files\PHP\v7.1\php-cgi.exe on the Full Path box.
-
Enter all values you copied from Step 8, except for PHPRC where you want to update the value to 7.1 (i.e., C:\Program Files\PHP\v7.1).
Once completed, just click OK.
-
Go back to IIS Manager and click on Handler Mappings.
-
Look for PHP_via_FastCGI and double-click on it.
-
Locate the new php-cgi.exe and change the value on the Executable (optional): accordingly. Click Yes when there’s a dialog box asking you to create a FastCGI application for this executable.
Click OK and exit IIS Manager.
Update WinCache Extension for PHP
Once PHP is upgraded to version 7.1 you may run into another issue with your WinCache PHP extension with an error message as follow.
PHP Warning: PHP Startup: wincache: Unable to initialize module Module compiled with module API=20151012 PHP compiled with module API=20160303 These options need to match in Unknown on line 0
This error was caused by an outdated version of WinCache. PHP 7.1 requires a new WinCache binaries. Look for them in the PECL packages or you can download it directly from this link.
Installation should be straightforward. Just extract the zip file and follow the instructions.
Update Windows Environment Variables
Finally, we need to update the path of the new PHP in Windows Environment Variables.
-
Click on the Windows start button and type in “system” and click on System Control panel.
-
In System window, click on Advanced system settings and on System Properties window, make sure you have Advanced tab opened. And you can follow the path shown in the picture to complete the rest of the steps.
-
Click on Environment Variables… button.
-
Under System Variables, click on Path and Edit… button.
-
Click on where the current PHP is located and double-click it or click on Edit button.
-
Change the value to the location of the new PHP (i.e., C:\Program Files\PHP\v7.1)
-
Click OK button on each window to close.
That’s all there is. Now you can test your PHP installation by creating a test.php file with this PHP code.
<?php phpinfo(); ?>
Run it from your browser (i.e., http://localhost/test.php). If PHP is installed with the correct version, you will see something similar to this:
Compared with previous version of PHP installation on Windows:
Further Reading
How to Install PHP on Windows 10 Using Web Platform Installer
How to Upgrade to PHP 7.2 on IIS (Windows 10)
FastCGI
Difference between PHP thread safe and non thread safe binaries
Using FastCGI to Host PHP Applications on IIS 7
WinCache Extension for PHP
Download
Download PHP For Windows: Binaries and sources Releases
WinCache 2.0.0.8 PHP Extension Direct Download
Microsoft Visual C++ 2015 Redistributable Update 3
Worked on 8.1, just different file locations. Thank you greatly for the article!
good article
Thanks for your feedback.