Laravel requiere la extensión PHP Mcrypt

429

Estoy tratando de usar la migratefunción en Laravel 4on OSX. Sin embargo, recibo el siguiente error:

Laravel requires the Mcrypt PHP extension.

Por lo que entiendo, ya está habilitado (ver la imagen a continuación).

¿Qué está mal y cómo puedo solucionarlo?

ingrese la descripción de la imagen aquí

Patrick Reck
fuente
¿Usas Laravel 3 o 4?
Jan P.
Acabo de agregar la información a la publicación. Es Laravel 4
Patrick Reck
44
Tal vez esta publicación lo ayude: stackoverflow.com/questions/14476181/…
Jan P.
¿Está utilizando PHP incorporado o instaló otra versión? Si es así, ¿cómo lo instaló?
Jamie Schembri
2
Encontré esta solución fácil usando homebrew: jorble.com/2013/04/install-php-mcrypt-in-macosx
gelviis

Respuestas:

289

Las extensiones habilitadas para la web y las extensiones habilitadas para la línea de comandos pueden ser diferentes. Ejecute php -men su terminal y verifique si mcryptestá en la lista. Si no es así, verifique desde dónde la línea de comando está cargando su php.iniarchivo ejecutándose php --inidesde su terminal.

En este php.iniarchivo puede habilitar la extensión.

OSX

He oído hablar de personas en OSX que se enfrentan a problemas debido a que el terminal apunta al PHP nativo enviado con OSX. En su lugar, debe actualizar su perfil de bash para incluir la ruta real a su PHP. Algo como esto (en realidad no uso OSX, por lo que podría no ser del 100%):

export PATH=/usr/local/php5/bin:$PATH

Ubuntu

En versiones anteriores de Ubuntu (anteriores a 14.04) cuando lo ejecuta, sudo apt-get install php5-mcrypten realidad no instala la extensión en el mods-available. Tendrás que vincularlo.

sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/mcrypt.ini

En todas las versiones de Ubuntu, deberá habilitar el mod una vez que esté instalado. Puedes hacer eso con php5enmod.

sudo php5enmod mcrypt
sudo service apache2 restart

NOTAS

Jason Lewis
fuente
44
esto funcionó para mí en Ubuntu, ¡gracias! Extraño cómo sudo apt-get install php5-mcryptno instala realmente la extensión por completo.
Aristides
Ubuntu 13.10 - También tuve que instalar mcrypt
Ondrej Galbavý
1
Aparentemente ya había instalado mcrypt ini en mods-available, simplemente no estaba al tanto del comando php5enmod. Usar eso hace que funcione como un encanto. ¡Gracias!
imkingdavid
Entonces, justo en esto, tengo mcrypt en la lista cuando voy a php -m, cuando voy a qué php dice / usr / local / bin / php. He intentado instalar mcrypt con brew y parecía haber funcionado. Pero Laravel todavía dice que se requiere la extensión Mcrypt PHP.
Marais Rossouw
1
Al igual que @imkingdavid, tampoco necesitaba el enlace simbólico. php5enmod fue suficiente. Ubuntu 14.04 LTS
Brett
340

¿Tienes instalado MAMP ?

Use which phpen la terminal para ver qué versión de PHP está usando.

Si no es la versión PHP de MAMP, debe editar o agregar .bash_profileen el directorio de inicio del usuario, es decir:cd ~

En .bash_profile, agregue la siguiente línea:

export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH

Editado: Primero debe usar el comando cd /Applications/MAMP/bin/phppara verificar qué versión de PHP de MAMP está usando y luego reemplazar con la versión de PHP anterior.

Luego, restartel terminal para ver qué PHP está utilizando ahora.

Y debería estar funcionando ahora.

JustinHo
fuente
18
No necesita MAMP para obtener Mcrypt.
jackyalcine
48
por supuesto que no necesitas MAMP para obtener Mcrypt. esta respuesta es solo para personas que tienen múltiples versiones de PHP instaladas en su computadora, por ejemplo, XAMPP o MAMP, u otras.
JustinHo
Del mismo modo, para los usuarios de AMPPS: export PATH=/Applications/AMPPS/php-5.4/bin:$PATH... suponiendo que esté disparando para 5.4.xx, también hay 5.3 y 5.5.
Joel Mellon
66
No todos usan MAMP, ¿tienes una respuesta para el resto de la gente?
TuGordoBello
2
Solo pensé en señalar que cd ~es muy importante, debes abrir el .bash_profileque existe allí, TAMBIÉN importante es que debes cerrar tu terminal y volver a abrir para que se carguen las nuevas variables de bash. Solo asegúrese de ejecutar qué php para verificar que se haya aplicado su cambio, ¡feliz codificación!
wired00
142

Para aquellos que usan XAMPP 1.7.3 y Mac

  1. Ir a la terminal
  2. Entrar which php
    • Si dice /usr/bin/php, entonces proceda a 3.
  3. Ingrese sudo nano ~/.bash_profile(o sudo vim ~/.bash_profilesi sabe cómo usarlo)
  4. Luego pegue esto export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
  5. Ctrl+Oluego ingrese para guardar, luego Ctrl+Xpara salir.
  6. Tipo cd ~
  7. tipo . .bash_profile
  8. reiniciar terminal.
  9. Introduzca which php. Si lo hiciste bien, debería ser el mismo que la ruta en el n. ° 4.

La razón del error de mcrypt es porque su Mac usa su php nativo, debe cambiarlo al que tiene xampp.

PD: recomendaría usar MAMP para Laravel 4 para usuarios de Mac, este problema se resolverá junto con el error de información del archivo php sin problemas, y la versión php de xampp está muy desactualizada.

Bryan P
fuente
12
También una buena respuesta! Debería ser esto para MAMP:"export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
Foxinni
3
para aquellos que no tienen ~ / .bash_profile, intente verificar el ~ / .bashrc
Ironwind
66
ejecuta el .bash_profile inmediatamente, normalmente necesita reiniciar para que esos bash se ejecuten
Bryan P
Algo malo sucedió y ahora mi terminal ni siquiera reconocería sudo
Sunny R Gupta
También funciona en lampp, solo cambia el camino aexport PATH="/opt/lampp/bin:$PATH"
JTC
87

Para usuarios que no sean MAMP o XAMPP en OSX (con homebrew instalado):

brew install homebrew/php/php56-mcrypt

¡Salud!

oozzal
fuente
1
Me preocupaba que esto no funcionara con OSX PHP nativo, pero lo instalé y no tuve que perder el tiempo con mi RUTA ni nada. Solo funciona Buena esa.
Lauren
3
Sería genial tener esta respuesta adjunta a las respuestas principales en este hilo, para que sea un recurso más completo. Gracias por el rápido consejo, como Lauren mencionó, esto realmente soluciona el problema.
Bryan Rayner
44
Esto es en realidad $ brew install homebrew/php/php55-mcrypt, de lo contrario tieneError: No available formula with the name "php55-mcrypt"
Connor Leech
47

Usando Ubuntu, solo

sudo php5enmod mcrypt

hizo el truco para mí No necesita reiniciar Apache ya que necesita usar PHP solo desde la CLI.

mppfiles
fuente
37

En Ubuntu (PHP-FPM, Nginx)

sudo apt-get install php5-mcrypt

Después de instalar php5-mcrypt

tienes que hacer un enlace simbólico a archivos ini en mods-available:

sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/mcrypt.ini

habilitar:

sudo php5enmod mcrypt

reiniciar php5-fpm:

sudo service php5-fpm restart

Mas detalle

Nanhe Kumar
fuente
Corrí sudo aptitude -y install php5-mcrypt, seguido de sudo php5enmod mcrypty sudo service php5-fpm restart. (Me salté el paso de vinculación suave). Funcionó :)
Aditya MP
26

Hacer que Laravel trabaje en Apache

Versión de PHP: PHP 5.5.9

Versión de Ubuntu: 14.04

Tuve un proyecto de trabajo de Laravel en Windows. cuando lo copié al servidor ubuntu, comencé a recibir el error mcrypt. esto después de muchas horas de prueba y error

conseguir que el comando artesanal funcione

(si tiene un error mcrypt mientras usa la herramienta de línea de comando artesanal)

Hice muchas pruebas y errores, así que cada vez que ejecutaba el comando php5enmod antes, tenía mensajes de error. pero en la nueva instalación no hubo mensajes de error. después de este paso conseguí que el comando artesanal funcionara

sudo rm /etc/php5/mods-available/mcrypt.ini
sudo apt-get purge php5-mcrypt
sudo apt-get install mcrypt
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt

arreglando el error del navegador

(si tiene un error mcrypt en el navegador al acceder a la página de índice de laravel local)

sudo nano /etc/php5/apache2/php.ini

agregue la siguiente línea en la sección de extensiones compiladas dinámicamente de php ini

extension=mcrypt.so

reinicie el servidor apache, purgue el caché laravel y todo funcione

Sojan V Jose
fuente
Si está trabajando en php docker image , también debe ejecutarlo docker-php-ext-install mcrypt. Probado en la imagen: php:5.6.31-apache. Sin eso, php -mno se muestra mcrypt.
Ewa
19

Para las instalaciones de php-fpm en Ubuntu 14.04, lo siguiente funcionó para mí:

sudo apt-get install php5-mcrypt

Esto creará un mcrypt.iniarchivo dentro/etc/php5/mods-available/

Entonces

sudo php5enmod mcrypt

creará un enlace simbólico en: /etc/php5/fpm/conf.d/

Simplemente reinicie los servicios php-fpm sudo service php5-fpm restart

Prateek Choudhary
fuente
19

Para ubuntu, intente estos pasos si otros no funcionan:

  1. cd ~
  2. sudo apt-get remove php5-mcrypt
  3. sudo apt-get install php5-mcrypt
  4. sudo php5enmod mcrypt
  5. sudo service apache2 restart

Espero que eso ayude. Gracias !

Sagiruddin Mondal
fuente
19

O usar:

sudo apt-get install php5-mcrypt

no estoy seguro de si esto funcionará en las instalaciones estándar de PHP. Lo instalé php 5.5.7usando el paquete de:

sudo add-apt-repository ppa:ondrej/php5 
sudo apt-get update
JoeTidee
fuente
16

Mi sistema operativo es Yosemite.

Resuelvo este problema, encontrando rutas de configuración:

php --ini

Salida de ejemplo:

Configuration File (php.ini) Path: /usr/local/etc/php/5.5
Loaded Configuration File:         /usr/local/etc/php/5.5/php.ini
Scan for additional .ini files in: /usr/local/etc/php/5.5/conf.d
Additional .ini files parsed:      (none)

Próximos pasos:

  1. Cambiar el nombre o eliminar el archivo inp php55
  2. Crear enlace simbólico
  3. Reiniciar el servidor Apache

Comandos:

mv /usr/local/etc/php/5.5/php.ini /usr/local/etc/php/5.5/php.ini.default
ln -s /etc/php.ini /usr/local/etc/php/5.5/php.ini
sudo apachectl restart

Luego puede verificar sus módulos php a través de:

php -m
d.danailov
fuente
16

Solo por años,

yum install php-mcrypt
service httpd restart
chown -R apache:apache apppath

Tal vez necesites instalar remi repo

Sean
fuente
15

Esto lo resolvió para mí en mi entorno local Linux Mint /ubuntu/350942/cannot-get-mcrypt-for-php5

Necesitaba hacer un enlace simbólico a mi archivo /etc/php5/conf.d/mcrypt.ini en las siguientes carpetas /etc/php5/apache2/conf.d/mcrypt.ini y /etc/php5/cli/conf.d /mcrypt.ini

Theo Kouzelis
fuente
14

Necesita un entorno todo en uno. Puede usar MAMP o XAMPP o cualquier otra herramienta. Después de instalar una de estas herramientas, deberá editar (crear) su .bash_profile (suponiendo que use bash).

O incluso simple y más profesional puede usar Laravel Homestead.

Aquí hay un enlace a la documentación oficial: http://laravel.com/docs/5.0/homestead

También Jeffrey tiene un tutorial gratuito al respecto: https://laracasts.com/series/laravel-5-fundamentals/episodes/2

Te aconsejo que vayas con Homestead porque preinstalarás todas las siguientes herramientas.

  • Ubuntu 14.04
  • PHP 5.6
  • H HVM
  • Nginx
  • MySQL
  • Postgres
  • Nodo (con Bower, Grunt y Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Enviado de Laravel
  • Tejido + Extensión HipChat
mburakergenc
fuente
10

Expandiendo en @JetLaggy:

Después de intentar una y otra vez modificar .bash_profile con el directorio MAMP, cambié los permisos de archivo para el directorio php de MAMP y pude obtener 'qué php' para mostrar el directorio apropiado. El problema era que otras funciones no funcionaban, como 'php -v'.

Así que actualicé MAMP. http://documentation.mamp.info/en/mamp/installation/updating-mamp

Esto hizo el truco para mi configuración particular. Tuve que ajustar mi RUTA para reflejar la versión actualizada de PHP, pero una vez que lo hice, ¡todo funcionó!

abaumer
fuente
9

En OS X

Usando MAMP

Ingrese el comando which phpen la terminal para ver qué versión de PHP está utilizando. Si no es la versión PHP de MAMP, la variable $ PATH utilizada por Bash deberá actualizarse.

Primero, debe usar el comando "cd / Applications / MAMP / bin / php" para verificar qué versión de php de MAMP y tomar nota de la versión (por ejemplo, php5.6.7).

Una vez que conozca la versión, debe editar el ~/.bash_profilearchivo (es decir, el .bash_profileque está en su directorio de inicio) y agregar una línea de exportación:

    export PATH=/Applications/MAMP/bin/php/php5.6.7/bin:$PATH

Asegúrese de reemplazar php5.6.7 con la versión de PHP que ha seleccionado en MAMP.

Una vez que el archivo se ha guardado, asegúrese de cerrar, cerrar su Terminal y volver a abrirlo. Una vez hecho esto, utilizará el PHP que se incluye con MAMP.


Una forma de encontrar fácilmente cuál debería ser la línea que necesita poner dentro de su .bash_profilees ejecutar el siguiente comando dentro de su terminal:

    echo export PATH=`cat /Applications/MAMP/conf/apache/httpd.conf \
         | grep php | grep -i LoadModule | head -n1 \
         | sed -e 's/^[^\/]*\/\(.*\)\/mod.*/\/\1/'`/bin:\$PATH

Copiar y pegar esas tres líneas en su terminal generará correctamente la versión de PHP que se ha seleccionado dentro del panel de control de MAMP.

Usando Homebrew / MacPorts

Asegúrese de que su pathcontiene /usr/local/bin/(Homebrew) o/opt/local/bin (MacPorts) si está utilizando PHP que viene con cualquiera de estos dos administradores de paquetes.

Comprobación de la ruta PHP con MacPorts

Puede encontrar la ubicación exacta de PHP usando MacPorts con el siguiente comando:

port contents php70 | grep bin/php

Tenga en cuenta que debe reemplazar php70con la versión de PHP que ha instalado.

Verifique la ruta PHP con Homebrew-php

Homebrew-php ( https://github.com/Homebrew/homebrew-php ) es un grifo que tiene varias versiones diferentes de PHP.

Puede encontrar la ubicación exacta de PHP usando Homebrew con el siguiente comando:

brew --prefix homebrew/php/php56

Tenga en cuenta que debe reemplazar php56con la versión de PHP que ha instalado.

Tim Groeneveld
fuente
6

en Ubuntu 14.04

sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt

Ubuntu 16.04

sudo apt-get install php-mcrypt
sudo phpenmod mcrypt

Ubuntu 18.04

sudo apt install php7.0-mcrypt
sudo phpenmod mcrypt

o

sudo apt install php7.2-mcrypt
sudo phpenmod mcrypt
Gowthaman D
fuente
5

Si está utilizando Z Shell, simplemente haga lo siguiente:

  1. Terminal abierta
  2. sudo nano ~/.zshrc
  3. Pegar esto; export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH
  4. Salvar
  5. correr source ~/.zshrc
  6. Ejecutar which php : debe obtener la ruta MAMP 5.6.10

5.6.10 es la versión de PHP que configuró en su MAMP.

Sin cable
fuente
3

OSX con cerveza

$ brew install mcrypt php70-mcrypt

Estoy ejecutando PHP 7.0.x, así que cambie "php70" a su versión, si está utilizando una versión diferente.
Como se indica en otras respuestas, puede ver su versión de PHP con $ php -v.

kris
fuente
3

Para aquellos que todavía vienen aquí hoy:

Laravel ya no necesita mcryptextensión . mcryptestá obsoleto, la última actualización de libmcrypt fue en 2007. Laravel 4.2 también está obsoleto y no tiene más soporte. La mejor solución (= segura) es actualizar a Laravel> 5.1 (no hay LTS antes de Laravel 5.2).

Mcrypt fue eliminado de Laravel en junio de 2015: https://github.com/laravel/framework/pull/9041

rap-2-h
fuente
0

sudo php instalar mcrypt

sudo php5enmod mcrypt

Anubhav Tiwari
fuente
1
Si bien su comentario podría ser técnicamente cierto, nos esforzamos por incluir alguna explicación a sus respuestas aquí en StackOverflow. Además, parece que OP ya está instalado mcrypt, ¿podría explicar por qué cree que esto solucionará el problema de OP?
milo526
0

en ubuntu 14.04 basado en su versión de php: 5.6,7.0,7.1,7.2,7.3

sudo apt-get install php {versión} -mcrypt

sudo apt-get install php7.1-mcrypt

sudo phpenmod mcrypt 
Jignesh Joisar
fuente