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

时间:2012-03-11 11:16:47

标签: php imap

我正在尝试通过localhost访问我的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());

12 个答案:

答案 0 :(得分:79)

很简单,PHP安装中未激活IMAP扩展。它不是enabled by default。如果您的本地安装在Windows上运行XAMPP,则必须按XAMPP FAQ中所述启用它:

  

IMAP对PHP的支持在哪里?

     

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

     

现在重启Apache和IMAP应该可行。您可以使用相同的步骤   对于每个扩展,默认情况下未启用   配置。

答案 1 :(得分:56)

安装过程始终相同,但package-manager和package-name会有所不同,具体取决于使用的分发版本,版本和/或存储库。通常,步骤是:

  

a )首先,需要使用命令susudo获取用户权限升级。

     

b )然后可以使用包管理器安装缺少的PHP模块。

     

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

     

d )最后,可以运行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

CentOS Fedora 上,RPMphp-imap可以与yum一起安装(提示:包的名称)在使用Webtatic repo时,可能与php56w-imapphp71w-imap相似:

yum install php-imap
service httpd restart

systemd系统上,在使用systemd units时,重启单位httpd.service的命令为:

systemctl restart httpd.service

上述解决方案存在的问题是,当模块已经在以下时间引用时:

/etc/php5/apache2/php.ini

它可能会抛出:

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

会发生这种情况,因为它在默认的php.ini文件中引用(至少在Ubuntu 12.04上),并且PHP模块最多只能引用一次。建议使用INI代码段加载模块,同时正在扫描目录/etc/php5/conf.d/(该路径也可能不同)INI个文件:

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

Ubuntu还具有管理PHP模块的专有命令,可在重新启动Web服务器之前执行:

php5enmod imap
php5dismod imap

IMAP模块加载到服务器后,PHP IMAP Functions应该可用;在尝试使用模块之前,最佳做法可能是检查模块是否已加载

答案 2 :(得分:33)

在Ubuntu中安装imap使用

sudo apt-get install php-imap

Ubuntu 14.04及以上使用

sudo apt-get install php5-imap

默认情况下,

和imap未启用php,因此请使用此命令启用imap扩展

sudo php5enmod imap

然后重启你的apache

sudo service apache2 restart

答案 3 :(得分:7)

如果您使用的是Linux,请编辑/etc/php/php.ini(或者您必须在/etc/php5/cli/conf.d创建新的扩展导入文件)文件,以便添加imap共享对象文件然后,重新启动Apache服务器。取消注释

;extension=imap.so

这样就变成了这样:

extension=imap.so

然后,通过

重启apache
# /etc/rc.d/httpd restart

答案 4 :(得分:4)

echo get_cfg_var('cfg_file_path');

你可以找到这个php实例使用的php.ini。

答案 5 :(得分:4)

在从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

中执行相同的操作

答案 6 :(得分:4)

在带有Homebrew的Mac OS X上,显然已经安装了PHP,因为我们无法运行提供的错误:

  

更新:最新版本brew instal php --with-imap将无法使用!!!

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

另外,仅安装模块,此处不起作用:

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

所以,我们必须重新安装

$ brew reinstall php72 --with-imap
  

需要一段时间:-)(内置8分17秒)

答案 7 :(得分:2)

如果它是安装了php 5.3的centos。

sudo yum install php53-imap

并重新启动apache

sudo / sbin / service httpd restart 要么 sudo service apache2 restart

答案 8 :(得分:1)

Ubuntu与Nginx和PHP-FPM 7使用此:

sudo apt-get install php-imap

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

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

模块imap的配置将自动启用,包括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

答案 9 :(得分:0)

如果您的本地安装在Windows上运行XAMPP,那就足够了:  你可以打开文件" \ xampp \ php \ php.ini"通过删除行#34 ;; extension = php_imap.dll"中的开头分号来激活php exstension。它应该是:

;extension=php_imap.dll

extension=php_imap.dll

答案 10 :(得分:0)

要在Ubuntu 16.04的PHP 7.0.32上安装IMAP。转到给定的链接,然后根据您所在的地区选择链接。就我而言,我从“亚洲”部分中选择一个链接。然后将下载一个文件。只需点击该文件以安装IMAP即可,然后重新启动apache

https://packages.ubuntu.com/xenial/all/php-imap/download

检查是否已安装IMAP,请检查phpinfo文件。如果成功安装 将显示IMAP c-Client版本2007f。

答案 11 :(得分:0)

对于Xampp 7.3.9

PHP.ini第913行:

;extension=imap

您应该删除分号。