Here is yet another aspect of the "faulting module php5ts.dll" crash when trying to start apache.
I installed Apache 2.2.18, Mysql 5.1.57 and PHP 5.2.17 (apache module, VC6 thread-safe - initially with no extensions) on a fresh WinXP SP3 system. The versions chosen were because I was trying to replicate as near as possible apps on my Linux server.
Everything configured and ran properly without php extensions, so I then reran the msi installer and chose the necessary extensions. I reconfigured httpd.conf but apache then just kept crashing.
Eventually I came across the "fix" mentioned elsewhere "copy libmysql.dll to apache folder" and suddenly it worked. But why? I checked and the php installation folder was in the system path. The answer was simply that I had never rebooted. It seems that whatever process controls windows services only reads the path at boot time. I was thrown by assuming that if I started httpd from the command line then it would inherit that path.
Here are a few diagnostic tips that helped me along the way:
Try the CLI command:
php -m
and see that the command line version loads all the modules you asked for.
in php.ini, enable
display_errors = On
and
display_startup_errors = On
The latter pops up a window saying which extension it has trouble loading. Of course it is not perfectly clear, because it says something like 'unable to load "C:\php\ext\php_mysql.dll" - The specified module could not be found'. It lies - it really does find that dll, but it must have failed on the dependency of libmysql.dll.
Apache 2.x en Microsoft Windows
Esta sección contiene notas y sugerencias específicas de Apache 2.x instaladas con PHP en sistemas Microsoft Windows. También hay instrucciones y notas para usuarios de Apache 1.3.x en una nueva página..
Note:
Por favor lea primero el manual de instalación
Note: Soporte Apache 2.2
Los usuarios de Apache 2.2 deben tener en cuenta que el archivo DLL para Apache 2.2 es llamado php5apache2_2.dll a cambio de php5apache2.dll y sólo está disponible para PHP 5.2.0 y posteriores. Ver también » http://snaps.php.net/
Se le recomienda consultar la » Documentación de Apache Para obtener un conocimiento básico del servidor Apache 2.x. Tambien considere leer las » notas especificas de Windows para Apache 2.x antes de seguir leyendo aquí.
Apache 2.x está diseñado para ejecutarse en las versiones de Windows designado como servidor de plataforma, tales como Windows NT 4.0, Windows 2000, Windows XP o Windows 7. Aunque Apache 2.x funciona bastante bien en Windows 9x, el soporte en estas plataformas es incompleta, y algunas cosas no funcionan correctamente. No existe un plan para remediar esta situación.
Descargue la versión más reciente de » Apache 2.x y un accesorio de la versión de PHP. Siga los pasos del Manual de Instalación y regrese a continuar con la integración de PHP y Apache.
Hay tres formas de configurar PHP para trabajar con Apache 2.x en Windows. Puede ejecutar PHP como un controlador, como CGI o bajo FastCGI.
Note: Recuerde que cuando agrega rutas como valores en los archivos de configuración de Apache en Windows, todas las barras invertidas tal como c:\directory\file.ext deberían ser convertidas en barras comunes: c:/directory/file.ext. Una barra común al final será necesaria para directorios.
Instalación como un controlador de Apache
Es necesario insertar las siguientes líneas en Apache httpd.conf archivo de configuración para cargar el módulo PHP para Apache 2.x:
Example #1 PHP and Apache 2.x como controlador
# LoadModule php5_module "c:/php/php5apache2.dll" AddHandler application/x-httpd-php .php # Configurar la ruta de php.ini PHPIniDir "C:/php"
Note: Recuerda sustituir la ruta de acceso actual a PHP para el C:/php/ en los ejemplos anteriores. Tenga cuidado en utilizar ya sea php5apache2.dll o php5apache2_2.dll en la directiva LoadModule y verificar que el fichero de referencia se encuentra localizado en la ruta de fichero que se señala en la presente directiva.
La configuración anterior permite habilitar PHP como controlador de cualquier fichero que tiene una extensión .php, aunque existen otras extensiones de fichero. Por ejemplo, un fichero llamadoexample.php.txt será ejecutado por el controlador de PHP. Para garantizar que sólo los ficheros queterminen en .php son ejecutados, se utiliza la siguiente configuración en su lugar:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Ejecutar PHP como CGI
Se debe consultar la» Documentación de Apache CGI para una comprensión más completa de ejecutar CGI en Apache
Para ejecutar PHP como CGI, tendrás que colocar los ficheros php-cgi en un directorio designado como directorio CGI usando la directiva ScriptAlias.
A continuación, se nesesita insertar una #! línea en los ficheros PHP, apuntando a la ubicación del binario de PHP:
Example #2 PHP y Apache 2.x como CGI
#!C:/php/php.exe <?php phpinfo(); ?>
Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor, leer la sección Seguridad con CGI para aprender como defenderse de estos ataques.
Ejecutar PHP bajo FastCGI
Ejecutar PHP bajo FastCGI tiene una serie de ventajas con respecto a ejecutarlo como un CGI. Si lo establece de esta manera es bastante sencillo:
Obtener mod_fcgid de » http://httpd.apache.org/mod_fcgid/. Los binarios de Win32 están disponibles para la descargar en ese sitio. Instalar el módulo de acuerdo con las instrucciones que vienen con él.
Configurar el servidor web como se muestra abajo, teniendo cuidado de ajustar cualquier ruta que refleje como se tiene instalado las cosas en el sistema:
Example #3 Configurar Apache para ejecutar PHP como FastCGI
LoadModule fcgid_module modules/mod_fcgid.so # Donde está el fichero php.ini? FcgidInitialEnv PHPRC "c:/php" AddHandler fcgid-script .php FcgidWrapper "c:/php/php-cgi.exe" .php
I just spent 5 hours repeatedly trying, usuccessfully, to get Apache to parse php files instead of sending them to the browser. I am setting up a Win 7 Pro box, and went through the configuration several times, as well as trying other configuration directives I found elsewhere by searching.
Nothing worked. I was tearing my hair out and ready to cry. I have set this up numerous times on XP with no problem. But on Win 7 Pro it wasn't happening.
Eventually I found this code, which worked perfectly (after taking out directives from httpd.conf that weren't working, of course)
LoadFile "C:/php/php5ts.dll"
LoadModule php5_module "C:/php/php5apache2.dll"
<IfModule php5_module>
#PHPIniDir "C:/Windows"
#PHPIniDir "C:/Winnt"
<Location />
AddType text/html .php .phps
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps
</Location>
</IfModule>
If you've been having the same problem, try this.
You're welcome.
man I had a heck of time.. I was really starting to think I was just too simple minded.. I run PHP on iis7 as well as apache.. my os is win7 pro.. my host uses php 5.2 sooooo..
to run on apache 2.2 download nonthread safe version (my case VC6 x86 Non Thread Safe (2011-Jan-06 18:38:35)) and add this to the end of your apache httpd.conf file
#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "c:/php/"
LoadModule php5_module "c:/php/php5apache2_2.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
fired right up..
If Apache won't start after PHP install, check for this scenario:
When I followed the instructions for the Windows installer, using Apache HTTP server 2.2.17, the install completed normally but Apache would then fail to start. It turned out that the installer was not properly configuring the last section of Apache's httpd.conf file:
#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "c:/php/"
LoadModule php5_module "c:/php/php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
The text above is the correct configuration (in my case, I had asked the installer to place PHP into directory C:/PHP.) However, the installer omitted the string "c:/php/" from the two lines above where you can see them. I had to edit the file, and add that string in manually, before Apache would start correctly.
Running Apache2.2 on Windows 7. There was no php5apache2_2.dll on my system, and all I got was a message box "The requested operation has failed!" (no, that's not OK).
Finally realized that thread-safe version (VC6, mind!) was necessary - it had the dll in it.
Downloaded that, apache runs with
LoadModule php5_module 'C:/Program Files (x86)/PHP/php5apache2_2.dll'
#etc
Running PHP under FastCGI:
Besides the following in your httpd.conf
LoadModule fcgid_module modules/mod_fcgid.so
FcgidInitialEnv PHPRC "c:/php"
AddHandler fcgid-script .php
FcgidWrapper "c:/php/php-cgi.exe" .php
Remember to add the following to the default <Directory "C:/apache/htdocs"> block (or virtual host blocks):
Options ExecCGI
I install httpd-2.2.17-win32-x86-openssl-0.9.8o.msi and after
php-5.3.3-Win32-VC9-x86.msi on WinXP SP3. PHP installation add to httpd.conf next lines:
LoadModule php5_module "C:/PHP/php5apache2_2.dll
"PHPIniDir "C:/PHP"
After it Apache don`t starts. If remove PHPIniDir line Apache starts ok, but C:/PHP/php.ini don`t loaded. So you can`t use any extension (for me it's MySQL).
I uninstall VC9 version and install VC6 (php-5.3.3-Win32-VC6-x86.msi) version. All works fine now.
I wanted to install PHP5.3 for Apache2.2 with PostgreSql 9.0 support on WindowsXP. It took me hours to solve it.
The following possible problems occur:
- You should use the VC6-compiled version of php instead of VC9. The later one does not work properly with apache.
- the postgres handler dlls are not working in PHP5.3.
The symptom was a misleading and very confusing error message:
Unable to load dynamic library 'c:\Progra~1\PHP\ext\php_pgsql.dll'
The dll itself was there but when it started to load the other dll (libpq.dll) from the php directory then this caused an error. This error was misinterpreted internally in the above message.
The solution was NOT to use the libpq.dll from php but use it from postgres distribution instead.
For this purpose I inserted the following line into the apache httpd conf:
LoadFile "C:/Progra~1/PostgreSQL/9.0/bin/libpq.dll"
This preloads the dll. When php_pgsql.dll would load his own libpq.dll, then there is the preloaded version of this file in the memory already. This prevents us from using the bad version of dll.
I hope I helped.
I have installed PHP5.3.3 and Apache2.2.1 successfully on c:/webserver and php on cL/webserver/php. Inidividually both are working.
All manuals show to add loadModule
LoadModule php5_module "c:/webserver/php/php5apache.dll"
with php5apache2.dll or php5apache2_2.dll. But in my PHP folder, I have php5apache.dll.
On setting LoadModule, AddType & PHPIn
LoadModule php5_module "c:/webserver/php/php5apache.dll"
PHPIniDir "C:/webserver/php/"
...
AddType application/x-httpd-php .php
to http.conf, apache2 doesn't work. It pops up "The request has failed". No errors in logs. But apache doesn't work. If I remove these 3 lines, then it works perfectly.
I changed "/" and "\", removed "/" after php in phpini line, but no success. In php.ini file also for setting extension, I had to enter just the "ext" and not full path to make it work.
Can anynoe tell what could be the point, and how to solve it. I am looking badly to setup this and start working. any help is highly appreciative.
Thanks,
After using the Windows installer for Apache 2.2 and PHP 5.3.2, and installing PHP as an Apache module (not CGI), Apache would crash and fail to start. There were two problems with the configuration files for Apache and PHP.
First, make sure your Apache configuration file reads something similar to:
LoadModule php5_module "C:/Program Files/PHP/php5apache2_2.dll"
PHPIniDir "C:/Program Files/PHP/"
While other users have disabled some or all of the MySQL extensions to prevent all three from running at the same time, I have all of them enabled. However, I do not have PostgreSQL, so I needed to comment out loading the php_pgsql.dll in my php.ini file, as follows:
;[PHP_PGSQL]
;extension=php_pgsql.dll
This stopped Apache from crashing and started successfully.
The value for FcgidWrapper cannot contain spaces..
This won't work:
FcgidWrapper "c:/program files (x86)/php/php-cgi.exe" .php
But this will:
FcgidWrapper "c:/progra~2/php/php-cgi.exe" .php
I also had a problem with the PHPIniDir declaration. This is with Apache 2.2 on XP. I had to include a final slash, as in PHPIniDir "C:\Program Files\php\". Apache failed to start if I did not include the slash after php.
If you find that Apache crashes when you attempt to start it, its likely that one of the PHP extensions is the cause. This is likely the case if you use the PHP Windows installer and choose all extensions in the setup program to be installed on disk. Unfortunately, it will also enable all extensions too causing potential problems.
For example, after installing PHP 5.2.11 and Apache 2.2 under Windows XP, Apache kept crashing. This was due to using all three versiosn of mysql extensions attempting to run:
[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
If anybody here encounters an error regarding PHPIniDir, change PHPIniDir "C:/php/" to PHPIniDir "C:\php\".
Here is how I created a silent install for Apache2.2 and PHP5.2.10 on Windows XP (running on a MacBook Pro):
Download Apache2 and PHP5 installer files in a directory and update the msi file names in the following commands.
To have PHP installer find Apache2, do not forget APACHEDIR!
msiexec /i apache_2.2.11-win32-x86-no_ssl.msi /passive ALLUSERS=1 SERVERADMIN=admin@localhost SERVERNAME=localhost SERVERDOMAIN=localhost SERVERPORT=80 INSTALLDIR=c:\apache
msiexec /i php-5.2.10-win32-installer.msi /qn APACHEDIR=c:\apache INSTALLDIR=c:\php ADDLOCAL=ext_php_mssql,apache22
net stop "Apache2.2"
net start "Apache2.2"
This is old news to some. But people with Apache 2.0.55 / PHP 5.1.2 might like a reminder before they pull their hair out! (Some of us have ISPs using older version and need to test on a like version before we upload.)
If using PHP 5.1.2, to run Apache as a module, do *not* use Stephan's "php5apache2.dll" from http://www.ApacheLounge.com. That is for pre-5.1.2!
**There is a "php5apache2.dll" included with Windows PHP 5.1.2 zip file by default.**
If you forget this and overwrite the included DLL with Stephan's (as I did) you'll spend hours attempting to escape "DLL hell", with no success.
i followed henke37's way to for the httpd.conf
I added all this at the very end of httpd.conf
# For PHP 5
#load the php main library to avoid dll hell
Loadfile "C:\php-5.2.8-Win32\php5ts.dll"
#load the sapi so that apache can use php
LoadModule php5_module "C:\php-5.2.8-Win32\php5apache2_2.dll"
#set the php.ini location so that you don't have to waste time guessing where it is
PHPIniDir "C:\php-5.2.8-Win32"
#Hook the php file extensions
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps
Also i didn't use short open tags as they are disabled in
"php.ini-recommended" if you don't change anything
So use this to test
<?php
phpinfo();
?>
NOT
<? phpinfo(); ?> short open tags
added my php directory to the PATH system variable and i start apache manually not as a service
It works for me hope it helps you!
All good advice from henke, except where it says "Do not edit the system path". You will NOT be able to load extensions that have dependencies e.g. MySQL, without adding PHP to your system path. This threw me for some time as other extensions without dependencies will work without this requirement.
I do not have IIS installed on my server, only Apache. So I had to edit the PHP.ini file and comment out (add leading ";") to the following line "extension=php_iisfunc.dll" as I was getting "Faulting application httpd.exe, faulting module php_iisfunc.dll" errors when this line was active. I also added an additional "AddType application/x-httpd-php .html" to my httpd.conf file so that inline php would work with files ending with an extension of ".html" on my server.
If you use the PHP 5 installer, you'll notice that it uses the wrong type of slash on Windows!
Change C:/Program Files/PHP/" to C:\Program Files\PHP\" and everything works great!
If you install PHP as an Apache CGI binary, you can add:
AddHandler cgi-script .php
into Apache httpd.conf, and add shebang line to every PHP scripts like:
#!php
<?php
phpinfo();
?>
. But adding shebang line has a disadvantage that if you decided to install PHP as an Apache module afterwards, then the shebang line WILL appear in the web page.
In fact, you do NOT need to add shebang line to every PHP script even if you install PHP as an Apache CGI binary, because you can add:
ScriptInterpreterSource Registry-Strict
into Apache httpd.conf, and make the registry file and merge it like:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.php\Shell\ExecCGI\Command]
@="\"C:\\Program Files\\PHP\\php-cgi.exe\""
. Then you will NOT need to change the PHP scripts which do not contain shebang line.
To do a silent install of PHP wich correctly modify the httpd.conf file, you HAVE (I find no other way) to put the directory of the Apache inside the INSTALLDIR's MSI option. the APACHEDIR doesn't seem to work. That's the only way I've make it work. Maybe it's because my Apache is not in the default directory, I don't know, but there is a solution for people who cannot make work the silent install (for those who are told by the php setup that it cannot find the httpd.conf file).
Hope it helps someone.
Verrrrrrrry important note:
If you enable multi-byte strings for your installation of PHP, the extension loaded MUST be the first extension in the list.
Apache, NOR PHP will generate any error messages or warning information in the error log or in system logs about this.
This information needs to be included in the Readme or in the distributed INI files.
The recommended PHP ini's should place extension=php_mbstring.dll at the top of the list of extensions.
I had completely forgotten about this when recently upgrading php on a test server; and almost set out to re-install apache.
..try to set the extension_dir in php.ini to the absolute path.. (when you are pretty sure that you have set the PHPIniDir the right way)
it's important to note that on Apache 2.2.3 (probably other 2.x versions as well) on Windows, the PHPIniDir directive must use forward slashes to delimit directories, not the backslashes commonly used for Windows path strings. If PHP seems to be ignoring the directive, this may be why.
PHP 6 is under active development but for those whose want to try out the new features or just want to keep updated with the development progress of PHP 6.0, you can follow my instructions below to install it on Windows XP and Apache 2.2.3
# For PHP 6 do something like this:
LoadModule php5_module "c:/server/php6/php6apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "c:/server/php6"
You should change the path as in your system. The directive LoadModule php5_module seems a bit strange to you. It should be LoadModule php6_module instead. However, I have just taken a look at php.internals and came across a message that said it should be changed in the near future after the PHP 5.2 is official released. At the time I write this, PHP 5.2 RC6 is planned to be released in the next few days.
To install PHP as Apache 2 CGI script, add these lines in addition to the 3 lines mentioned in the document.
<Directory "C:/php">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Some XP machines are having troubles with the PHPIniDir derective not finding the php.ini (or so they think). Directories that do contain a php.ini file are returned as empty and it defaults to the next method of finding php.ini (often C:/windows or C:/winnt).
This is likely caused by read permissions not being set correctly on NTFS file systems, however, it has occurred when no cause could be identified. If setting correct file permissions doesn't work, the easiest way around this problem is moving php.ini to the Apache directory or adding the HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath string to your registry and setting it to the correct directory.
