我正在尝试通过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());
答案 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 )首先,需要使用命令
su
或sudo
获取用户权限升级。b )然后可以使用包管理器安装缺少的PHP模块。
c )之后,需要重新启动
apache2
HTTP守护程序来加载模块。d )最后,可以运行
php -m | grep imap
来查看PHP模块现在是否可用。
在 Ubuntu 上APT
包php5-imap
(或php-imap
)可与apt-get
一起安装:
apt-get install php5-imap
service apache2 restart
在 Debian 上,APT
包php5-imap
可以安装aptitude
(或apt-get
):
aptitude install php5-imap
apache2ctl graceful
在 CentOS 和 Fedora 上,RPM
包php-imap
可以与yum
一起安装(提示:包的名称)在使用Webtatic repo时,可能与php56w-imap
或php71w-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
您应该删除分号。