问题描述
在Windows平台,Apache服务器环境下,php运行报Call to undefined function curl_init()
问题排查
该问题的排查按照下面的步骤逐一进行检查。
检查PHP配置
curl_init() 需要扩展 curl 的支持,首先确定 php.ini 配置文件中 extension=php_curl.dll 前面的分号;是否去掉。
另外还需要检查 extension_dir = “ext” 配置项,将ext换成扩展的绝对路径,修改配置之后,记得重启服务器。
确定配置好之后,新建一个 info.php 文件:
curl_init();
phpinfo();
首先在浏览器中输入PHP文件地址访问,查看是否开启了curl扩展以及是否报错。
另外还需要在Windows命令行cmd中直接用PHP运行该文件,如果PHP没有加环境变量,则可以使用PHP的绝对路径,或者去到php安装目录执行。
php info.php
查看是否报错以及是否含有curl开启的信息。
检查服务器配置
如果在浏览器中访问时报 curl_init() 未定义或者没有加载curl扩展,而在命令行中没有报错或者加载了curl扩展,则说明是Apache服务器配置的问题。
首先检查Apache的文件是否更改过,那些dll是否缺少,还有PHP模块的加载地址是否正确,并检查确认加载的PHP配置文件是否正确,是否和配置的PHP文件是否一致,可以通过比对phpinfo和Apache中的配置文件确认。
LoadModule php7_module "D:\php-7.1.12-Win32-VC14-x64\php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "D:\php-7.1.12-Win32-VC14-x64"
修改配置文件之后重启 apache 服务,查看浏览器的 curl 扩展是否开启。
如果问题依然存在,则尝试将PHP安装根目录的 libeay32.dll,libssh2.dll,ssleay32.dll这三个文件复制到Apache的bin目录下,重启Apache。
如果上面的方法都不好使
那么考虑是哪一个环节出了问题,如果是PHP那个环节,就重新安装PHP,如果是Apache,就重新安装Apache。有时候是因为某些关键的dll文件缺失,还有版本不兼容导致的问题。