2014-12-24 21 views
17

Znalazłem problem, gdy używam funkcji mcrypt_get_iv_size przez AppServ.php - Błąd krytyczny: wywołanie niezdefiniowanej funkcji mcrypt_get_iv_size() w AppServ

Próbuję znaleźć temat związany z rozwiązaniem problemu.

Jednak próbuję pobrać libmcrypt.dll do symtem32 i edytować plik php.ini, usuwając komentarz z ;extension=php_mcrypt.dll do extension=php_mcrypt.dll. Następnie uruchom ponownie apache.

Niestety, po przeładowaniu strony, aby zobaczyć wynik po modyfikacji.

Nadal błąd jak

Fatal error: Call to undefined function mcrypt_get_iv_size() in C:\AppServ\www\folder\index.php on line 36

Funkcja zawiera następujące elementy:

class Encryption { 
    var $skey  = "SuPerEncKey2010"; // you can change it 

    public function safe_b64encode($string) { 

     $data = base64_encode($string); 
     $data = str_replace(array('+','/','='),array('-','_',''),$data); 
     return $data; 
    } 

    public function safe_b64decode($string) { 
     $data = str_replace(array('-','_'),array('+','/'),$string); 
     $mod4 = strlen($data) % 4; 
     if ($mod4) { 
      $data .= substr('====', $mod4); 
     } 
     return base64_decode($data); 
    } 

    public function encode($value){ 

     if(!$value){return false;} 
     $text = $value; 
     $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
     $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv); 
     return trim($this->safe_b64encode($crypttext)); 
    } 

    public function decode($value){ 

     if(!$value){return false;} 
     $crypttext = $this->safe_b64decode($value); 
     $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
     $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv); 
     return strtolower(trim($decrypttext)); 
    } 
} 
+0

spróbuj uruchomić php z wiersza poleceń, który da ci błąd, który może się wydarzyć podczas ładowania biblioteki dll, jak brakujące biblioteki dll, brakujące ścieżki, mieszane środowisko uruchomieniowe C++ itp. –

+0

jak to zrobić? możesz zasugerować? Sprawdzam wszystkie biblioteki dll i przechowywane na moim komputerze. więc nie wiem, dlaczego wciąż błędy. – user2971638

+0

upewnij się, że masz php w zmiennej PATH, a następnie otwórz wiersz polecenia, wpisz: php, hit enter. Sprawdź, czy są jakieś błędy. –

Odpowiedz

1

w przypadku php-7:

sudo apt-get install mcrypt php7.1-mcrypt

49

Na Ubuntu z PHP 5 i Apache, trzeba uruchomić:

apt-get install php5-mcrypt 
php5enmod mcrypt 
service apache2 restart 

Jeśli używasz PHP 7:

apt install php7.0-mcrypt 
+2

Musiałem dodać 'sudo' do wszystkich tych poleceń. – usandfriends

1

musiałem zainstalować biblioteki mcrypt na CentOS 7 x86_64 dla powyższego problemu.

Oto, co zrobiłem, aby zainstalować zależności php-mcrypt & libmcrypt.

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 
rpm -ivh epel-release-7-5.noarch.rpm 
yum install --enablerepo="epel" php-mcrypt 

z użytkownikiem 'root' lub sudo

z tym, nie ma potrzeby, aby dodać "extension = php_mcrypt.dll" w pliku php.ini

+0

Ten link nie został znaleziony? –

+0

późniejsza wersja jest już dostępna, [epel-release-7-6.noarch.rpm] (http://dl.fedoraproject.org/pub/epel/7/x86_64/e/) – NBhat