Follow-up from my post yesterday (Enabling cURL with PHP)
The problem is that PHP isn\'t able to load php_curl.dll. I\'ve tried several steps including uncommenting
libeay32.dll
and ssleay32.dll
have to be path-accessible for php_curl.dll
loading to succeed.
But copying them into Apache's ServerRoot
, Apache's \bin\
, Window's \System32\
, or even worse into the Windows main directory is a bad hack and may not even work with newer PHP versions.
The right way to do it is to add the PHP path to the Windows Path
variable.
Control Panel -> System
click on Advanced System Settings or press WIN+R and type SystemPropertiesAdvanced
Path
variable. Edit it and prepend C:\PHP;
to it - or whatever the path to your PHP folder is.C:\Program Files\PHP
you may need to use the short filename form here, i.e. C:\Progra~1\PHP
.)Update 2017-05:
I changed the instructions above to prepend the Path variable with the PHP path instead of appending to it. This makes sure that the DLLs in the PHP path are used and not any other (outdated) versions in other paths of the system.
Update 2018-04:
If you have already chosen the wrong way and copied any of the PHP DLLs to Apache or Windows paths, then I strongly recommend that you remove them again! If you don't, you might get into trouble when you later try to update PHP. If a new PHP version brings new versions of these DLLs, but your old DLLs still linger around in system or webserver paths, these old DLLs might be found first. This will most certainly prevent the PHP interpreter from starting. Such errors can be very hard to understand and resolve. So better clean up now and remove any of the mentioned DLLs from Windows and Apache paths, if you copied them there.
(Thanks to @EdmundTam and @WasimA. for pointing out this problem in the comments!)
Update 2019-10:
Tip: To find all copies of these DLLs and check whether you might have placed them in the wrong folders, you can use the following commands in a Windows Command Prompt window:
dir c:\libeay32.dll /s
dir c:\ssleay32.dll /s
Be warned that these commands may take some time to complete as they search through the entire directory structure of your system drive C:.
Update 2020-08:
If your PHP folder contains spaces (i.e. C:\Program Files\PHP
) you may need to use the short filename form in the Path
variable at step 3 (i.e. C:\Progra~1\PHP
). Thanks to @onee for this tip!
Insert to file httpd.conf
LoadFile "D:/DevKit/PHP7.1/libeay32.dll"
LoadFile "D:/DevKit/PHP7.1/libssh2.dll"
LoadFile "D:/DevKit/PHP7.1/ssleay32.dll"
In PHP 5.6.x version You should do the following:
Move to Windows\system32
folder DLLs from php
folder:
libssh2.dll, ssleay32.dll, libeay32.dll
and php_curl.dll
from php ext
folder
Move to Apache24\bin
folder from php
folder:
libssh2.dll
Also, don't forget to uncomment extension=php_curl.dll
in php.ini
In php.ini you must put the extension_dir static path. extension_dir = "C:\laragon\bin\php\php-7.3.11-Win32-VC15-x64\ext"
by example. Don't forget to remove the semicolon before this variable.
You are loading .dll
so your OS has to be windows.
First check which php.ini
file you are using by running phpinfo()
Then check where your extensions folder is by checking extension_dir
attribute in that file.
Next make sure that php_curl.dll
is present in that folder. If not copy it over.
Restart apache
and check if it works.
Since you installed packages individually, also do this:
Copy the dll file from php_installation_folder/extensions
to apache_installation_folder/bin
Solution: Put libeay32.dll, libssh2.dll, ssleay32.dll files under dir specified in httpd.conf's ServerRoot directive. These dlls can be found compiled under php root folder.
Reasons:
Problem is php_curl.dll requires to access following libraries while loading: libeay32.dll, libssh2.dll, ssleay32.dll and it does not make sense if you put them in ./php/ext dir or if you put php extensions in php root dir.
Of course you can put them in c:\Windows or in some global folder defined in PATH but if you dont want to do this and you want that your apache+php installation was portable:
The path specified in ServerRoot in httpd.conf is treated as home path for php. The behaviour is similar to situation where you include ./path/to/some.php file in ./index.php and home path for some.php file is still ./ the dir where index.php resides.
In shorts just put those three dlls right in dir you specified in httpd.conf ServerRoot directive and php_curl.dll will not fail to load again.