致命错误:在PHP中调用未定义函数imap_open()

我想通过我的本地主机访问我的Gmail帐户。 不过,我得到的回应是:

致命错误:调用未定义函数imap_open()

有人能指出我该怎么办才能解决这个问题吗?

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; $username = 'myid@gmail.com'; $password = 'mypassword'; /* try to connect */ $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' .imap_last_error()); 

很简单,IMAP扩展没有在你的PHP安装中激活。 它没有默认启用 。 如果您的本地安装在Windows上运行XAMPP,则必须按照XAMPP常见问题中所述启用它:

IMAP对PHP的支持在哪里?

默认情况下,在XAMPP中,对PHP的IMAP支持是停用的,因为在Windows 98等一些主页版本中存在一些神秘的初始化错误。谁使用NT系统,可以打开"\xampp\php\php.ini"来激活通过删除行";extension=php_imap.dll"的开始分号来使用php exstension。 应该是: extension=php_imap.dll

现在重新启动Apache和IMAP应该工作。 您可以对每个扩展使用相同的步骤,这在默认configuration中未启用。

安装过程总是相同的,但软件包pipe理器和软件包名称会有所不同,具体取决于使用的分发版本,版本和/或存储库。 一般来说,步骤是:

a )首先,用户权限升级是必需的,或者使用susudo命令获得。

b )然后,可以安装缺less的PHP模块与包pipe理器。

c )之后,重新启动apache2 HTTP守护程序需要加载模块。

d )最后,可以运行php -m | grep imap php -m | grep imap来查看PHP模块是否可用。

Ubuntu上APTphp5-imap (或者php-imap )可以用apt-get来安装:

 apt-get install php5-imap service apache2 restart 

Debian上APTphp5-imap可以安装aptitude (或apt-get ):

 aptitude install php5-imap apache2ctl graceful 

CentOSFedora上 ,可以用yum来安装RPM软件包php-imap (提示:在使用Webtatic软件仓库时,软件包的名称可能与php56w-imapphp71w-imap 相似 ):

 yum install php-imap service httpd restart 

systemd系统上,使用systemd单元时 ,重启单元httpd.service的命令是:

 systemctl restart httpd.service 

上述解决scheme存在的问题是,当模块已被引用时:

 /etc/php5/apache2/php.ini 

它可能会抛出:

 PHP Warning: Module 'imap' already loaded in Unknown on line 0 

发生这种情况是因为它是在默认的php.ini文件中引用的(至less在Ubuntu 12.04上),PHP模块最多只能引用一次 。 build议使用INI片段加载模块,而目录/etc/php5/conf.d/ (该path也可能有所不同)正在扫描INI文件:

 /etc/php5/conf.d/imap.ini 

Ubuntu还提供专有的命令来pipe理PHP模块,在重新启动Web服务器之前执行:

 php5enmod imap php5dismod imap 

一旦将IMAP模块加载到服务器中, PHP IMAP函数就会变为可用; 最好的做法可能是在试图利用它之前检查一个模块是否被加载

在Ubuntu上安装imap使用

sudo apt-get安装php-imap

Ubuntu 14.04及以上版本使用

sudo apt-get install php5-imap

和imap默认情况下不启用PHP所以使用此命令启用imap扩展

sudo php5enmod imap

然后重新启动你的Apache

sudo服务apache2重启

如果你在linux上,编辑/etc/php/php.ini (或者你将不得不在/etc/php5/cli/conf.d文件中创build一个新的扩展名导入文件),以便添加imap共享目标文件然后,重新启动Apache服务器。 取消注释

 ;extension=imap.so 

所以它变成这样:

 extension=imap.so 

然后,通过重新启动apache

 # /etc/rc.d/httpd restart 

 echo get_cfg_var('cfg_file_path'); 

你可以找出哪个php.ini已经被这个php实例使用。

在从Ubuntu 12.04迁移到14.04期间,我偶然发现了这一点,并且想要分享从Ubuntu 14.04 LTS开始,IMAP扩展似乎不再被默认加载。

检查以确认扩展是否已安装:

 dpkg -l | grep php5-imap 

应该这样回答:

 ii php5-imap 5.4.6-0ubuntu5 amd64 IMAP module for php5 

如果没有,请安装它。

要真正启用扩展

 cd /etc/php5/apache2/conf.d ln -s ../../mods-available/imap.ini 20-imap.ini service apache2 restart 

应该修复它的Apache。 对于CLI,请在/etc/php5/cli/conf.d中执行相同的操作

如果是安装php 5.3的centos。

sudo yum安装php53-imap

并重新启动Apache

sudo / sbin / service httpd restart或sudo service apache2 restart

在Mac OS X上用Homebrew,显然,PHP已经安装了,由于提供的错误,我们不能运行:

 $ brew install php72 --with-imap Warning: homebrew/php/php72 7.2.xxx is already installed 

另外,只安装模块,这里将不起作用:

 $ brew install php71-imap Error: No available formula with the name "php72-imap" 

所以,我们必须重新安装它:

 $ brew reinstall php72 --with-imap 

这将需要一段时间:-)(build在8分17秒)

Ubuntu与Nginx和PHP-FPM 7使用这个:

sudo apt-get安装php-imap

服务php7.0-fpm重启服务ngnix重启

检查模块已经安装了php -m | grep imap

模块imap的configuration将在cli php.ini和fpm php.ini中自动启用

nano /etc/php/7.0/cli/conf.d/20-imap.ini nano /etc/php/7.0/fpm/conf.d/20-imap.ini