Tidak bisa mendapatkan mcrypt untuk PHP5

29

Saya sudah melakukan ini berkali-kali:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude mengatakan mcrypt diinstal. Saya sudah menginstalnya kembali 3 kali. Saya telah memulai kembali apache sekitar 20 kali sejak saya menginstalnya. Ketika saya melihat phpInfo, saya tidak melihat mcrypt terdaftar. Ketika saya mencoba untuk mengeksekusi kode saya ia mengatakan fungsi mcrypt (pilih satu - salah satu) tidak ada. mcrypt jelas tidak diaktifkan.

Adakah yang tahu apa yang salah? Saya tidak tahu bagian mana yang harus berada di mana dan bagaimana semua ini seharusnya cocok bersama.

Saya menginstal PHP 5.5.3

webDeveloperDave
sumber
Apakah Anda menginstal PHP dari manajer paket ( apt-get/ aptitude) juga? Paket php5-mcrypthanya dapat mengkonfigurasi ekstensi untuk php.ini"tahu" tentang. Kedua, saya tidak tahu sekarang jika apache2ctlmemuat ulang modul. Cara "normal" untuk memulai kembali Apache akan menjadi sesuatu seperti sudo service apache2 restart. Ketiga, bagaimana PHP terhubung ke Apache Anda? Jika Anda menggunakan sesuatu seperti (f) cgi atau php-fpm (berbeda dengan mod-php), Anda mungkin harus me-restart PHP sendiri, selain itu untuk me-restart Apache.
Henning Kockerbeck
Kami memasang semuanya menggunakan aptitude. apache2ctl berhenti dan restart apache. Kami telah me-restart komputer beberapa kali sejak instalasi ini. Percayalah pada saya ketika saya mengatakan apache telah "direstart" sejak kami menginstal php5-mcrypt - dan juga PHP. PHP5 berfungsi dengan baik sebagai modul apache - ini adalah situs web yang ditulis dalam PHP - jadi saya berasumsi PHP diinstal sebagai modul apache. Jika saya pergi ke / etc / apache2 / mods-enabled php5 ada dalam daftar itu. Saya tidak melihat mcrypt di / etc / php5 / mods-available tetapi jika saya melakukan sudo aptitude search mcrypt, saya melihat 3 hal terinstal: libmcypt4, mcrypt dan php5-mcrypt - ????
webDeveloperDave
Yang mana php.iniyang tercantum dalam output phpinfo(sekitar entri ke-5 sampai ke-7)? Ini harus berupa file dalam /etc/php5/. Jika Anda mencari dalam file itu mcrypt, apa yang muncul?
Henning Kockerbeck
php.ini ada di /etc/php5/apache2/php.ini ada bagian mcrypt di sana dengan 2 pengaturan - keduanya dikomentari - mcrypt.algorithms_dir dan mcrypt.modes_dir di komentar di atas mereka mengatakan defaultnya adalah / usr / local / lib / libmcrypt - direktori-direktori itu tidak ada. Inilah yang pertama memberi petunjuk kepada saya bahwa mcrypt mungkin tidak diinstal meskipun aptitude mengatakannya. Jika saya melakukan sudo aptitude info mcrypt dikatakan negara paket diinstal - versi 2.6.8-1.3 - ia mengatakan Konflik: mcrypt - jadi apa katanya? bahwa paket ini bertentangan dengan dirinya sendiri? Apakah ada cara yang lebih baik untuk mengenkripsi info pengguna?
webDeveloperDave
Anda tidak perlu peduli dengan mcryptpaket tersebut. Itu adalah program baris perintah yang menggunakan libmcrypt, seperti halnya ekstensi PHP. Jadi, Anda perlu memastikan paket libmcrypt4sudah diinstal. Apakah ada php.inicuplikan /etc/php5/conf.d/mcrypt.ini? Itu harus memuat lib. Apakah potongan itu dimuat oleh PHP (lihat phpinfo)? Sekali lagi, apakah Anda mencoba untuk me-restart Apache dengan sudo service apache2 restartbukan apache2ctl?
Henning Kockerbeck

Jawaban:

62

Coba ini

sudo php5enmod mcrypt

sudo service apache2 restart
pengguna229183
sumber
Bekerja dengan baik dan symlink (lebih dari menyalin semuanya) adalah +1 untuk saya. Jadi terangkat!
Stefano Mtangoo
4
Ini berhasil untuk saya. Tetapi saya tidak membutuhkan perintah pertama (ln). Saya tidak punya mcrypt.ini di dalam folder /etc/php5/apache/conf.d. Menjalankan sudo php4enmod mcrypt berfungsi. File di sana sekarang. Server berfungsi !. Terima kasih banyak.
peterept
1
Terima kasih, ini bekerja dengan baik. Tapi saya ingin tahu tentang perintah yang Anda gunakan "sudo php5enmod mcrypt" .. Apa ini ..? Apa tujuan menggunakan perintah ini ..?
Elavarasan
1
"sudo php5enmod mcrypt" akan membuat symlink di direktori "/etc/php5/conf.d" dengan nomor prioritas (default 20) sehingga Anda dapat menghapusnya tanpa memodifikasi file ini dengan "sudo php5dismod mcrypt"
Vizjerai
11

Saya punya masalah serupa di Ubuntu 13.10. Setelah menjalankan komposer, instal menghasilkan kesalahan yang sama, berakhir dengan.

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

  [RuntimeException]  
  Error Output:****   

Saya menginstal mcryptdan php5-mcryptdengan aptitude, dan masih php -mtidak muncul mcryptsebagai ekstensi yang dimuat:

aptitude install mcrypt
aptitude install php5-mcrypt

Saya berlari updatedb, dan kemudian locate mcrypt. Saya menemukan mcrypt.inidi saya /etc/php5/conf.d. Namun semua ekstensi lain (seperti json) memiliki file .ini di /etc/php5/apache2/conf.ddan /etc/php5/cli/conf.d. Keduanya adalah tautan ke ../../mods.available.

Jadi, saya kemudian pindah mcrypt.inike /etc/php5/available-modules, dan mengatur tautan:

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

Dan juga untuk /etc/php5/apache2/conf.d.

Dan voila, itu muncul di php -m!

pengguna239289
sumber
Terima kasih banyak atas jawaban ini. Benar-benar memilah saya. Meskipun saya tidak memindahkan /etc/php5/conf.d/mcrypt.ini - saya baru saja mengatur tautan simbolis saya untuk menunjuk ke lokasi itu yang juga berfungsi dan mungkin akan memastikan pembaruan di masa depan untuk mcrypt dimuat secara otomatis?
alexleonard
2

Sepertinya cuplikan ini yang memuat libmcrypt ketika PHP dipanggil oleh Apache tidak ada. Seharusnya ada file yang dipanggil /etc/php5/apache2/conf.d/mcrypt.inidengan konten berikut

; configuration for php MCrypt module
extension=mcrypt.so

Anda harus dapat menyalinnya dari konfigurasi PHP lain seperti /etc/php5/cli/conf.d/mcrypt.iniatau /etc/php5/conf.d/mcrypt.ini, tergantung pada apa yang diinstal pada sistem Anda.

Henning Kockerbeck
sumber
2

Modul mcrypt tidak diaktifkan secara default. Aktifkan modul mcrypt dan kemudian mulai ulang apache ( kredit )

sudo php5enmod mcrypt
sudo service apache2 restart
Boinst
sumber
1

Nah, ini dia. Sepertinya kadang-kadang kita mencari cara yang paling kusut untuk melakukan sesuatu yang sederhana seperti 'enmod'; ) Seperti Boinst mengatakan: sudo php5enmod mcrypt. Kemudian muat ulang apache.

Maximo
sumber