Error fatal: Llamada a la función undefined imap open () en PHP


Estoy intentando acceder a mi cuenta de gmail a través de mi localhost. Sin embargo, estoy recibiendo la respuesta:

Error fatal: Llamar a la función undefined imap_open ()

¿Puede alguien señalar qué debo hacer para resolver el problema?

$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());
 49
Author: Ondra Žižka, 2012-03-11

10 answers

Bastante simple, la extensión IMAP no está activada en su instalación de PHP. No está activado por defecto. Si su instalación local está ejecutando XAMPP en Windows, debe habilitarla como se describe en XAMPP FAQ :

¿Dónde está el soporte IMAP para PHP?

Por defecto, el soporte IMAP para PHP está desactivado en XAMPP, porque hubo algunos errores misteriosos de inicialización con algunos versiones como Windows 98. Quién trabaja con NT sistemas, puede abrir el archivo "\xampp\php\php.ini" para activar la extensión de php eliminando comenzando punto y coma en la línea ";extension=php_imap.dll". Debería ser: extension=php_imap.dll

Ahora reiniciar Apache e IMAP debería funcionar. Puedes usar los mismos pasos para cada extensión, que no está habilitada en el valor predeterminado configuración.

 72
Author: Lekensteyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-15 10:22:48

El Procedimiento de instalación es siempre el mismo, pero el gestor de paquetes y el nombre del paquete varían, dependiendo de la distribución, versión y/o repositorio que se utilice. En general, los pasos son:

A ) al principio, se requiere una escalada de privilegios de usuario, ya sea obtenida con los comandos su o sudo.

B ) entonces se puede instalar el módulo PHP ausente con un gestor de paquetes.

C) después de eso, reiniciar el demonio HTTP apache2 es necesario para cargar el módulo.

D ) por fin, se puede ejecutar php -m | grep imap para ver si el módulo PHP está ahora disponible.

En Ubuntu el paquete APT php5-imap (o php-imap) puede bei instalado con apt-get:

apt-get install php5-imap
service apache2 restart

En Debian , el paquete APT php5-imap se puede instalar aptitude (o apt-get):

aptitude install php5-imap
apache2ctl graceful

En CentOS y Fedora el paquete RPM php-imap se puede instalar con yum (pista: el nombre del paquete podría ser algo similar php56w-imap o php71w-imap, cuando se usa Webtatic repo):

yum install php-imap
service httpd restart

En sistemas systemd, mientras se usa systemd units , el comando para reiniciar unit httpd.service es:

systemctl restart httpd.service

La solución indicada anteriormente tiene el problema, que cuando el módulo ya estaba referenciado en:

/etc/php5/apache2/php.ini

Podría lanzar un:

PHP Warning:  Module 'imap' already loaded in Unknown on line 0

Eso sucede, porque se hace referencia en el archivo predeterminado php.ini (al menos en Ubuntu 12.04) y un El módulo PHP debe ser referenciado como máximo una vez. Se sugiere usar INI fragmentos de código para cargar módulos, mientras el directorio /etc/php5/conf.d/ (esa ruta también puede variar) está siendo escaneado para INI archivos:

/etc/php5/conf.d/imap.ini

Ubuntu también cuenta con comandos propietarios para administrar módulos PHP, que se ejecutarán antes de reiniciar el servidor web:

php5enmod imap
php5dismod imap

Una vez que el módulo IMAP se carga en el servidor, las funciones IMAP de PHP deberían estar disponibles; la mejor práctica puede ser: compruebe si un módulo está cargado, antes de intentar utilizarlo.

 53
Author: Martin Zeitler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-02 19:06:02

En Ubuntu para instalar imap use

Sudo apt-get install php-imap

Ubuntu 14.04 y superior use

Sudo apt-get install php5-imap

E imap por defecto no habilitado por php así que use este comando para habilitar la extensión imap

Sudo php5enmod imap

Luego reinicie su apache

Sudo service apache2 restart

 31
Author: pramod kadam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-30 10:08:21

Si está en linux, edite el /etc/php/php.ini (o tendrá que crear un nuevo archivo de importación de extensión en /etc/php5/cli/conf.d) archivo para agregar el archivo de objeto compartido imap y, a continuación, reiniciar el servidor apache. Uncomment

;extension=imap.so

De modo que se vuelve así:

extension=imap.so

Luego, reinicie el apache por

# /etc/rc.d/httpd restart
 7
Author: Shiva Nandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-18 13:45:25

Con

echo get_cfg_var('cfg_file_path');

Puede averiguar qué php.ini ha sido utilizado por esta instancia de php.

 4
Author: abhilashv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-28 07:14:28

Durante la migración de Ubuntu 12.04 a 14.04 tropecé con esto también y quería compartir que a partir de Ubuntu 14.04 LTS la extensión IMAP ya no parece cargarse por defecto.

Compruebe si la extensión está instalada:

dpkg -l | grep php5-imap

Debería dar una respuesta como esta:

ii  php5-imap       5.4.6-0ubuntu5   amd64        IMAP module for php5

Si no, instálelo.

Para habilitar realmente la extensión

cd /etc/php5/apache2/conf.d
ln -s ../../mods-available/imap.ini 20-imap.ini
service apache2 restart

Debería arreglarlo para apache. Para CLI haga lo mismo en /etc/php5/cli/conf.d

 4
Author: M5M400,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-03 18:26:07

En Mac OS X con Homebrew, como obviamente, PHP ya está instalado debido a un error proporcionado que no podemos ejecutar:

Actualización: Tha última versión brew instal php --with-imap no funcionará más!!!

$ brew install php72 --with-imap
Warning: homebrew/php/php72 7.2.xxx is already installed

Además, instalando solo el módulo, aquí no funcionará:

$ brew install php72-imap
Error: No available formula with the name "php72-imap"

Entonces, debemos reinstalarlo :

$ brew reinstall php72 --with-imap

Tomará un tiempo: -) (construido en 8 minutos 17 segundos)

 4
Author: Vladimir Vukanac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-25 18:16:02

Si es centos con php 5.3 instalado.

Sudo yum install php53-imap

Y reiniciar apache

Sudo/sbin / service httpd restart o sudo service apache2 restart

 2
Author: Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-13 01:26:54

Ubuntu con Nginx y PHP-FPM 7 usa esto:

Sudo apt-get install php-imap

Service php7. 0-fpm restart servicio ngnix restart

Compruebe que el módulo ha sido instalado php-m / grep imap

La configuración para el módulo imap se habilitará automáticamente, tanto en cli php.ini y en 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
Author: Carlos Martinez Ival,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-29 09:50:03

Si su instalación local está ejecutando XAMPP en Windows, eso es suficiente : puede abrir el archivo "\xampp\php\php.ini "para activar la extensión php eliminando el punto y coma inicial en la línea"; extension = php_imap.DLL". Debe ser:

;extension=php_imap.dll

A

extension=php_imap.dll
 0
Author: Mahdi Bashirpour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 07:31:41