Apache 2.2 cannot load php5apache2_2.dll – Problem Solved
It was a pleasant surprise for me to learn that File Information functions are enabled by default as of PHP 5.3.0. No need to figure out PECL and PEAR, set up the environment to compile from source, or beg for a Windows binary in PHP developer forums, thought I. Upgrading from 5.2.6 would be as easy as making the respective lines in Apache’s httpd.conf
point to the 5.3.0 installation…
I was wrong. Apache won’t start and it took me more than half an hour to figure out what’s going on.
First, PHP for Windows comes in several binary incarnations. The official site suggests that “VC6″ PHP binaries must be used with apache.org Apache binaries, whereas e.g. this SitePoint article states that “VC9″ PHP binaries must be used with Apache binaries provided by ApacheLounge. As far as I could recall, I had the apache.org binaries, so I tried the VC6 build and Apache crashed on startup with access violation. Assuming a memory failure on my part, I tried the VC9 build but Apache still won’t start, this time with the following event appearing in the Event Log:
Event Type: Error Event Source: Apache Service Event Category: None Event ID: 3299 . . . Description: The Apache service named reported the following error: >>> httpd.exe: Syntax error on line 490 of O:/apache-2.2/conf/httpd.conf: Cannot load O:/php-5.3.0/php5apache2_2.dll into server: The specified procedure could not be found.
So I searched for “Apache 2.2 cannot load php5apache2_2.dll” and spent the next twenty or so minutes reading various forums and blog posts, to no avail.
When nothing helps, read the manual. I have re-read the “Apache 2.0.x on Microsoft Windows” section in the PHP install.txt
file and noticed:
Note: You should read the manual installation steps first!
This made me think: “Hmm. Perhaps I had done something when installing PHP 5.2.6?” I scrolled to “Manual Installation Steps” and you know what, it turned out to be the case!
The CGI and CLI binaries, and the web server modules all require the php5ts.dll file to be available to them. . . . To make php5ts.dll available you have three options: copy the file to the Windows system directory, copy the file to the web server's directory, or add your PHP directory, C:\php to the PATH.
I blindly trust Windows Update to mess with my Windows system directory, but never manually copy files there, so the first option was ruled out. PHP was not in the PATH either, so looked into Apache bin/
directory and voila, php5ts.dll
was right there.
However, replacing it with php5ts.dll
from PHP 5.3.0 did not help. Fortunately, at this point I recalled switching to the VC9 build in an attempt to solve the access violation problem. Switched back to VC6 and Apache finally starts!
Lessons learned:
- Manual installation now means manual uninstallation/upgrade in the future. Take notes during the process.
- When you have to resort to reading the manual – read, don’t scan
09-Aug-2011
7:36 pm
[...] also read this blog where some VC6 and VC9 binaries are mentioned. I don’t know about them. Do I need to do [...]