2010-04-09 18 views
50

UWAGA: Obsługa bibliotek MCrypt polega na tym, że nie były aktualizowane od lat, a funkcja MCrypt nie powinna już być uznawana za realną lub bezpieczną metodę szyfrowania danych. Co więcej, MCrypt został przestarzały w PHP 5 i usunięty całkowicie w PHP 7. Jeśli masz jakiś kod, który uruchamia MCrypt, powinieneś go zmodyfikować, aby użyć bardziej nowoczesnej biblioteki szyfrowania.Błąd krytyczny: wywołanie niezdefiniowanej funkcji mcrypt_encrypt()


Czy ktoś wie dlaczego ten komunikat o błędzie: (Call to undefined function mcrypt_encrypt()) wyświetla po uruchomieniu poniżej następujący kod?

Czy brakuje pewnych kroków, być może jakichkolwiek ustawień w PHP, które muszę zrobić, zanim ten kod zadziała?

$key = 'password to (en/de)crypt'; 
$string = 'string to be encrypted'; 

$test = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), 
      $string, MCRYPT_MODE_CBC, md5(md5($key))); 
+0

Jakiej wersji PHP używasz? –

+0

Może masz PHP 4.0.1, jest to funkcja 4.0.2. Działa poprawnie tutaj. – Ben

+5

Mam wersję 5.2.8 i otrzymuję również niezdefiniowany błąd funkcji. –

Odpowiedz

28

Co pracował dla mnie z PHP w wersji 5.2.8, było otwarcie php.ini i umożliwić rozszerzenie php_mcrypt.dll usuwając ;, czyli zmienia:

;extension=php_mcrypt.dll do extension=php_mcrypt.dll

3

Czy mcrypt jest włączony? Możesz użyć numeru phpinfo(), aby sprawdzić, czy jest.

18

Nie masz zainstalowanej biblioteki mcrypt.

Aby uzyskać więcej informacji, patrz http://www.php.net/manual/en/mcrypt.setup.php.

Jeśli korzystasz z hostingu współdzielonego, możesz poprosić operatora o jego zainstalowanie.


W OSX można łatwo zainstalować mcrypt poprzez homebrew

brew install php54-mcrypt --without-homebrew-php 

Następnie dodać tę linię do /etc/php.ini.

extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so" 
+0

Dzięki, dla mnie ścieżka była nieco inna: extension = "/ usr/local/Cellar/php55-mcrypt/5.5.22/mcrypt.so" – anshuman

+0

Dla mnie nie musiałem edytować pliku php.ini, to było już ustawione. Oraz 'phpXX', XX jest dla wersji, której używasz. ('php -v' w terminalu, aby się dowiedzieć.) –

+0

Nie mam nawet ścieżki'/usr/local/Cellar/'. Jesteś pewien, że to prawda? – dspacejs

3

Jeden więcej rzecz: jeśli serwujesz PHP za pośrednictwem serwera WWW, takiego jak Apache, spróbuj ponownie uruchomić serwer WWW. To "zresetuje" wszystkie moduły PHP, które mogą być obecne, aktywując nową konfigurację.

3

Zakładając, że używasz Linuksa Debiana (używam Linux Mint 12, problem był na serwerze Ubuntu 12.04.1 LTS I ssh'ed w.)

proponuję porady @dkamins i upewniając się, że masz mcrypt jest zainstalowany i aktywny na twojej instalacji php5. Użyj "sudo apt-get install php5-mcrypt", aby zainstalować. Moje notatki poniżej.

Jeśli używasz PHP w wersji PHP Version 5.3.10-1ubuntu3.4, jeśli otworzysz phpinfo() zgodnie z sugestią @Johna Conde'a, co zrobisz, tworząc plik testowy na serwerze WWW (np. Stwórz stronę statusu testphp.php z zawartością "" wszędzie dostępną na stronie serwer za pośrednictwem przeglądarki)

Po otwarciu przeglądarki nie znalazłem stanu włączonego ani wyłączonego na stronie statusu. Kiedy następnie otworzyłem php.ini, wspomniane przez @Anthony Forloney, myśląc odkomentowac ;extension=php_mcrypt.dll to extension=php_mcrypt.dll

ja włączać tę iz powrotem i ponownie Apache (Biegnę Apache2 i można ponownie uruchomić w mojej konfiguracji z sudo /etc/init.d/apache2 restart lub gdy jesteś w tym katalogu tylko sudo restart Wierzę) ze zmianą i bez zmian, ale wszystkie nie ma. Wziąłem radę @dkamins i poszedłem zainstalować pakiet z "sudo apt-get install php5-mcrypt", a następnie zrestartowałem apache jak wyżej. Wtedy mój błąd zniknął i moja aplikacja działała dobrze.

11

pod Ubuntu miałem problem i rozwiązać go z

$ sudo apt-get install php5-mcrypt 
$ sudo service apache2 reload 
+0

Pracowałem dla mnie. Ale musiałem ręcznie załadować apache ręcznie! – Peter

1

dla systemu Linux (Fedora) opartego

yum -y install php-mcrypt 

Włącz moduł dodając: 'extension = mcrypt.so' do PHP. ini. (/etc/php.ini)

systemctl restart httpd.service 

Zrobione!

24

Do okien

;extension=php_mcrypt.dll to extension=php_mcrypt.dll 
then restart your apache server 

Dla RedHat

sudo yum install php55-mcrypt //if php5.5 
sudo yum install php-mcrypt //if less than 5.4 
sudo service httpd restart //if apache 2.4 
sudo /etc/init.d/httpd restart //if apache 2.2 or less 

dla Ubuntu

sudo apt-get install php5-mcrypt 
sudo service apache2 restart //if server not reloaded automatically 

Nadal nie działa?

sudo php5enmod mcrypt && sudo service apache2 restart

82

Jeśli niedawno zaktualizowany do Ubuntu 1404 tutaj jest poprawka do tego problemu:

$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ 
$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 
+3

Pracowałem !!! Dzięki!. Tylko z dwoma ostatnimi liniami. –

+1

Twoja odpowiedź jest lepsza niż zaakceptowana. – Fuser97381

+3

'mcrypt.ini' był już w'/etc/php5/mods-available/'na mojej instalacji, więc musiałem tylko uruchomić php5enmod. – nullability

7

na Ubuntu 14.10:

zainstalować moduł mcrypt

sudo apt install php5-mcrypt 

Włącz moduł mcrypt na apache2

sudo a2enmod mcrypt 

moduł Odśwież konfiguracja

sudo service apache2 restart 
+3

Myślę, że masz na myśli: 'sudo php5enmod mcrypt' –

+0

' php5enmod' i 'php5dismod' to nowe polecenia wprowadzone w systemach debian dla php (> = 5.4.0 ~ rc6-1). Zgodnie z tym postem http://php.net/manual/fr/mcrypt.setup.php#116231 wystarczy zrobić sudo 'apt-get install php5-mcrypt'' sudo php5enmod mcrypt' 'sudo service apache2 reload' – alphayax

0

Sprawdź i zainstalować php5-mcrypt:

sudo apt-get install php5-mcrypt 
5

Na Linux Mint 17,1 Rebecca - Zadzwoń do niezdefiniowanej funkcji mcrypt_create_iv ...

rozwiązywane przez dodanie następującą linię do php.ini

extension=mcrypt.so 

Po tym w

service apache2 restart 

rozwiązać go ...

3

Jeśli używasz php5-fpm zrobić Pamiętaj, aby go ponownie uruchomić po zainstalowaniu mcrypt

obsługa php5-fpm restart

3

Jeśli używasz Ubuntu 14.04 jest tu poprawka do tego problemu:

najpierw należy sprawdzić php5-mcryp jest już zainstalowany apt-get install php5-mcrypt

Jeśli zainstalowany, wystarczy uruchomić ten dwa polecenia lub zainstalowaniu i uruchomieniu tego dwa polecenia

$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 

Mam nadzieję, że zadziała.

1

Dla mnie to pomogło odinstalowanie mcrypt z:

sudo apt-get purge php5-mcrypt 

i po prostu zainstalować go ponownie:

sudo apt-get install php5-mcrypt 

i nie zapomnij, aby ponownie uruchomić apache, jak opisano powyżej.

Nie wiem, dlaczego i jak było inaczej w moim przypadku (przy użyciu vm z udostępnionym php55), ale może to pomoże komuś innemu. Też miałem ten problem z kilkoma innymi modułami jak xcache ...

3

Miałem ten sam problem dla wersji PHP 7 brakującej mcrypt.

To zadziałało dla mnie.

sudo apt-get update 
sudo apt-get install mcrypt php7.0-mcrypt 
sudo apt-get upgrade 
sudo service apache2 restart (if needed) 
+0

To działa! Ale potrzebne tylko php7.0-mcrypt. Po zainstalowaniu i ponownym uruchomieniu apache, pokazuje teraz mcrypt na phpinfo(); "Zarejestrowane filtry strumieniowe zlib. *, String.rot13, string.toupper, string.tolower, string.strip_tags, convert. *, Skonsumowane, dechunk, convert.iconv. *, Mcrypt. *, Mdecrypt. *' –

Powiązane problemy