Неустранимая ошибка: вызов функции undefined imap_open() в PHP
Я пытаюсь получить доступ к своей учетной записи 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());
Ответы
Ответ 1
Достаточно просто, расширение IMAP не активируется в вашей установке PHP. Он не включен по умолчанию. Если ваша локальная установка запускает XAMPP в Windows, вы должны включить ее, как описано в часто задаваемых вопросах XAMPP:
Где поддержка IMAP для PHP?
По умолчанию поддержка IMAP для PHP отключается в XAMPP, потому что были некоторые загадочные ошибки инициализации с некоторыми домами таких как Windows 98. Кто работает с NT-системами, может открыть файл "\xampp\php\php.ini"
, чтобы активировать expension php, удалив начало точки с запятой на линии ";extension=php_imap.dll"
. Должно быть: extension=php_imap.dll
Теперь перезапустите Apache и IMAP. Вы можете использовать те же шаги для каждого расширения, которое не включено по умолчанию конфигурации.
Ответ 2
Процедура установки всегда одинакова, но менеджер пакетов и имя пакета различаются, в зависимости от того, какой дистрибутив, версия и/или репозиторий используются. В общем, шаги:
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 repo):
yum install php-imap
service httpd restart
В системах systemd
, используя systemd units, команда перезапуска unit 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 Functions должен стать доступным; лучше всего проверить, действительно ли модуль загружен, прежде чем пытаться его использовать.
Ответ 3
В 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
Ответ 4
если вы используете linux, отредактируйте /etc/php/php.ini
(или вам нужно будет создать файл импорта нового расширения в файле /etc/php 5/cli/conf.d), чтобы добавить файл общего файла imap, а затем, перезапустите сервер Apache. Раскоментируйте
;extension=imap.so
чтобы он выглядел следующим образом:
extension=imap.so
Затем перезапустите apache с помощью
# /etc/rc.d/httpd restart
Ответ 5
С
echo get_cfg_var('cfg_file_path');
вы можете узнать, какой php.ini был использован этим экземпляром php.
Ответ 6
Во время миграции с 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
Ответ 7
В 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 секунд)
Ответ 8
если это Centos с установленным php 5.3.
sudo yum install php53-imap
и перезапустите apache
sudo /sbin/service httpd restart
или
sudo service apache2 restart
Ответ 9
Ubuntu с Nginx и PHP-FPM 7 использует это:
sudo apt-get install php-imap
перезагрузка службы php7.0-fpm
перезапуск службы ngnix
проверить, что модуль установлен
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
Ответ 10
Если ваша локальная установка работает под управлением XAMPP в Windows, этого достаточно: вы можете открыть файл "\ xampp\php\php.ini", чтобы активировать расширение php, удалив начальную точку с запятой в строке "; extension = php_imap.dll". Так должно быть:
;extension=php_imap.dll
в
extension=php_imap.dll
Ответ 11
Установить IMAP на PHP 7.0.32 на Ubuntu 16.04. Перейдите по указанной ссылке и в зависимости от вашего региона выберите ссылку. В моем случае я выбираю ссылку в разделе Азия. Затем файл будет загружен. просто нажмите на файл, чтобы установить IMAP. Затем перезапустите apache
https://packages.ubuntu.com/xenial/all/php-imap/download.
чтобы проверить, установлен ли IMAP, проверьте phpinfo file.incase успешной установки IMAP c-Client Version 2007f будет показан.
Ответ 12
Для Xampp 7.3.9
PHP.ini
строка 913:
;extension=imap
Вы должны удалить точку с запятой.