2010-04-09 4 views
50

GHI CHÚ: Thư viện Hỗ trợ MCrypt phụ thuộc vào chưa được cập nhật trong nhiều năm và MCrypt không còn được coi là phương pháp mã hóa dữ liệu. Hơn nữa, MCrypt đã không được chấp nhận trong PHP 5, và được gỡ bỏ hoàn toàn bằng PHP 7. Nếu bạn có bất kỳ mã nào chạy MCrypt, bạn nên cấu trúc lại nó để sử dụng một thư viện mã hóa hiện đại hơn.Lỗi nghiêm trọng: Gọi tới chức năng không xác định mcrypt_encrypt()


Có ai biết tại sao thông báo lỗi này: (Call to undefined function mcrypt_encrypt()) hiển thị khi tôi chạy đoạn mã sau đây?

Tôi có thiếu một số bước có lẽ bất kỳ cài đặt nào trong PHP mà tôi phải làm trước khi mã này có thể hoạt động không?

$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

Bạn đang chạy phiên bản PHP nào? –

+0

Có thể bạn có PHP 4.0.1, đây là một chức năng 4.0.2. Chạy đúng ở đây. – Ben

+5

Tôi có phiên bản 5.2.8 và tôi cũng nhận được lỗi chức năng không xác định. –

Trả lời

28

gì đã từng làm việc cho tôi với PHP phiên bản 5.2.8, là để mở ra php.ini và cho phép mở rộng php_mcrypt.dll bằng cách loại bỏ các ;, tức là thay đổi:

;extension=php_mcrypt.dll để extension=php_mcrypt.dll

3

Đã bật mcrypt chưa? Bạn có thể sử dụng phpinfo() để xem có đúng không.

18

Bạn chưa cài đặt thư viện mcrypt.

Xem http://www.php.net/manual/en/mcrypt.setup.php để biết thêm thông tin.

Nếu bạn đang sử dụng dịch vụ lưu trữ dùng chung, bạn có thể yêu cầu nhà cung cấp cài đặt.


Trong OSX bạn có thể dễ dàng cài đặt Mcrypt qua homebrew

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

Sau đó, thêm dòng này vào /etc/php.ini.

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

Cảm ơn, Đối với con đường của tôi hơi khác nhau mặc dù: extension = "/ usr/local/Cellar/php55-mcrypt/5.5.22/mcrypt.so" – anshuman

+0

Đối với tôi, tôi không phải chỉnh sửa php.ini, nó đã được thiết lập rồi. Và 'phpXX', XX là phiên bản bạn đang sử dụng. ('php -v' trong terminal để tìm hiểu.) –

+0

Tôi thậm chí không có đường dẫn'/usr/local/Cellar/'. Bạn có chắc chắn điều này là chính xác? – dspacejs

3

Một hơn điều: nếu bạn đang phục vụ PHP thông qua một máy chủ web như Apache, hãy thử khởi động lại máy chủ web. Điều này sẽ "thiết lập lại" bất kỳ mô-đun PHP nào có thể có, kích hoạt cấu hình mới.

3

Giả sử bạn đang sử dụng debian linux (Tôi đang sử dụng Linux bạc hà 12, vấn đề là trên máy chủ Ubuntu 12.04.1 LTS tôi ssh'ed vào.)

Tôi đề nghị tham gia tư vấn @dkamins và đảm bảo rằng bạn có mcrypt cài đặt và hoạt động trên cài đặt php5 của bạn. Sử dụng "sudo apt-get install php5-mcrypt" để cài đặt. Ghi chú của tôi bên dưới.

Sử dụng phiên bản PHP PHP Version 5.3.10-1ubuntu3.4, nếu bạn mở phpinfo() theo đề xuất của @John Conde, bạn làm bằng cách tạo tệp thử nghiệm trên máy chủ web (ví dụ: tạo trang trạng thái testphp.php chỉ với nội dung "" ở bất kỳ nơi nào có thể truy cập được máy chủ thông qua trình duyệt)

Tôi không thấy trạng thái đã bật hoặc vô hiệu hóa trên trang trạng thái khi được mở trong trình duyệt. Khi tôi mở php.tập tin này, đề cập bởi @Anthony Forloney, suy nghĩ để bỏ ghi chú ;extension=php_mcrypt.dll to extension=php_mcrypt.dll

tôi toggled trở lại đó và ra và khởi động lại Apache (Tôi đang chạy Apache2 và bạn có thể khởi động lại trong thiết lập của tôi với sudo /etc/init.d/apache2 restart hoặc khi bạn đang ở trong thư mục đó chỉ sudo restart Tôi tin) với sự thay đổi và không có thay đổi nhưng tất cả đều không xảy ra. Tôi đã tư vấn @dkamins và đã đi để cài đặt các gói với "sudo apt-get cài đặt php5-mcrypt" và sau đó khởi động lại apache như trên. Sau đó, lỗi của tôi đã biến mất và ứng dụng của tôi hoạt động tốt.

11

Dưới Ubuntu tôi đã có vấn đề và giải quyết nó với

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

Đã làm việc cho tôi. Nhưng tôi phải tải lại apache bằng tay! – Peter

1

cho Linux dựa (Fedora)

yum -y install php-mcrypt 

Bật mô-đun bằng cách thêm: 'extension = mcrypt.so' để PHP. ini. (/etc/php.ini)

systemctl restart httpd.service 

Xong!

24

Đối với cửa sổ

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

Đối với 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 

Đối với Ubuntu

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

Vẫn không làm việc?

sudo php5enmod mcrypt && sudo service apache2 restart

82

Nếu gần đây bạn đã cập nhật để Ubuntu 14.04 ở đây là sửa chữa cho vấn đề này:

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

Đã làm việc !!! Cảm ơn!. Chỉ với hai dòng cuối cùng. –

+1

Câu trả lời của bạn tốt hơn câu trả lời được chấp nhận. – Fuser97381

+3

'mcrypt.ini' đã có trong'/etc/php5/mods-available/'trên bản cài đặt của tôi vì vậy tôi chỉ phải chạy php5enmod. – nullability

7

trên Ubuntu 14.10:

Cài đặt mô-đun Mcrypt

sudo apt install php5-mcrypt 

Enable mô-đun mcrypt trên apache2

sudo a2enmod mcrypt 

mô-đun Nạp lại cấu hình

sudo service apache2 restart 
+3

Tôi nghĩ bạn có nghĩa là: 'sudo php5enmod mcrypt' –

+0

' php5enmod' và 'php5dismod' là các lệnh mới được giới thiệu trên các hệ thống debian cho php (> = 5.4.0 ~ rc6-1). Theo bài đăng này http://php.net/manual/fr/mcrypt.setup.php#116231 bạn chỉ cần thực hiện sudo 'apt-get install php5-mcrypt'' sudo php5enmod mcrypt' 'sudo service apache2 reload' – alphayax

0

Kiểm tra và install php5-Mcrypt:

sudo apt-get install php5-mcrypt 
5

Trên Linux Mint 17,1 Rebecca - Call to undefined function mcrypt_create_iv ...

giải quyết bằng cách thêm dòng sau vào php.ini

extension=mcrypt.so 

Sau đó một

service apache2 restart 

giải quyết nó ...

3

Nếu bạn đang sử dụng php5-fpm làm hãy nhớ khởi động lại nó, sau khi cài đặt Mcrypt

dịch vụ php5-fpm restart

3

Nếu bạn sử dụng ubuntu 14.04 ở đây là sửa chữa cho vấn đề này:

Đầu tiên kiểm tra php5-mcryp đã được cài đặt apt-get install php5-mcrypt

Nếu được cài đặt, chỉ cần chạy hai lệnh này hoặc cài đặt và chạy hai lệnh này

$ sudo php5enmod mcrypt 
$ sudo service apache2 restart 

Tôi hy vọng nó sẽ hoạt động.

1

Đối với tôi nó giúp gỡ bỏ Mcrypt với:

sudo apt-get purge php5-mcrypt 

và chỉ cần cài đặt lại nó:

sudo apt-get install php5-mcrypt 

và không quên để khởi động lại apache như đã mô tả ở trên.

Không biết tại sao và cách thức này khác trong trường hợp của tôi (sử dụng vm với php55 được cấp phép), nhưng có thể điều này sẽ giúp người khác. Tôi cũng gặp sự cố này với một số mô-đun khác như xcache ...

3

Tôi gặp sự cố tương tự cho PHP 7 phiên bản thiếu mcrypt.

Điều này phù hợp với tôi.

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

Những công việc này! Nhưng chỉ cần php7.0-mcrypt. Sau khi cài đặt nó, và khởi động lại apache, nó hiện đang hiển thị mcrypt trên phpinfo(); 'Bộ lọc luồng đã đăng ký \t zlib. *, String.rot13, string.toupper, string.tolower, string.strip_tags, convert. *, Tiêu thụ, dechunk, convert.iconv. *, Mcrypt. *, Mdecrypt. *' –