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