2014-02-21 6 views
14

Wenn ich einen Befehl mit PHP ausführen, zeigt es mir einen Fehler. Zum Beispiel, wenn ich php -v ausführen, um meine PHP-Version zu sehen, es zeigt mir einen Fehler dann die Informationen über PHP:PHP Warnung: Modul 'mcrypt' bereits geladen

Module 'mcrypt' bereits in Unknown geladen on line 0

[email protected]:~$ php -v 

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

PHP 5.4.25-1+sury.org~quantal+2 (cli) (built: Feb 12 2014 11:11:30) 
Copyright (c) 1997-2014 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies 

Antwort

35

Ihre php.ini enthält zwei oder mehrere dieser Zeilen:

extension=mcrypt.so 

entfernen Sie alle mit einer Ausnahme.

php.ini normalerweise lebt in /etc/php.ini oder /etc/php5/php.ini. Manchmal zusätzliche INI-Dateien enthalten sind, können Sie alle von ihnen mit sehen:

$ php -i | grep .ini\$ 
Loaded Configuration File => /usr/local/etc/php.ini 
Additional .ini files parsed => /usr/local/etc/php/extensions.ini 
user_ini.filename => .user.ini => .user.ini 
+6

Vielen Dank, ich löschte die Zeile ** extension = mcrypt.so ** in **/etc/php5/mods-available/mcrypt.ini ** und der Fehler ist jetzt verschwunden thnx –

+2

Ich war auch mit diesem Problem konfrontiert, als ich auf meinem ubuntu 14.04-Rechner von PHP 5.5.9 auf PHP 7.0 umstieg. Und ich fand eine Lösung von https://www.digitalcocean.com/community/questions/php-7-0-php-warning-module-mcrypt-already-loaded-in-unknown-on-line-0, also ich einfach entfernen mcrypt modul: sudo apt-get entfernen php7.0-mcrypt als PHP7.0 von ondrej ist bereits mit mcrypt kompiliert. –

-10

Fehlerberichterstattung deaktivieren in der Entwicklung, können Sie es aus index.php wie unten deaktivieren.

case 'development': 
     error_reporting(-1); 
     ini_set('display_errors', 0); 
break; 
+8

"Ich bekomme Fehler! Hilfe" ... "Ok kein Problem ... einfach ignorieren sie, sie bedeuten nichts.". Neben dieser besonders albernen Antwort, wieso sollten Sie Fehler immer nur in der Entwicklung deaktivieren? Sie befürworten, dass Entwickler Fehler während der Entwicklung ignorieren und sie NUR anzeigen sollten, wenn Ihr System online gegangen ist. –

+1

Schlechte Beratung, stimme ich zu. Lustig ist, 'error_reporting (-1)' ist eigentlich meistens äquivalent zu 'error_reporting (E_ALL) '. Natürlich werden sie immer noch nicht mit 'display_errors = off' angezeigt. Wenn Sie eigentlich die Fehlerberichterstattung (warum !?) deaktivieren wollten, wäre das "error_reporting (0)". – helmbert

1

Manchmal geschieht dies mit php-fpm, und das Komische ist, Konsole php nicht complans über diese den gleichen Satz von Ini-Dateien in der gleichen Zeit mit, was bewies, dass mcrypt in der Tat nicht referenziert zweimal.

Wie sich herausstellt, php-fpm hat eine Standard-Reihe von Modulen eingebaut, dass es versucht, zumindest auf Linux zu laden (da das auf FreeBSD nicht reproduzierbar ist). mcrypt ist in dieser Liste, wenn ein Benutzer eine zusätzliche INI-Datei in seinem Verzeichnis /etc/php.d hat, scheint mcrypt zweimal geladen zu werden.

Eine harte Abhilfe für diese ist die -n Schalter auf den php-fpm auf dem Start zu einem php-fpm.ini, pnp.ini gehören in die resultierenden php-fpm.iniaußer mcrypt und fügen Sie einen zusätzlichen Schalter all Ihre Module kopieren hinzufügen zeigt auf die richtige ini-Datei, so dass die ganze Addition wie folgt aussieht: .

So läuft php-fpm wird nicht beschweren.

Ich schreibe dies hier, weil dies am meisten referenzierte Post in Suchmaschinen über mcrypt Problem ist. Ich weiß, dass die Quellfrage über Konsolen-PHP war.

Update: Ich habe diese Problemumgehung verwendet, aber es ist böse. Vor einiger Zeit habe ich herausgefunden, warum genau das passiert ist. Ich werde noch ein paar Worte dazu verwenden, um dies zu beschreiben, aber das kann langweilig sein, da dies eine bestimmte Art von Versagen beschreibt. Also, in meinem Fall wurde dieses Problem durch die Tatsache verursacht, dass ich eine benutzerdefinierte PHP-Build verwendete, von mir selbst gemacht, und gelegentlich habe ich die mcrypt in die Liste der eingebauten statische Module hinzugefügt. Und dann Ich fügte es wieder als ein eingebautes Modul, so dass es wurde zweimal geladen.Dies geschieht mit einem benutzerdefinierten Build, wenn mcrypt in der Liste der Module für das Konfigurationsskript referenziert wird und nicht als shared aufgeführt ist (dieser Teil der Spezifikation kann leicht gefunden werden, da %configure \ nur einmal in der Spezifikation). In meinem Fall war die Lösung, die mcrypt vollständig aus dem Konfigurationsteil zu entfernen und es zu den build-cgi und build-ztscli Stufen hinzuzufügen. Man könnte fragen "Was ist mit der fpm Bühne?" - und es ist eine gute Frage, aber es stellt sich heraus, fpm sapi selbst ist mit einem Minimum von Modulen gebaut und verwendet generische shared Einsen.

0

Ich hatte das gleiche Problem und es war aufgrund der Erstellung von PHP aus der Quelle mit ./configure --with-mcrypt Option. Es scheint, dass, wenn PHP mit dem --with-mcrypt Flag erstellt wird, keine extension=mcrypt.so in php.ini angegeben werden muss. Dies verursacht die oben erwähnte Warnung.

Verwandte Themen