Неустранимая ошибка: вызов неопределенной функции imap_open () в PHP

Я пытаюсь получить доступ к моей учетной записи gmail через мой localhost. Тем не менее, я получаю ответ:

Неустранимая ошибка: вызов неопределенной функции 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()); 

Solutions Collecting From Web of "Неустранимая ошибка: вызов неопределенной функции imap_open () в PHP"

Достаточно просто, расширение IMAP не активируется в вашей установке PHP. По умолчанию он не включен . Если ваша локальная установка запускает XAMPP в Windows, вы должны включить ее, как описано в FAQ XAMPP :

Где поддержка IMAP для PHP?

По умолчанию поддержка IMAP для PHP отключена в XAMPP, потому что в некоторых домашних версиях, таких как Windows 98, были некоторые загадочные ошибки инициализации. Кто работает с NT-системами, может открыть файл "\xampp\php\php.ini" для активного php exstension, удалив ";extension=php_imap.dll" точку с запятой в строке ";extension=php_imap.dll" . Должно быть: extension=php_imap.dll

Теперь перезапустите Apache и IMAP. Вы можете использовать те же шаги для каждого расширения, которое не включено в конфигурации по умолчанию.

Процедура установки всегда одинакова, но пакет-менеджер и имя пакета различаются, в зависимости от того, какой дистрибутив, версия и / или репозиторий используются. В общем, этапы:

a ) сначала требуется повышение привилегий пользователя, либо полученное с помощью команд su или sudo .

б ) тогда можно установить отсутствующий PHP-модуль с менеджером пакетов.

c ) после этого для загрузки модуля требуется перезапуск apache2 HTTP-демона.

d ) наконец, можно запустить php -m | grep imap 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 на php56w-imap или php71w-imap при использовании Webtatic repo):

 yum install php-imap service httpd restart 

В системах systemd при использовании системных блоков команда перезапуска модуля 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, которые должны быть выполнены до перезапуска веб-сервера:

 php5enmod imap php5dismod imap 

После того, как модуль IMAP загружен на сервер, функции IMAP PHP должны стать доступными; лучше всего проверить, действительно ли модуль загружен , прежде чем пытаться его использовать.

в Ubuntu для установки imap-использования

sudo apt-get install php-imap

Использование Ubuntu 14.04 и выше

sudo apt-get install php5-imap

и imap по умолчанию не включен php, поэтому используйте эту команду для включения расширения imap

sudo php5enmod imap

затем перезапустите апач

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.ini был использован этим экземпляром php.

Во время перехода с 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

если установлен centos с php 5.3.

sudo yum install php53-imap

и перезапустите apache

sudo / sbin / service httpd restart или sudo service apache2 restart

Ubuntu с Nginx и PHP-FPM 7 используют это:

sudo apt-get install php-imap

служба php7.0-fpm перезапуск службы 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

В Mac OS X с Homebrew, как очевидно, PHP уже установлен из-за предоставленной ошибки, которую мы не можем запустить:

 $ 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 секунд)