致命错误:在 PHP 中调用未定义的函数 imap_open()
Posted
技术标签:
【中文标题】致命错误:在 PHP 中调用未定义的函数 imap_open()【英文标题】:Fatal error: Call to undefined function imap_open() in PHP 【发布时间】:2012-03-28 02:35:18 【问题描述】:我正在尝试通过本地主机访问我的 gmail 帐户。但是,我收到了回复:
致命错误:调用未定义的函数 imap_open()
这是我的代码:
$hostname = 'imap.gmail.com:993/imap/sslINBOX';
$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】:很简单,在您的 php 安装中没有激活 IMAP 扩展。不是enabled by default。如果您的本地安装在 Windows 上运行 XAMPP,您必须按照XAMPP FAQ 中的说明启用它:
PHP 的 IMAP 支持在哪里?
默认情况下,XAMPP 中禁用了对 PHP 的 IMAP 支持,因为 一些家庭出现了一些神秘的初始化错误 Windows 98 等版本。谁使用 NT 系统,可以打开该文件
"\xampp\php\php.ini"
通过删除激活 php 扩展 在";extension=php_imap.dll"
行开始分号。应该:extension=php_imap.dll
现在重新启动 Apache,IMAP 应该可以工作了。您可以使用相同的步骤 对于每个扩展,默认情况下未启用 配置。
【讨论】:
按照您的说明进行操作,但仍然出现错误 致命错误:调用未定义的函数 imap_open() in @SunilBhawsar 确保 PHP 编译时支持 IMAP,并且它是内置的,或者扩展文件在扩展目录中可用。请务必检查错误日志。 警告:imap_header(): Bad message number in.. 未能检索到标头........之后你能帮我把它缩短 你能检查一下[这个]需要帮助(***.com/questions/39745784/…)【参考方案2】:如果您使用的是 linux,请编辑 /etc/php/php.ini
(或者您必须在 /etc/php5/cli/conf.d 中创建一个新的扩展导入文件)文件,以便添加 imap 共享对象文件,然后,重启apache服务器。取消注释
;extension=imap.so
让它变成这样:
extension=imap.so
然后,通过
重启apache# /etc/rc.d/httpd restart
【讨论】:
【参考方案3】:安装过程总是相同的,但包管理器和包名称会有所不同,具体取决于使用的发行版、版本和/或存储库。一般来说,步骤是:
a) 首先,需要提升用户权限,可以通过命令
su
或sudo
获得。b) 然后可以使用包管理器安装缺少的 PHP 模块。
c) 之后,需要重新启动
apache2
HTTP 守护进程来加载模块。d) 最后,可以运行
php -m | grep imap
来查看PHP 模块现在是否可用。
在 Ubuntu 上可以使用 apt-get
安装 APT
包 php5-imap
(或 php-imap
):
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
一起安装(提示:软件包名称可能与 @987654341 类似@ 或php71w-imap
,当使用Webtatic repo):
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
sn-ps 加载模块,同时正在扫描目录/etc/php5/conf.d/
(该路径也可能不同)以查找INI
文件:
/etc/php5/conf.d/imap.ini
Ubuntu 还具有用于管理 PHP 模块的专有命令,在重新启动网络服务器之前执行:
php5enmod imap
php5dismod imap
一旦IMAP
模块被加载到服务器中,PHP IMAP Functions 应该就可以使用了;最佳实践可能是,在尝试使用模块之前检查模块是否已加载。
【讨论】:
在 Ubuntu 上,除了安装软件包之外,我还必须执行“php5enmod imap”! - 见下面@pramod kadam 的分析器 @mattanja 它取决于conf.d/imap.ini
是否存在并被解析,而php5enmod
是一个特定于Ubuntu 的命令,它基本上除了创建该文件之外什么都不做——而@987654358 @删除它。根据您的建议更新了答案。
明白了。只是说,现在答案更完整了,谢谢! (在 Ubuntu 的描述中提供正确的信息可能会为某人节省几秒钟;)
对于 PHP7 它是 apt-get install php-imap (Ubuntu)【参考方案4】:
如果是安装了php 5.3的centos。
sudo yum install php53-imap
然后重启 apache
sudo /sbin/service httpd restart
或
sudo service apache2 restart
【讨论】:
可以省略输入 /sbin - 因为该路径通常包含在 root 的 $PATH 环境中。只需检查 /root/.bashrc 一次 - 你就会看到给出的内容。【参考方案5】:与
echo get_cfg_var('cfg_file_path');
你可以找出这个 php 实例使用了哪个 php.ini。
【讨论】:
【参考方案6】:在 Ubuntu 中安装 imap 使用
sudo apt-get install php-imap
Ubuntu 14.04及以上使用
sudo apt-get install php5-imap
PHP默认不启用imap,所以使用这个命令来启用imap扩展
sudo php5enmod imap
然后重启你的 Apache
sudo service apache2 restart
【讨论】:
+1 这是我的情况:或者您可以转到 /etc/php5/apache2/conf.d 并执行 ln -s ../../mods-available/imap.ini 。 /20-imap.iniphp5enmod
线上的电话很好,不在其他答案中,但在我这样做之前它对我不起作用。
关于 Ubuntu 14.04+ 上的 php.net/manual/en/imap.setup.php 应该是 sudo apt-get install php5-imap (not php-imap) sudo php5enmod imap
要为 php7 启用 imap,您可以简单地运行“sudo phpenmod imap”【参考方案7】:
在从 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 中执行相同操作
【讨论】:
【参考方案8】:在带有 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 秒)
【讨论】:
【参考方案9】:带有 nginx 和 PHP-FPM 7 的 Ubuntu 使用这个:
sudo apt-get install php-imap
服务php7.0-fpm重启 服务 ngnix 重启
检查模块是否已安装 php -m | grep imap
模块 imap 的配置将在 cli php.ini 和 fpm php.ini 中自动启用
纳米 /etc/php/7.0/cli/conf.d/20-imap.ini 纳米 /etc/php/7.0/fpm/conf.d/20-imap.ini
【讨论】:
【参考方案10】:如果您的本地安装在 Windows 上运行 XAMPP,那就足够了: 您可以通过删除“;extension=php_imap.dll”行的开头分号来打开文件“\xampp\php\php.ini”以激活 php 扩展。应该是:
;extension=php_imap.dll
到
extension=php_imap.dll
【讨论】:
【参考方案11】:在 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。
【讨论】:
【参考方案12】:对于 Xampp 7.3.9
PHP.ini
913 行:
;extension=imap
您应该删除分号。
【讨论】:
【参考方案13】:我有同样的问题。在 php.ini 文件中更改分号后,我解决了我的问题。让我们看看你怎么解决它?
首先,打开 php.ini 文件。 xampp/php/php.ini
搜索 extension=imap
删除扩展名前的分号并保存此文件。
删除分号之前的代码;extension=imap
去掉分号后的代码extension=imap
最后,打开 XAMPP 控制面板并重新启动 Apache。
【讨论】:
这个用于windows 10以上是关于致命错误:在 PHP 中调用未定义的函数 imap_open()的主要内容,如果未能解决你的问题,请参考以下文章
PHP 致命错误:调用未定义的函数 imagecreatefrompng()
致命错误:在第 2 行的 index.php 中调用未定义函数 get_header()
致命错误:调用未定义的函数 imagewebp() [关闭]
PHP 致命错误:仅在 Eclipse 中调用未定义函数 json_decode()