If you are having trouble getting extensions to run and changes to php.ini don't seem to make a jot of difference you may find that your php.ini is not being read and you are running on defaults.
The good news is that Elsint's fix (dated 26-Sep-2006) still works for php 5.2.6 under Windows Server 2003 SP2, on IIS6, running php as an ISAPI module.
Diagnostic:
run a test file
<php
phpinfo();
?php>
Load this in a browser and search the results for "Loaded Configuration File". This points to the .ini file in use, which I have found is not always the one I have been editing ...
If your problem is with extensions: search for extension_dir in the phpinfo() results. If the entry which follows is C:\PHP5, or some other directory which does not exist on your drive you may need the registry fix. The alternative is to put the php.ini file somewhere along the search path, but this is not quite as clean.
Background:
If you run the installer packages: php-5.2.5-win32-installer.msi or php-5.2.6-win32-installer.msi and choose the default install directory the following registry entires are added
HKEY_LOCAL_MACHINE
SOFTWARE
PHP
InstallDir REG_SZ C:\Program Files\PHP\
WebServerType REG_SZ iis4ISAPI
However, the installers above do not create the IniFilePath registry entry.
So: you either go for a direct registry hack or create and run a registry file named: "[whatever].reg"
If your install directory is the default for the above installers the contents should be the 4 (four) lines below (counting the blank one!) between the pseudo tags.
<whatever.reg>
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
"IniFilePath"="C:\\Program Files\\PHP"
</whatever.reg>
(Note you have to have the double backslashes for the .reg file to work even though Windows reports it worked without them).
Once you have the new registry key in place you may find it sufficient to restart the World Wide Web Publishing Service, which is also restarted if you take the slightly longer option of restarting the IIS Admin Service.
If this works for you and you want to backtrack by undoing the registry changes to test if this was the fix that did it: you may need a reboot (not just a service restart) because of some rather irritating persistencies.
Installation des extensions sous Windows
Après avoir installé PHP et un serveur web sous Windows, vous devriez probablement vouloir installer quelques extensions pour avoir des fonctionnalités supplémentaires. Vous pouvez choisir quelles extensions seront chargées lors du démarrage de PHP en modifiant votre php.ini. Vous pouvez également en charger dynamiquement dans vos scripts à l'aide de la fonction dl().
Les bibliothèques DLLs pour les extensions PHP sont préfixées par php_.
Beaucoup d'extensions sont incluses dans la version pour Windows de PHP. Cela signifie que les bibliothèques DLL additionnelles et la directive extension ne sont pas utilisées pour charger ces extensions. La table des extensions PHP pour Windows liste les extensions qui requièrent des bibliothèques DLL additionnelles PHP. Voici une liste d'extensions internes :
En PHP 4 (mise à jour : PHP 4.3.11) : BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML et Zlib
En PHP 5 (mise à jour : PHP 5.0.4), les changements suivants existent. En interne : DOM, LibXML, Iconv, SimpleXML, SPL et SQLite. Les suivants ne sont plus intégrés : MySQL and Overload.
Le dossier par défaut dans lequel PHP cherche des extensions est c:\php4\extensions en PHP 4 et c:\php5 en PHP 5. Pour changer ce comportement pour refléter votre installation de PHP, éditez votre fichier php.ini :
-
Vous devriez pouvoir changer le paramètre extension_dir pour pointer vers le dossier contenant vos extensions ou l'endroit où vous avez placé vos fichiers php_*.dll. Par exemple :
extension_dir = c:\php\extensions
-
Pour activer ces extensions dans votre php.ini, vous devez décommenter les lignes extension=php_*.dll dans votre php.ini. Cela se fait en effaçant le point virgule (";") du début de la ligne que vous voulez activer.
Exemple #1 Activer l'extension Bzip2 pour PHP-Windows
// changez la ligne suivante : ;extension=php_bz2.dll // En : extension=php_bz2.dll
-
Quelques extensions ont besoin de bibliothèques DLLs supplémentaire pour fonctionner. La plupart d'entre elles peuvent être trouvées dans le paquet de votre distribution de PHP, dans le dossier c:\php\dlls\ en PHP 4 ou dans le dossier principal en PHP 5 mais quelques autres, comme Oracle (php_oci8.dll), requierent des DLLs qui ne sont pas fournies avec votre distribution de PHP. Si vous installez PHP 4, copiez les bibliothèques DLLs depuis le dossier C:\php\dlls vers le dossier principal C:\php. N'oubliez pas d'inclure le dossier C:\php dans la variable d'environnement PATH (ce processus est expliqué dans une entrée de la FAQ).
-
Quelques-unes de ces bibliothèques ne sont pas incluses dans la distribution de PHP. Lisez la documentation de chaque extension pour plus de détails. Lisez également la section du manuel nommée Installation d'extensions PECL pour plus de détails sur PECL. Un nombre toujours plus important d'extensions PHP se trouve dans PECL, et ces extensions nécessitent un téléchargement séparé.
Note: Si vous utilisez PHP en tant que module d'un serveur web, pensez à redémarrer votre serveur web pour charger les modifications apportées au fichier php.ini.
La table suivante décrit quelques extensions disponibles requérant des bibliothèques DLLs supplémentaires.
| Extension | Description | Notes |
|---|---|---|
| php_bz2.dll | bzip2 : fonctions de compression | Non |
| php_calendar.dll | Calendar : fonctions de conversion | Intégrées à PHP depuis la version 4.0.3 |
| php_crack.dll | Fonctions Crack | None |
| php_ctype.dll | Famille de fonctions ctype | Intégrées à PHP depuis la version 4.3.0 |
| php_curl.dll | Fonctions de bibliothèque client CURL | Requiert : libeay32.dll, ssleay32.dll (intégré) |
| php_dba.dll | DBA: DataBase (dbm-style) Fonctions d'abstraction | Non |
| php_dbase.dll | Fonctions dBase | Non |
| php_dbx.dll | Fonctions dbx | |
| php_domxml.dll | Fonctions DOM XML | PHP <= 4.2.0 requiert : libxml2.dll (intégré) PHP >= 4.3.0 requiert : iconv.dll (intégré) |
| php_dotnet.dll | Fonctions .NET | PHP <= 4.1.1 |
| php_exif.dll | Fonctions EXIF | php_mbstring.dll. Attention, php_exif.dll doit être chargé après php_mbstring.dll dans le php.ini. |
| php_fbsql.dll | Fonctions FrontBase | PHP <= 4.2.0 |
| php_fdf.dll | FDF : fonctions Forms Data Format. | Requiert : fdftk.dll (intégré) |
| php_filepro.dll | Fonctions filePro | Accès en lecture seule |
| php_ftp.dll | Fonctions FTP | Intégrées à PHP depuis la version 4.0.3 |
| php_gd.dll | GD : bibliothèque de fonctions image | Supprimer en PHP 4.3.2. Notez que les fonctions sur les couleurs vraies ne sont pas disponibles en GD1 ; utilisez plutôt php_gd2.dll. |
| php_gd2.dll | GD : Bibliothèque de fonctions image | GD2 |
| php_gettext.dll | Fonctions Gettext | PHP <= 4.2.0 requiert gnu_gettext.dll (intégré), PHP >= 4.2.3 requiert libintl-1.dll, iconv.dll (intégré). |
| php_hyperwave.dll | Fonctions HyperWave | Non |
| php_iconv.dll | ICONV : conversion de jeux de caractères | Requiert : iconv-1.3.dll (intégré), PHP >=4.2.1 iconv.dll |
| php_ifx.dll | Fonctions Informix | Requiert : bibliothèque Informix |
| php_iisfunc.dll | Fonctions d'administration IIS | Non |
| php_imap.dll | IMAP : fonctions POP3 et NNTP | Non |
| php_ingres.dll | Fonctions Ingres II | Requiert : bibliothèque Ingres II |
| php_interbase.dll | Fonctions InterBase | Requiert : gds32.dll (intégré) |
| php_java.dll | Fonctions Java | PHP <= 4.0.6 requit : jvm.dll (intégré) |
| php_ldap.dll | Fonctions LDAP | PHP <= 4.2.0 requiert libsasl.dll (intégré), PHP >= 4.3.0 requiert libeay32.dll, ssleay32.dll (intégré) |
| php_mbstring.dll | Fonctions Chaînes multioctets | Non |
| php_mcrypt.dll | Fonctions Mcrypt Encryption | Requiert : libmcrypt.dll |
| php_mhash.dll | Fonctions Mhash | PHP >= 4.3.0 requiert : libmhash.dll (intégré) |
| php_mime_magic.dll | Fonctions Mimetype | Requiert : magic.mime (intégré) |
| php_ming.dll | Fonctions Ming pour Flash | Non |
| php_msql.dll | Fonctions mSQL | Requiert : msql.dll (intégré) |
| php_mssql.dll | Fonctions MSSQL | Requiert : ntwdblib.dll (intégré) |
| php_mysql.dll | MySQL functions | PHP >= 5.0.0, requires libmysql.dll (intégré) |
| php_mysqli.dll | MySQLi functions | PHP >= 5.0.0, requires libmysql.dll (libmysqli.dll en PHP <=5.0.2) (intégré) |
| php_oci8.dll | Fonctions Oracle 8 | Requiert : bibliothèque cliente Oracle 8.1+ |
| php_openssl.dll | Fonctions OpenSSL | Requiert : libeay32.dll (intégré) |
| php_overload.dll | Fonctions Object overloading | Intégrée à PHP depuis la version 4.3.0 |
| php_pdf.dll | Fonctions PDF | Non |
| php_pgsql.dll | Fonctions PostgreSQL | Non |
| php_printer.dll | Fonctions Printer | Non |
| php_shmop.dll | Fonctions de partage de mémoire | Non |
| php_snmp.dll | Fonctions SNMP | NT seulement ! |
| php_soap.dll | SOAP functions | PHP >= 5.0.0 |
| php_sockets.dll | Fonctions Socket | Non |
| php_sybase_ct.dll | Fonctions Sybase | Requiert : bibliothèque cliente Sybase |
| php_tidy.dll | Tidy functions | PHP >= 5.0.0 |
| php_tokenizer.dll | Fonctions Tokenizer | Intégrées à PHP depuis la version 4.3.0 |
| php_w32api.dll | Fonctions W32api | Non |
| php_xmlrpc.dll | Fonctions XML-RPC | PHP >= 4.2.1 requiert : iconv.dll (intégré) |
| php_xslt.dll | Fonctions XSLT | PHP <= 4.2.0 requiert sablot.dll, expat.dll (intégré). PHP >= 4.2.1 requiert sablot.dll, expat.dll et iconv.dll (intégré). |
| php_yaz.dll | Fonctions YAZ | Requiert : yaz.dll (intégré) |
| php_zip.dll | Fonctions Zip File | Accès en lecture seule |
| php_zlib.dll | Fonctions de compression ZLib | Intégrées à PHP depuis la version 4.3.0 |
Installation des extensions sous Windows
18-Jul-2008 05:06
08-Jun-2008 02:46
If you get errors like this:
PHP Notice: Constant XML_ELEMENT_NODE already defined in Unknown on line 0
And many more complaining about XML constants, comment out the line:
extension=php_domxml.dll
in your php.ini. That extension seems to be compiled into PHP when you get those errors or something else is including the functionality before that dll.
15-Feb-2008 06:51
== Problem
Consider the following from an httpd.conf file...
LoadModule php5_module "E:/xyz/php/php5apache2_2.dll"
PHPIniDir "E:/xyz/php"
...which led to the dreaded...
PHP Warning: PHP Startup: Unable to load dynamic library 'E:\\xyz\\php\\ext\\php_mysql.dll' - The specified module could not be found.
Note, however, that PHP.exe apparently was found and executed php pages in Apache, but the MySQL functions therein failed.
== Solution
Because PHP dir was not in $PATH, php5apache2_2.dll failed to find php_mysql.dll (the only extension I enabled) during Apache 2.2 start.
== Caveat (!)
The BIG issue is that, setting $PATH in...
<desk icon>My Computer
<rt click>Properties
<tab>Advanced
<button>Environment Variables
...didn't export the $PATH change such that restarting the Apache service (in MMC) would pick it up. So I tested the working solution (adding PHP dir to $PATH), but it failed because of HOW I set it. It succeeded only when I REBOOTED after changing the $PATH. There may be an easier way that this, but I do not know it at present.
== Comment
Consider whether PHP dir should need to be in $PATH at all, when PHP.exe apparently was found and executes php pages in Apache, but php5apache2_2.dll failed to find whatever was needed to load the extensions. This should perhaps be addressed.
Note that on a WAMP installation (W2K,Apache,MySQL,PHP), only PHP is required in $PATH.
30-Jan-2008 08:10
As far as my experience says, 95% of ext\php_mysql.dll - The specified module could not be found - error can be sorted out on Win 2003, IIS 6, PHP5.2.
Replace the php_mysql.dll and libmysql.dll downloaded from http://dev.mysql.com/downloads/connector/php/ into extensions directory.
For MSSQL connectivity problems, replace the ntwdblib.dll in php dir with the one copied from system32 directory. Ofcourse the filesize will be less, no problem, replace it.
22-Sep-2007 08:00
Under windows, given an error similar to
PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_mysql.dll' - The specified module could not be found.\r\n in Unknown on line 0
When PHP definitely should be able to find the module, it's fairly common knowledge that this error can also be caused by certain dlls not being in the PATH. These dlls (usually libeay32 and ssleay32) are generally found in your base php directory, and the modern windows installers add the base php directory to the PATH so that you don't need to worry about it. However, if when installing earlier versions you decided on moving libeay32, ssleay32 et al to C:\Windows\System32 instead of changing the PATH, then php will still end up with the old versions and the out of date versions will cause the same error as above. Don't fall into the trap like I did.
31-Aug-2007 04:12
Installing PHP extensions for IIS for the first time is sort of a baptism by fire -- you will get your hands dirty, and other suitable metaphors of nastiness. Hopefully, you won't have to spend too many days googling around fora and restarting IIS 10 million times as I did until I finally realized both what was going on and what crazy things I'd done wrong.
THIS (peter)guy really goes into terrific detail and troubleshooting, (with very good reasons and explanations of extension dependencies not listed on the current php page you're now reading):
http://www.peterguy.com/php/install_IIS6.html
Most of this is applicable for IIS5.1 as well, as far as I've found.
The main problem I'd been butting my head up against was extensions being reported as not found, even though the .DLLs were definitely in C:\PHP\ext, and my PATH env var was setup correctly.
The error messaging during dynamic loading of implicitly-linked libraries should be more specific, telling you that in fact it is a particular dependency of a dependency which is missing -- usually some obscure third-party .dll -- and name it!
Eventually I stopped being so greedy and just cut down on the extensions I thought I needed by commenting them out in php.ini. That eliminated the startup errors. Apparently some of these extensions or their requirements, which either come with the base PHP install zip or the PECL extensions, are either too obscure or too fragile to be necessary anyway.
Good luck, and I hope anyone who runs into the same trouble can hit upon this or Peter Guy's page directly before they go too crazy.
14-Feb-2007 04:51
When confronted with the problem "PHP Warning: PHP Startup: Unable to load dynamic library './php_mysql.dll' - Access is denied.\r\n in Unknown on line 0" I found I had to make the permissions "chmod.exe 755 php_mysql.dll"
(This is on a Windows XP, but I am running Cygwin).
16-Nov-2006 05:10
I just installed PHP5.2 + Apache2.2 + MySQL5 on Windows XP. Three imporatant things.
1. I tryed to put php.ini in windows directory like in early version. But php can't load it and using default values only. After I put php.ini into php installation directory, everything is fine.
2. You still need to copy libmysql.dll to windows\system32 directory for the mysql extension to work.
3. Don't forget for apache 2.2, you need php5apache2_2.dll instead of php5apache2.dll.
12-Oct-2006 09:11
We tried to install PHP 4 ISAPI Module on IIS 6 on a Windows Server 2003 SP2 at the office.
The only way we found out to make these extensions work, is by putting the extensions DLLs in the System32\inetsrv in the Windows directory. We did the same previously with the
php4isapi.dll and php4ts.dll to make PHP work. The system was asking for a password previously.
We cannot explain it, it seems like a problem only occuring with SP2 installed because we never had this problem before. Giving the right permission to the PHP and extensions folders didn't do anything good. It always gave use a permission denied error. We even tried to give full control to Everyone on the PHP folder, same result.
I hope it can help.
27-Sep-2006 02:38
Installing PHP5.1.6 on an IIS5.1 system.
Some extensions are not working because of registry(like LDAP).
You need to create a registry file named: "inifilepath.reg"
Content should be the 3 lines under,be sure to define your PHP path correct:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
"IniFilePath"="C:\\PHP"
After creating this file, double click it, click yes, and restart IIS. Hopefully this might solve problem for some, as it solved for me.
18-Aug-2006 04:10
I had problems with PHP5/Apache2.2/MySQL 5 installation on a WinXp machine.
I got the
Fatal error: call to undefined function - mysql_connect().
message
Solution :
1, use correct version of ext\php_mysql.dll and libmysql.dll
2, !!! edit the CORRECT php.ini (%windir%\php.ini) like c:\windows\php.ini !!!
3, add php installation dir to PATH
4, edit php.ini to load extension php_mysql.dll
use
<?php
phpinfo();
?>
to check.
07-Apr-2006 04:54
If You try to install PHP5 to IIS6 with Oracle....
Then You need some kind of pilot-exams, not for big planes, just a little one.
So: After installations (php.ini is correct see above ie.: extenstion = php_oci8.dll etc)
If You use anonymous access, You'll have a builtin user to use it. Make this user local administrator, or give minimum read access to PHP folder (ie.: c:\php) and ORAHOME (ie. c:\ora92) folders.
If You use Windows Integrated authentication, give for Domain Users minimum read access to PHP folder (ie.: c:\php) and ORAHOME (ie. c:\ora92) folders.
Goog luck.
20-Aug-2004 12:35
[editor note: this should be fixed in PHP 5.1.0]
The order of the extensions listed in php.ini is causing problems... one must check that a particular extension A is enabled and above extension B if B requires A to be enabled.
The original ordering doesnt make sure that this always happens (ie, A is above B)
I came into this problem when I tried to enable the exif extension under windows. I knew mbstring is required but I kept getting errors even after I enabled both.
The problem can only be fixed by moving the mbstring line above the exif line...
