2012-03-11 168 views
45

我想通過本地主機訪問我的Gmail帳戶。但是,我得到了響應:致命錯誤:在PHP中調用未定義的函數imap_open()

致命錯誤:調用未定義功能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()); 
+0

你能告訴你的代碼? – 2012-03-11 11:20:19

+0

@Waynn代碼已添加。 – Sumit 2012-03-11 11:26:21

+0

請在PHP中添加PHP標籤。 – 2012-07-17 00:07:54

回答

66

足夠簡單,IMAP擴展未在您的PHP安裝中激活。它不是enabled by default。如果您的本地安裝運行XAMPP在Windows上,你必須按照說明,以使它XAMPP FAQ

Where is the IMAP support for PHP?

As default, the IMAP support for PHP is deactivated in XAMPP, because there were some mysterious initialization errors with some home versions like Windows 98. Who works with NT systems, can open the file "\xampp\php\php.ini" to active the php exstension by removing the beginning semicolon at the line ";extension=php_imap.dll" . Should be: extension=php_imap.dll

Now restart Apache and IMAP should work. You can use the same steps for every extension, which is not enabled in the default configuration.

+0

謝謝!擺脫了錯誤。 – Sumit 2012-03-11 11:34:32

+0

@Sumit,可能想選擇這個作爲答案! – 2013-10-24 04:58:50

+0

按照您的指示,但仍然出現錯誤致命錯誤:調用未定義的函數imap_open() – 2016-07-05 06:50:08

7

,如果你是在Linux上,編輯/etc/php/php.ini(或你將不得不創建一個新的擴展導入文件/etc/php5/cli/conf.d)文件,以便添加imap共享對象文件,然後重新啓動apache服務器。取消註釋

;extension=imap.so 

,使其變成這樣:

extension=imap.so 

然後,重新啓動由

# /etc/rc.d/httpd restart 
51

安裝過程總是相同的apache的,但包管理器和包名稱會有所不同,具體取決於使用的分發版本,版本和/或存儲庫。一般而言,步驟是:

a) at first, user privilege escalation is required, either obtained with the commands su or sudo .

b) then one can install the absent PHP module with a package manager.

c) after that, restarting the apache2 HTTP daemon is required to load the module.

d) at last, one can run php -m | grep imap to see if the PHP module is now available.

Ubuntu的APTphp5-imap(或php-imap)可以BEI安裝有apt-get

apt-get install php5-imap 
service apache2 restart 

的Debian,所述APTphp5-imap可以是(或apt-get):

aptitude install php5-imap 
apache2ctl graceful 

CentOS的的FedoraRPMphp-imap可以yum安裝(提示:包的名稱使用Webtatic回購時可能有一些相似php56w-imapphp71w-imap):

yum install php-imap 
service httpd restart 

systemd系統上,當使用systemd units時,重啓單元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然後變得可用;在嘗試使用它之前,最好的做法可能是檢查模塊是否被加載到了

+0

在Ubuntu上,除了安裝軟件包之外,我還必須執行「php5enmod imap」! - 請參閱@pramod kadam的腳本,它低於 – mattanja 2016-05-26 10:34:20

+0

@mattanja它取決於conf.d/imap.ini文件是否存在和解析,而不管是否爲'php5enmod'是一個Ubuntu特定的命令,它基本上除了創建該文件 - 而'php5dismod'刪除它。根據你的建議更新了答案。 – 2016-05-26 15:13:33

+0

瞭解。只是說,現在答案更完整,謝謝! (在Ubuntu描述中提供信息可能會爲另一個人節省另外幾秒鐘的時間;) – mattanja 2016-05-27 08:30:15

2

如果它是安裝php 5.3的centos。

須藤yum的安裝php53-IMAP

,並重新啓動Apache

須藤/ sbin目錄/服務的httpd重新啓動 或 須藤服務的Apache2重啓

+0

可以省略鍵入/ sbin - 因爲該路徑通常包含在root的$ PATH環境中。只需檢查/root/.bashrc一次 - 你會看到給出的內容。 – 2014-02-25 12:47:01

4

隨着

echo get_cfg_var('cfg_file_path'); 

你可以找到出哪個php。ini已被這個php實例使用。

31

在Ubuntu 用於安裝IMAP使用

命令和apt-get安裝PHP-IMAP

的Ubuntu 14.04及以上版本使用

命令和apt-get安裝PHP5-IMAP

和imap默認情況下未啓用php,所以使用此命令啓用imap擴展

須藤php5enmod IMAP

然後重新啓動你的Apache

須藤服務的Apache2重啓

+0

+1這是我的情況:或者你可以去/etc/php5/apache2/conf.d並執行ln -s ../../mods-available/imap.ini ./20-imap.ini – Mike 2014-09-14 10:12:47

+2

在'php5enmod'這行上打好電話,並沒有出現在其他答案中,但是直到我做完之後它才起作用。 – M1ke 2014-11-27 15:02:31

+1

關於http://www.php.net/manual/en/imap.setup.php在Ubuntu 14.04+上應該是 sudo apt-get install php5-imap(不是php-imap) sudo php5enmod imap – lubart 2015-09-02 10:10:03

4

在從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

在Mac OS X與自制一樣的,很顯然,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 

It will take a while :-) (built in 8 minutes 17 seconds)

0

Ubuntu的nginx的和PHP-FPM 7使用本:

命令和apt-get安裝PHP-IMAP

服務php7.0-FPM重啓 服務ngnix重啓

檢查模塊已經安裝了 php -m | grep的IMAP

的配置模塊IMAP會在兩者CLI php.ini並在FPM的php.ini

納米/etc/php/7.0/cli/conf.d/20-imap自動啓用。INI 納米/etc/php/7.0/fpm/conf.d/20-imap.ini

0

如果你的本地安裝運行XAMPP在Windows上,這就夠了: 可以打開文件「\ XAMPP \ PHP \ php.ini「通過刪除行」; extension = php_imap.dll「中的起始分號來激活php exstension。它應該是:

;extension=php_imap.dll 

extension=php_imap.dll 
相關問題