2014-12-24 33 views
17

Tôi đã tìm thấy sự cố khi tôi sử dụng hàm mcrypt_get_iv_size qua AppServ.php - Lỗi nghiêm trọng: Gọi hàm không xác định mcrypt_get_iv_size() trong AppServ

Tôi cố gắng tìm chủ đề liên quan đến giải quyết vấn đề.

Tuy nhiên, tôi thử tải xuống libmcrypt.dll thành symtem32 và chỉnh sửa php.ini bằng cách xóa nhận xét khỏi ;extension=php_mcrypt.dll thành extension=php_mcrypt.dll. Sau đó khởi động lại apache.

Thật không may, sau khi tải lại trang để xem kết quả sau khi sửa đổi.

Nó vẫn báo lỗi như

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

Một chức năng chứa sau:

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

thử chạy php từ dấu nhắc lệnh, điều đó sẽ cho bạn bất kỳ lỗi nào có thể xảy ra trong khi tải dll, như thiếu dll, đường dẫn bị thiếu, thời gian chạy C++ hỗn hợp, v.v. –

+0

cách thực hiện? bạn có thể gợi ý không? tôi kiểm tra tất cả các dll và nó được lưu trữ trong máy tính của tôi bây giờ. vì vậy, tôi không biết tại sao nó vẫn còn lỗi. – user2971638

+0

đảm bảo bạn có php trong PATH, sau đó mở Command Prompt, gõ: php, nhấn enter. Xem nếu có bất kỳ lỗi nào. –

Trả lời

1

trong trường hợp của php-7:

sudo apt-get install mcrypt php7.1-mcrypt

6

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

Mcrypt đã được xây dựng trong cho PHP 5.3.x dành cho Windows, do đó bạn không cần cài đặt libmcrypt.dll trên máy chủ của bạn.

Có vẻ như số máy lẻ php_mcrypt.dll không được tải.

49

Trên Ubuntu, với PHP 5 và Apache, bạn phải chạy:

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

Nếu bạn đang sử dụng PHP 7:

apt install php7.0-mcrypt 
+2

Tôi phải thêm 'sudo' vào tất cả các lệnh đó. – usandfriends

1

tôi phải cài đặt các thư viện Mcrypt trên CentOS 7 x86_64 cho vấn đề trên.

Đây là những gì tôi đã làm để cài đặt php-mcrypt & phụ thuộc 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 

với người dùng 'root' hoặc sudo

với điều này, không cần phải thêm "extension = php_mcrypt.dll" trong tập tin php.ini

+0

Không tìm thấy liên kết này? –

+0

phiên bản mới hơn hiện khả dụng, [epel-release-7-6.noarch.rpm] (http://dl.fedoraproject.org/pub/epel/7/x86_64/e/) – NBhat

Các vấn đề liên quan