Không thể nhận mcrypt cho PHP5


29

Tôi đã làm điều này nhiều lần:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude cho biết mcrypt đã được cài đặt. Tôi đã cài đặt lại 3 lần rồi. Tôi đã khởi động lại apache khoảng 20 lần kể từ khi tôi cài đặt nó. Khi tôi nhìn vào phpInfo, tôi không thấy mcrypt được liệt kê. Khi tôi cố gắng thực thi mã của mình, nó báo hàm mcrypt (chọn một - bất kỳ một) nào không tồn tại. mcrypt rõ ràng là không được kích hoạt.

Có ai có bất cứ ý tưởng những gì có thể sai? Tôi không biết những mảnh nào nên ở đâu và làm thế nào tất cả những thứ này được cho là khớp với nhau.

Tôi đã cài đặt PHP 5.5.3


Bạn cũng đã cài đặt PHP từ trình quản lý gói ( apt-get/ aptitude) chưa? Gói php5-mcryptchỉ có thể định cấu hình tiện ích mở rộng cho php.ininó "biết". Thứ hai, tôi không ngay bây giờ nếu apache2ctltải lại các mô-đun. Cách "bình thường" để khởi động lại Apache sẽ giống như vậy sudo service apache2 restart. Thứ ba, PHP được kết nối với Apache của bạn như thế nào? Nếu bạn sử dụng một cái gì đó như (f) cgi hoặc php-fpm (trái ngược với mod-php), có lẽ bạn sẽ tự khởi động lại PHP, ngoài ra còn phải khởi động lại Apache.
Henning Kockerbeck

Chúng tôi đã cài đặt mọi thứ bằng cách sử dụng năng khiếu. apache2ctl dừng lại và khởi động lại apache. Chúng tôi đã khởi động lại máy tính nhiều lần kể từ khi cài đặt. Hãy tin tôi khi tôi nói apache đã được "khởi động lại" kể từ khi chúng tôi cài đặt php5-mcrypt - cũng như PHP. PHP5 hoạt động tốt như một mô-đun apache - đó là một trang web được viết bằng PHP - vì vậy tôi giả sử PHP được cài đặt như một mô-đun apache. Nếu tôi đi đến / etc / apache2 / mods kích hoạt php5 nằm trong danh sách đó. Tôi không thấy mcrypt trong / etc / php5 / mods có sẵn nhưng nếu tôi thực hiện tìm kiếm sudo aptitude thì tôi thấy 3 thứ được cài đặt: libmcypt4, mcrypt và php5-mcrypt - ????
webDeveloperDave

Cái nào php.iniđược liệt kê trong đầu ra của phpinfo(khoảng 5 đến 7 mục)? Nó nên là một tập tin trong /etc/php5/. Nếu bạn tìm kiếm trong tập tin đó mcrypt, cái gì sẽ xuất hiện?
Henning Kockerbeck

php.ini nằm trong /etc/php5/apache2/php.ini có một phần mcrypt trong đó có 2 cài đặt - cả hai đều nhận xét - mcrypt.alerskyms_dir và mcrypt.modes_dir các nhận xét ở trên cho biết mặc định là / usr / local / lib / libmcrypt - những thư mục đó không tồn tại. Đây là điều đầu tiên khiến tôi hiểu rằng mcrypt có thể không được cài đặt mặc dù aptitude nói rằng nó là như vậy. Nếu tôi thực hiện thông tin sudo aptitude thì mcrypt nói rằng trạng thái gói được cài đặt - phiên bản 2.6.8-1.3 - nó nói Xung đột: mcrypt - vậy nó đang nói gì? rằng gói này mâu thuẫn với chính nó? Có cách nào tốt hơn để mã hóa thông tin người dùng?
webDeveloperDave

Bạn không cần phải quan tâm đến mcryptgói. Đó là chương trình dòng lệnh sử dụng libmcrypt, cũng như phần mở rộng PHP. Vì vậy, bạn cần chắc chắn rằng gói libmcrypt4được cài đặt. Có một php.iniđoạn tại /etc/php5/conf.d/mcrypt.ini? Điều đó sẽ tải lib. Đoạn mã đó được tải bởi PHP (xem phpinfo)? Một lần nữa, bạn đã thử khởi động lại Apache bằng sudo service apache2 restartthay vì apache2ctlchưa?
Henning Kockerbeck

Câu trả lời:


62

Thử đi

sudo php5enmod mcrypt

sudo service apache2 restart

Hoạt động độc đáo và symlink (sao chép toàn bộ nội dung) là +1 đối với tôi. Vì vậy, nâng cao!
Stefano Mtangoo

4
Điều này làm việc cho tôi. Nhưng tôi không cần lệnh đầu tiên (ln). Tôi không có mcrypt.ini trong thư mục /etc/php5/apache/conf.d. Chạy sudo php4enmod mcrypt hoạt động. Nộp hồ sơ ngay bây giờ. Máy chủ hoạt động!. Cảm ơn rất nhiều.
peterept

1
Cảm ơn nó hoạt động tốt. Nhưng tôi muốn biết về lệnh mà bạn đã sử dụng "sudo php5enmod mcrypt" .. Đây là gì ..? Mục đích của việc sử dụng lệnh này là gì ..?
Elavaraan

1
"sudo php5enmod mcrypt" sẽ tạo một liên kết tượng trưng trong thư mục "/etc/php5/conf.d" với số ưu tiên (mặc định 20) để bạn có thể gỡ cài đặt mà không cần sửa đổi các tệp ini bằng "sudo php5dismod mcrypt"
Vizjerai

11

Tôi gặp vấn đề tương tự trên Ubuntu 13.10. Khi chạy trình soạn thảo cài đặt, nó tạo ra lỗi tương tự, kết thúc bằng.

****Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-update-cmd event returned with an error

  [RuntimeException]  
  Error Output:****   

Tôi đã cài đặt mcryptphp5-mcryptvới khả năng, và vẫn php -mkhông hiển thị mcryptdưới dạng tiện ích mở rộng đã tải:

aptitude install mcrypt
aptitude install php5-mcrypt

Tôi chạy một updatedb, và sau đó locate mcrypt. Tôi tìm thấy của tôi mcrypt.initrong /etc/php5/conf.d. Tuy nhiên, tất cả các tiện ích mở rộng khác (như json) đều có tệp .ini của chúng trong /etc/php5/apache2/conf.d/etc/php5/cli/conf.d. Cả hai đều liên kết đến ../../mods.available.

Vì vậy, sau đó tôi chuyển mcrypt.iniđến /etc/php5/available-modulesvà đặt các liên kết:

cd /etc/php5/cli/conf.d
ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

Và tương tự cho /etc/php5/apache2/conf.d.

Và voila, nó xuất hiện trong php -m!


Cảm ơn rất nhiều cho câu trả lời này. Hoàn toàn sắp xếp tôi ra. Mặc dù tôi đã không di chuyển /etc/php5/conf.d/mcrypt.ini - Tôi chỉ đặt các liên kết tượng trưng của mình để trỏ đến vị trí đó cũng hoạt động và có lẽ sẽ đảm bảo các bản cập nhật trong tương lai cho mcrypt được tự động tải?
alexleonard

2

Có vẻ như đoạn mã ini tải libmcrypt khi PHP được gọi bởi Apache bị thiếu. Cần có một tệp được gọi /etc/php5/apache2/conf.d/mcrypt.inivới nội dung sau

; configuration for php MCrypt module
extension=mcrypt.so

Bạn sẽ có thể sao chép nó từ vonfigurations PHP tích hợp khác như /etc/php5/cli/conf.d/mcrypt.inihoặc /etc/php5/conf.d/mcrypt.ini, tùy thuộc vào những gì đang được cài đặt trên hệ thống của bạn.


2

Mô-đun mcrypt không được bật theo mặc định. Kích hoạt mô-đun mcrypt và sau đó khởi động lại apache ( tín dụng )

sudo php5enmod mcrypt
sudo service apache2 restart

1

Vâng, đây là nó. Có vẻ như đôi khi chúng ta đang tìm kiếm cách rối nhất để làm một cái gì đó đơn giản như 'enmod'; ) Giống như Boinst nói : sudo php5enmod mcrypt. Sau đó tải lại apache.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.