我试图通过我的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扩展。它不是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应该可行。您可以对每个扩展使用相同的步骤,默认配置中未启用。
如果您的本地安装在Windows上运行XAMPP,那就足够了:您可以通过删除“; extension = php_imap.dll”行中的开头分号来打开文件“\ xampp \ php \ php.ini”来激活php exstension。它应该是:
$ brew reinstall php72 --with-imap
至
;extension=php_imap.dll
在Ubuntu 16.04上在PHP 7.0.32上安装IMAP。转到给定的链接,并根据您的区域选择链接。就我而言,我选择了亚洲部分的链接。然后将下载一个文件。只需单击该文件即可安装IMAP。然后重启apache
extension=php_imap.dll
。
检查IMAP是否已安装检查phpinfo file.incase是否成功安装IMAP c-Client Version 2007f将会显示。
安装过程始终相同,但是包管理器和包名称会有所不同,具体取决于使用的分发版本,版本和/或存储库。一般来说,步骤是:
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
一起安装(提示:当使用php56w-imap
repo时,包的名称可能类似于php71w-imap
或Webtatic):
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就可以使用了;在尝试使用模块之前,最佳做法可能是检查模块是否被加载。
在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
如果你在Linux上,编辑/etc/php/php.ini
(或者你必须在/etc/php5/cli/conf.d创建一个新的扩展导入文件)文件,这样你就可以添加imap共享对象文件,然后重新启动apache服务器。取消注释
;extension=imap.so
所以它变成这样:
extension=imap.so
然后,重新启动apache
# /etc/rc.d/httpd restart
同
echo get_cfg_var('cfg_file_path');
你可以找到这个php实例使用的php.ini。
在从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中执行相同的操作
在带有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秒)
如果是安装了php 5.3的centos。
sudo yum安装php53-imap
并重新启动apache
sudo / sbin / service httpd restart或sudo service apache2 restart
使用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