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

问题描述 投票:51回答:11

我试图通过我的localhost访问我的Gmail帐户。但是,我收到了回复:

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

有人可以指出我应该怎么做才能解决这个问题?

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'mypassword';

/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' .imap_last_error());
php imap
11个回答
81
投票

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

IMAP对PHP的支持在哪里?

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

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


0
投票

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

$ brew reinstall php72 --with-imap

;extension=php_imap.dll

0
投票

在Ubuntu 16.04上在PHP 7.0.32上安装IMAP。转到给定的链接,并根据您的区域选择链接。就我而言,我选择了亚洲部分的链接。然后将下载一个文件。只需单击该文件即可安装IMAP。然后重启apache

extension=php_imap.dll

检查IMAP是否已安装检查phpinfo file.incase是否成功安装IMAP c-Client Version 2007f将会显示。


57
投票

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

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一起安装(提示:当使用php56w-imap repo时,包的名称可能类似于php71w-imapWebtatic):

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就可以使用了;在尝试使用模块之前,最佳做法可能是检查模块是否被加载。


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


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
投票

echo get_cfg_var('cfg_file_path');

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


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中执行相同的操作


4
投票

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

更新:最新版本qazxsw poi将不再工作!

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"

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


2
投票

如果是安装了php 5.3的centos。

sudo yum安装php53-imap

并重新启动apache

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


1
投票

使用Nginx和PHP-FPM 7的Ubuntu使用:

sudo apt-get install php-imap

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

检查模块是否已安装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

© www.soinside.com 2019 - 2024. All rights reserved.