【问题标题】:Fatal error: Call to undefined function imap_open() in PHP致命错误:在 PHP 中调用未定义的函数 imap_open()
【发布时间】:2012-03-28 02:35:18
【问题描述】:

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

【问题讨论】:

    标签: php imap


    【解决方案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.. 未能检索到标头........之后你能帮我把它缩短
    • 你能检查一下[这个]需要帮助(stackoverflow.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) 首先,需要提升用户权限,可以通过命令susudo 获得。

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

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

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

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

      apt-get install php5-imap
      service apache2 restart
      

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

      aptitude install php5-imap
      apache2ctl graceful
      

      CentOSFedora 上,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.ini
        • php5enmod 线上的电话很好,不在其他答案中,但在我这样做之前它对我不起作用。
        • 关于 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
                    猜你喜欢
                    • 2020-08-08
                    • 2014-02-19
                    • 2017-09-03
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-06-23
                    • 1970-01-01
                    相关资源
                    最近更新 更多