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

Sum*_*mit 53 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());
Run Code Online (Sandbox Code Playgroud)

Lek*_*eyn 82

很简单,在PHP安装中不会激活IMAP扩展.默认情况下启用它.如果您的本地安装在Windows上运行XAMPP,则必须按照XAMPP常见问题解答中的说明启用它:

IMAP对PHP的支持在哪里?

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

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


Mar*_*ler 58

安装过程始终是相同的,但包管理器和包名不同,这取决于其分布,版本和/或存储库人使用.一般来说,步骤是:

a)首先,需要使用命令su或获得的用户权限升级sudo.

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

c)之后,需要重新启动apache2HTTP守护程序才能加载模块.

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

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

apt-get install php5-imap
service apache2 restart
Run Code Online (Sandbox Code Playgroud)

Debian上,可以安装(或)APT软件包:php5-imapaptitudeapt-get

aptitude install php5-imap
apache2ctl graceful
Run Code Online (Sandbox Code Playgroud)

CentOSFedora上可以安装RPM软件包(提示:软件包的名称可能类似,或者在使用Webtatic repo时):php-imapyumphp56w-imapphp71w-imap

yum install php-imap
service httpd restart
Run Code Online (Sandbox Code Playgroud)

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

systemctl restart httpd.service
Run Code Online (Sandbox Code Playgroud)

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

/etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)

它可能会抛出:

PHP Warning:  Module 'imap' already loaded in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

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

/etc/php5/conf.d/imap.ini
Run Code Online (Sandbox Code Playgroud)

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

php5enmod imap
php5dismod imap
Run Code Online (Sandbox Code Playgroud)

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


pra*_*dam 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

  • 好的调用`php5enmod`行,不是在其他答案中,但在我做完之前它对我不起作用. (3认同)

Shi*_*dan 7

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

;extension=imap.so
Run Code Online (Sandbox Code Playgroud)

所以它变成这样:

extension=imap.so
Run Code Online (Sandbox Code Playgroud)

然后,重新启动apache

# /etc/rc.d/httpd restart
Run Code Online (Sandbox Code Playgroud)