2014-12-24 7 views
17

Ho riscontrato un problema quando utilizzo la funzione mcrypt_get_iv_size tramite AppServ.php - Errore irreversibile: chiamata alla funzione non definita mcrypt_get_iv_size() in AppServ

Cerco di trovare un argomento correlato a un problema risolto.

Tuttavia, si tenta di scaricare libmcrypt.dll in symtem32 e modificare php.ini rimuovendo un commento da ;extension=php_mcrypt.dll a extension=php_mcrypt.dll. Quindi riavviare apache.

Sfortunatamente, dopo aver ricaricato una pagina per vedere un risultato dopo la modifica.

'ancora errore come

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

Una funzione contiene seguente:

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

prova a eseguire php dal prompt dei comandi, che ti darà ogni errore che potrebbe accadere durante il caricamento di dll, come dll mancanti, percorsi mancanti, runtime C++ misto ecc. –

+0

come fare? puoi suggerire? Ho controllato tutte le DLL e sono state archiviate sul mio computer ora. quindi, non so perché ancora errori. – user2971638

+0

assicurati di avere php nel PATH, quindi apri un prompt dei comandi, digita: php, premi invio. Vedi se ci sono errori. –

risposta

1

in caso di php-7:

6

http://php.net/manual/en/mcrypt.requirements.php

mcrypt è già costruito in PHP 5.3.x per Windows, in modo da non lo fai necessario installare libmcrypt.dll sul tuo server.

Sembra che l'estensione php_mcrypt.dll non sia stata caricata.

49

Su Ubuntu, con PHP 5 e Apache, è necessario eseguire:

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

Se si sta utilizzando PHP 7:

apt install php7.0-mcrypt 
+2

Ho dovuto anteporre 'sudo' a tutti quei comandi. – usandfriends

1

ho dovuto installare le librerie mcrypt su CentOS 7 x86_64 per il problema precedente.

Ecco cosa ho fatto per installare le dipendenze libmcrypt di php-mcrypt &.

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 

con l'utente 'root' o sudo

con questo, non c'è bisogno di aggiungere "extension = php_mcrypt.dll" nel file php.ini

+0

Questo link non è stato trovato? –

+0

una versione successiva è ora disponibile, [epel-release-7-6.noarch.rpm] (http://dl.fedoraproject.org/pub/epel/7/x86_64/e/) – NBhat