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

2022-08-30 09:13:45

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

答案 1

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

IMAP 对 PHP 的支持在哪里?

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

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


答案 2

安装过程始终相同,但包管理器和包名称会有所不同,具体取决于使用的发行版、版本和/或存储库。通常,这些步骤是:

a) 首先,需要用户权限提升,可以使用命令或 .susudo

b)然后可以使用包管理器安装不存在的PHP模块。

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

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

Ubuntu 上,软件包 (or ) 可以与 以下一起安装:APTphp5-imapphp-imapapt-get

apt-get install php5-imap
service apache2 restart

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

aptitude install php5-imap
apache2ctl graceful

CentOSFedora 上,软件包可以随之安装(提示:当使用 Webtatic 存储库时,软件包的名称可能是相似的或 )RPMphp-imapyumphp56w-imapphp71w-imap

yum install php-imap
service httpd restart

在系统上,使用 systemd 设备时,重新启动设备的命令是:systemdhttpd.service

systemctl restart httpd.service

上述解决方案存在一个问题,即当模块已在以下位置被引用时:

/etc/php5/apache2/php.ini

它可能会抛出一个:

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

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

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

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

php5enmod imap
php5dismod imap

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


推荐