Dual-installing PHP: Running PHP 5 and 4 on the same local, Windows-based, Apache, server
In previous guides, we installed PHP 4.4.2 and later moved our installation to a different folder. This time, we'll be installing the current release of PHP 5 (5.1.4) so that we can still switch back to PHP 4.4.2 if we'd like.
Downloading PHP 5.x
The current version of PHP 5.x is 5.1.4, so we'll begin by downloading that from PHP.net. We’ll want to download the (Windows Binaries) zip file, even though it is significantly larger in size than the installer (the zip file is almost 9 MB, compared to less than 3 MB for the executable), but allows us a deal more flexibility.
Once you've downloaded the zip file, extract the contents to a folder called c:\php5\. Once done, php.exe will have the full path of c:\php5\php.exe.
As with the PHP 4 installation, the install.txt file will detail how to install PHP 5. However, since you're using this guide, you shouldn't need to consult it. As with our PHP 4 installation, we'll be installing PHP 5 as a module, instead of as CGI binary (again, you can do this instead, if you so desire).
Start by backing up all of your httpd.conf files, in C:\Program Files\Apache Group\Apache\conf (if using the defaults). Since these work, add '_php4' to each of these backups.
For example, I have three httpd.conf files that I'm backing up; httpd.conf, httpd_CFMX6.1.conf, and httpd_CFMX7.01.conf. I'll be creating copies of each of these files, and calling them httpd_php4.conf, httpd_php4_CFMX6.1.conf, and httpd_php4_CFMX7.01.conf. This way I know that these use PHP 4. Once we modify the httpd.conf file(s) below, it may be a good idea to create backups and then call name them with '_php5'.
For the next steps, I'll be assuming that you've already installed PHP 4.
Begin by doing a search for
LoadModule php4_module "c:/php4/php4apache.dll"
Change this to
LoadModule php5_module "c:/php5/php5apache.dll"
Now do a search for
And change this to
Save httpd.conf. Next, head over to c:\windows\ and find the php.ini file. Rename this file to php_php4.ini (to keep with our naming standard above). We're renaming the original file, in this case, because we actually want to copy the file php.ini-dist from the c:\php5 folder to the c:\windows folder, and rename it to simply php.ini.
Once you've renamed the file, open it up. Once the file has been opened, do a search for doc_root and change it from
doc_root = "c:\home"
Or where your document root is for Apache.
Now do a search for the following line
;session.save_path = "/tmp"
And change that to your temporary PHP folder (in my previous guide, it ended up being
session.save_path = "c:/windows/temp/temp_php"
Make sure you remove the semi-colon from the beginning of the line to uncomment this line. Make sure that this folder exists.
Finally, search for the following line
extension_dir = "./"
and change it to
extension_dir = "c:\php5\ext\"
If you've installed MySQL (this page also contains a script to check the connection), you can enable access by uncommenting the following line
You'll also want to copy libmysql.dll from c:\php5\ to c:\windows\system32\.
If you've installed PostgreSQL (this page also contains a script to check the connection), you can enable access by uncommenting the following line
Save your changes to the php.ini file, and close out of the file. You may want to create a copy of this file as php_php5.ini - this way you have both a php4 and php5 file.
Finally, in c:\php5\, copy php5ts.dll into the c:\windows\ folder.
Restart Apache, and assuming it starts, hit the phpinfo.php page (which contains the following lines).
<?php phpinfo(); ?>
If you visit this page, you should be told that you're running PHP 5.1.4. You may notice that Zend Optimizer is no longer listed as being installed.
If you made a copy of the php.ini file for PHP 4 (php_php4.ini is what I recommended), then you can copy the last four lines from this file, which are as follows (I'm including the new line as a line the new line is absent from the code below, but it sits immediately before the first line below)
[Zend] zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.0.1\lib\Optimizer-3.0.1" zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.0.1\lib\ZendExtensionManager.dll"
Paste these lines at the end of your php.ini (and php_php5.ini file, if necessary) file. Restart Apache and Optimizer 3.0.1 should display on the phpinfo() page.
Until then, verify that you have backups of the files that we modified in this guide; httpd.conf and php.ini. In a later guide, or update, I'll detail how to setup a batch file to automatically move the necessary files to switch from PHP 4 to PHP 5, and vice versa (again, for updates, leave a comment).
To manually change from PHP 4 to PHP 5, and vice versa, simply delete the existing httpd.conf file. Next, make a copy of the httpd_php4.conf or httpd_php5.conf file, and rename it to httpd.conf. Do the same thing for the php.ini file. Finally, restart Apache. As long as you keep your backup copies, you can switch back and forth fairly easily. Again, a future batch file will make this much easier, by allowing one file to do all the work for you.
The batch files
Below is code for two batch files. Lines beginning with === should not be entered into the batch file - they merely contain the name of the file. Note that you may need to make some modifications, based upon where you installed programs and files.
c:\home\zblank.txt is simply a blank file. Including blank lines, each batch file contains 12 lines (2 of which are blank).
net stop "Apache" DEL "c:\home\php4 is ready.txt" DEL "c:\home\php5 is ready.txt" COPY "c:\windows\php.ini" "c:\windows\php_backup.ini" COPY "c:\windows\php_php4.ini" "c:\windows\php.ini" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php4.conf" "C:\Program Files\Apache Group\Apache\conf\httpd.conf" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php4_CFMX6.1.conf" "C:\Program Files\Apache Group\Apache\conf\httpd_CFMX6.1.conf" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php4_CFMX7.01.conf" "C:\Program Files\Apache Group\Apache\conf\httpd_CFMX7.01.conf" net start "Apache" COPY "C:\home\zblank.txt" "C:\home\php4 is ready.txt"
net stop "Apache" DEL "c:\home\php4 is ready.txt" DEL "c:\home\php5 is ready.txt" COPY "c:\windows\php.ini" "c:\windows\php_backup.ini" COPY "c:\windows\php_php5.ini" "c:\windows\php.ini" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php5.conf" "C:\Program Files\Apache Group\Apache\conf\httpd.conf" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php5_CFMX6.1.conf" "C:\Program Files\Apache Group\Apache\conf\httpd_CFMX6.1.conf" COPY "C:\Program Files\Apache Group\Apache\conf\httpd_php5_CFMX7.01.conf" "C:\Program Files\Apache Group\Apache\conf\httpd_CFMX7.01.conf" net start "Apache" COPY "C:\home\zblank.txt" "C:\home\php5 is ready.txt"
Support This Site
If my blog was helpful to you, then please consider visiting my Amazon Wishlist.