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

Я пытаюсь получить доступ к своей учетной записи 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());

Ответы [ 11 ]

81 голосов
/ 11 марта 2012

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

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

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

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

57 голосов
/ 30 июля 2012

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

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 или php71w-imap, при использовании Webtatic репо):

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 должны быть доступны функции PHP IMAP *1086*; перед попыткой его использования рекомендуется проверить, загружен ли модуль .

33 голосов
/ 02 сентября 2014

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

sudo apt-get установите php-imap

Используйте Ubuntu 14.04 и выше

sudo apt-get install php5-imap

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

sudo php5enmod imap

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

sudo service apache2 restart

7 голосов
/ 16 июля 2012

если вы используете 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 голосов
/ 24 августа 2017

В Mac OS X с Homebrew, как очевидно, 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 секунд)

4 голосов
/ 03 января 2016

Во время миграции с 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

4 голосов
/ 28 августа 2013

С

echo get_cfg_var('cfg_file_path');

вы можете узнать, какой php.ini использовался этим экземпляром php.

2 голосов
/ 13 августа 2013

, если это Centos с установленным php 5.3.

sudo yum install php53-imap

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

sudo / sbin / service httpd restart или же перезапуск службы sudo apache2

1 голос
/ 29 августа 2017

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

0 голосов
/ 06 февраля 2019

Для установки IMAP на PHP 7.0.32 на Ubuntu 16.04.Перейдите по указанной ссылке и в зависимости от региона выберите ссылку.В моем случае я выбираю ссылку в разделе Азия.Затем файл будет загружен.просто нажмите на файл, чтобы установить IMAP. После перезапуска apache

https://packages.ubuntu.com/xenial/all/php-imap/download.

, чтобы проверить, установлен ли IMAP, проверьте phpinfo file.incase успешной установки..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...