O Laravel requer a extensão PHP Mcrypt

429

Estou tentando usar a migratefunção Laravel 4on OSX. No entanto, estou recebendo o seguinte erro:

Laravel requires the Mcrypt PHP extension.

Pelo que entendi, ele já está ativado (veja a imagem abaixo).

O que está errado e como posso corrigi-lo?

insira a descrição da imagem aqui

Patrick Reck
fonte
Você usa o Laravel 3 ou 4?
Jan P.
Apenas adicionei as informações à postagem. É Laravel 4
Patrick Reck
4
Talvez este post o ajude: stackoverflow.com/questions/14476181/…
Jan P. Jan
Você está usando PHP embutido ou instalou outra versão? Se sim, como você o instalou?
Jamie Schembri
2
Eu encontrei esta solução fácil usar homebrew: jorble.com/2013/04/install-php-mcrypt-in-macosx
gelviis

Respostas:

288

As extensões ativadas pela Web e as extensões ativadas pela linha de comando podem diferir. Corra php -mno seu terminal e verifique se mcryptestá listado. Se não estiver, verifique onde a linha de comando está carregando seu php.iniarquivo, executando php --inino seu terminal.

Neste php.iniarquivo você pode habilitar a extensão.

OSX

Eu ouvi falar de pessoas no OSX que se deparam com problemas devido ao terminal apontar para o PHP nativo enviado com o OSX. Em vez disso, você deve atualizar seu perfil do bash para incluir o caminho real para o seu PHP. Algo assim (na verdade, eu não uso o OSX, portanto, pode não ser 100%):

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

Ubuntu

Nas versões anteriores do Ubuntu (anteriores à 14.04), quando você o executa sudo apt-get install php5-mcrypt, na verdade não instala a extensão no mods-available. Você precisará ligar novamente.

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

Em todas as versões do Ubuntu, você precisará habilitar o mod uma vez instalado. Você pode fazer isso com php5enmod.

sudo php5enmod mcrypt
sudo service apache2 restart

NOTAS

Jason Lewis
fonte
4
isso funcionou para mim no Ubuntu, obrigado! Estranho como sudo apt-get install php5-mcryptnão instalar a extensão completamente.
Aristides
Ubuntu 13.10 - Eu também tive que instalar mcrypt si
Ondrej Galbavý
1
Aparentemente, ele já havia instalado o mcrypt ini no mods-available, eu simplesmente não estava ciente do comando php5enmod. Usar isso faz com que funcione como um encanto. Obrigado!
imkingdavid
Então, apenas nisto, eu tenho o mcrypt listado quando eu for php -m, quando eu for qual php ele diz / usr / local / bin / php. Eu tentei instalar o mcrypt com o brew e parecia ter funcionado .. Mas o Laravel ainda diz que a extensão do PHP do Mcrypt é necessária.
Marais Rossouw
1
Como @imkingdavid, eu também não exigi o link simbólico. O php5enmod foi suficiente. Ubuntu 14.04 LTS
Brett
340

Você possui o MAMP instalado?

Use which phpno terminal para ver qual versão do PHP você está usando.

Se não for a versão PHP do MAMP, você deve editar ou adicionar .bash_profileo diretório inicial do usuário, ou seja:cd ~

Em .bash_profile, adicione a seguinte linha:

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

Editado: Primeiro você deve usar o comando cd /Applications/MAMP/bin/phppara verificar qual versão PHP do MAMP você está usando e depois substituir pela versão PHP acima.

Então restarto terminal para ver qual PHP você está usando agora.

E deve estar funcionando agora.

JustinHo
fonte
18
Você não precisa do MAMP para obter o Mcrypt.
jackyalcine
48
é claro que você não precisa do MAMP para obter o Mcrypt. esta resposta é apenas para pessoas que possuem várias versões do PHP instaladas em seus computadores, como XAMPP, MAMP ou outras.
perfil completo de Justin Justin
Da mesma forma, para usuários de AMPPS: export PATH=/Applications/AMPPS/php-5.4/bin:$PATH... supondo que você esteja filmando para 5.4.xx, também há 5.3 e 5.5.
Joel Mellon
6
Todo mundo não usa MAMP, você tem uma resposta para o resto das pessoas?
precisa saber é o seguinte
2
Apenas pensei em apontar, cd ~é muito importante, você deve abrir o .bash_profileque existe lá, TAMBÉM importante é que você deve fechar seu terminal e reabrir para que as novas variáveis ​​do bash sejam carregadas. Apenas certifique-se de executar qual php para verificar se sua alteração foi aplicada, uma codificação feliz!
usar o seguinte comando
142

Para aqueles que usam o XAMPP 1.7.3 e Mac

  1. Vá para o Terminal
  2. Entrar which php
    • Se aparecer /usr/bin/php, prossiga para 3.
  3. Digite sudo nano ~/.bash_profile(ou sudo vim ~/.bash_profilese você souber como usá-lo)
  4. Depois cole export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
  5. Ctrl+Odepois entre para salvar e depois Ctrl+Xsair.
  6. Tipo cd ~
  7. tipo . .bash_profile
  8. reinicie o terminal.
  9. Enter which php. Se você fez certo, deve ser o mesmo que o caminho no número 4.

A razão para o erro mcrypt é porque o seu Mac usa seu php nativo, você precisa alterá-lo para o que o xampp possui.

PS: Eu recomendaria usar o MAMP para Laravel 4 para usuários de Mac; esse problema será resolvido juntamente com o erro de informações do arquivo php sem suor, e a versão php do xampp está desatualizada.

Bryan P
fonte
12
Também é uma boa resposta! Deve ser o seguinte para o MAMP:"export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
Foxinni
3
para aqueles que não tem ~ / .bash_profile, tente verificar o ~ / .bashrc
Ironwind
6
executa o .bash_profile imediatamente, normalmente você precisa reiniciar para que o bash seja executado #
Bryan P
Algo ruim aconteceu e agora meu terminal nem sequer reconhecer sudo
Ensolarado R Gupta
Ele funciona em lampp também, apenas alterar o caminho paraexport PATH="/opt/lampp/bin:$PATH"
JTC
87

Para usuários não MAMP ou XAMPP no OSX (com o homebrew instalado):

brew install homebrew/php/php56-mcrypt

Felicidades!

oozzal
fonte
1
Eu estava preocupado que isso não funcionasse com o PHP OSX nativo, mas eu apenas o instalei e não precisei mexer no meu PATH ou algo assim. Apenas funciona. Agradável.
Lauren
3
Seria ótimo ter essa resposta anexada às respostas principais neste tópico, para torná-lo um recurso mais abrangente. Obrigado pelo conselho rápido, como Lauren mencionou, isso realmente resolve o problema.
perfil completo de Bryan Rayner
4
Isso é realmente $ brew install homebrew/php/php55-mcrypt, caso contrário, temError: No available formula with the name "php55-mcrypt"
Connor Leech
47

Usando o Ubuntu, apenas

sudo php5enmod mcrypt

fez o truque para mim. Você não precisa reiniciar o Apache, pois precisa usar o PHP apenas na CLI.

mppfiles
fonte
37

No Ubuntu (PHP-FPM, Nginx)

sudo apt-get install php5-mcrypt

Após instalar o php5-mcrypt

você precisa fazer um link simbólico para arquivos ini no mods-available:

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

habilitar:

sudo php5enmod mcrypt

reinicie o php5-fpm:

sudo service php5-fpm restart

Mais detalhes

Nanhe Kumar
fonte
Eu corri sudo aptitude -y install php5-mcrypt, seguido por sudo php5enmod mcrypte sudo service php5-fpm restart. (Eu pulei a etapa de vinculação suave). Funcionou :)
Aditya MP 21/01
26

Colocando o Laravel trabalhando no Apache

Versão do PHP: PHP 5.5.9

Versão do Ubuntu: 14.04

Eu tinha um projeto laravel trabalhando no Windows. Quando o copiei para o servidor ubuntu, comecei a receber o erro mcrypt. isso depois de muitas horas de tentativa e erro

obtendo o comando artesanal trabalhando

(se você estiver tendo erro mcrypt ao usar a ferramenta de linha de comando artesanal)

Eu fiz várias tentativas e erros, portanto, toda vez que executava o comando php5enmod antes, recebi mensagens de erro. mas na instalação nova, não houve mensagens de erro. após esta etapa, eu tenho o comando artesanal trabalhando

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

corrigindo o erro do navegador

(se você estiver tendo erro mcrypt no navegador ao acessar a página de índice local do laravel)

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

adicione a seguinte linha na seção extensões dinamicamente compiladas do php ini

extension=mcrypt.so

reinicie o servidor apache, limpe o cache do laravel e tudo o que estiver funcionando

Sojan V Jose
fonte
Se você estiver trabalhando na imagem do docker php , também precisará executar docker-php-ext-install mcrypt. Testado em imagem: php:5.6.31-apache. Sem isso, php -mnão mostra mcrypt.
Ewa
19

Para instalações php-fpm no Ubuntu 14.04, o seguinte funcionou para mim:

sudo apt-get install php5-mcrypt

Isso criará um mcrypt.iniarquivo dentro/etc/php5/mods-available/

Então

sudo php5enmod mcrypt

criará um link simbólico em: /etc/php5/fpm/conf.d/

Basta reiniciar os serviços php-fpm sudo service php5-fpm restart

Prateek Choudhary
fonte
19

Para o ubuntu, tente estas etapas se outras pessoas não estiverem funcionando:

  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 ajude. Obrigado !

Sagiruddin Mondal
fonte
19

Ou use:

sudo apt-get install php5-mcrypt

não tenho certeza se isso funcionará nas instalações padrão do PHP - eu instalei php 5.5.7usando o pacote de:

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

Meu sistema operacional é Yosemite.

Eu resolvo esse problema, encontrando os caminhos de configuração:

php --ini

Exemplo de saída:

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 passos:

  1. Renomear ou excluir o arquivo php55 ini
  2. Criar link simbólico
  3. Reinicie o 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

Então você pode verificar seus módulos php via:

php -m
d.danailov
fonte
16

Apenas para yumers,

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

Talvez você precise instalar o remi repo

Sean
fonte
15

Isso resolveu para mim no meu ambiente local Linux Mint /ubuntu/350942/cannot-get-mcrypt-for-php5

Eu precisava fazer um link simbólico para o meu arquivo /etc/php5/conf.d/mcrypt.ini nas seguintes pastas /etc/php5/apache2/conf.d/mcrypt.ini e /etc/php5/cli/conf.d /mcrypt.ini

Theo Kouzelis
fonte
14

Você precisa de um ambiente tudo em um. Você pode usar MAMP ou XAMPP ou qualquer outra ferramenta. Após instalar uma dessas ferramentas, você precisará editar (criar) seu .bash_profile (Supondo que você use o bash).

Ou, mesmo simples e mais profissional, você pode usar o Laravel Homestead.

Aqui está um link para a documentação oficial: http://laravel.com/docs/5.0/homestead

Jeffrey também tem um tutorial gratuito sobre o assunto: https://laracasts.com/series/laravel-5-fundamentals/episodes/2

Aconselho que você escolha a propriedade, porque você pré-instalará todas as ferramentas a seguir.

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Nó (com caramanchão, grunhido e gole)
  • Redis
  • Memcached
  • Beanstalkd
  • Enviado do Laravel
  • Extensão Fabric + HipChat
mburakergenc
fonte
10

Expandindo em @JetLaggy:

Depois de tentar repetidamente modificar .bash_profile com o diretório MAMP, alterei as permissões de arquivo para o diretório php do MAMP e consegui obter 'what php' para mostrar o diretório apropriado. O problema era que outras funções não funcionavam, como 'php -v'.

Então eu atualizei o MAMP. http://documentation.mamp.info/en/mamp/installation/updating-mamp

Isso fez o truque para minha configuração específica. Eu tive que ajustar meu PATH para refletir a versão atualizada do PHP, mas depois disso, tudo funcionou!

abaumer
fonte
9

No OS X

Usando MAMP

Digite o comando which php no terminal para ver qual versão do PHP você está usando. Se não for a versão PHP do MAMP, a variável $ PATH usada pelo Bash precisará ser atualizada.

Primeiro, você deve usar o comando "cd / Applications / MAMP / bin / php" para verificar qual versão php do MAMP e tomar nota da versão (por exemplo, php5.6.7).

Depois de conhecer a versão, edite o ~/.bash_profilearquivo (ou seja, o .bash_profileque está no diretório inicial) e adicione uma linha de exportação:

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

Certifique-se de substituir o php5.6.7 pela versão do PHP que você selecionou no MAMP.

Depois que o arquivo for salvo, feche o Terminal e abra-o novamente. Feito isso, você usará o PHP que acompanha o MAMP.


Uma maneira de encontrar facilmente qual deve ser a linha que você precisa colocar dentro do seu .bash_profileé executar o seguinte comando dentro do seu 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 e colar essas três linhas no seu terminal produzirá corretamente a versão PHP que foi selecionada dentro do painel de controle do MAMP.

Usando Homebrew / MacPorts

Verifique se o seu pathcontém /usr/local/bin/(Homebrew) ou/opt/local/bin (MacPorts) se você estiver usando PHP que vem com um desses dois gerenciadores de pacotes.

Verificando o caminho do PHP com MacPorts

Você pode encontrar a localização exata do PHP usando MacPorts com o seguinte comando:

port contents php70 | grep bin/php

Observe que você deve substituir php70pela versão do PHP que você instalou.

Verifique o caminho do PHP com Homebrew-php

Homebrew-php ( https://github.com/Homebrew/homebrew-php ) é um toque que possui várias versões diferentes do PHP.

Você pode encontrar a localização exata do PHP usando o Homebrew com o seguinte comando:

brew --prefix homebrew/php/php56

Observe que você deve substituir php56pela versão do PHP que você instalou.

Tim Groeneveld
fonte
6

no 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

ou

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

Se você estiver usando o Z Shell, faça o seguinte:

  1. Terminal aberto
  2. sudo nano ~/.zshrc
  3. Cole isso; export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH
  4. Salve 
  5. Corre source ~/.zshrc
  6. Executar which php - você deve obter o caminho do MAMP 5.6.10

5.6.10 é a versão do PHP que você definiu no seu MAMP.

Não conectado
fonte
3

OSX com fermentação

$ brew install mcrypt php70-mcrypt

Estou executando o PHP 7.0.x, então altere "php70" para sua versão, se você estiver usando uma versão diferente.
Como indicado em outras respostas, você pode ver sua versão php com $ php -v.

kris
fonte
3

Para quem ainda vem aqui hoje:

O Laravel não precisa mcryptmais de extensão .mcryptestá obsoleta, a última atualização do libmcrypt foi em 2007. O Laravel 4.2 também está obsoleto e não tem mais suporte. A melhor solução (= segura) é atualizar para o Laravel> 5.1 (não há LTS antes do Laravel 5.2).

O Mcrypt foi removido do Laravel em junho de 2015: https://github.com/laravel/framework/pull/9041

rap-2-h
fonte
0

sudo php install mcrypt

sudo php5enmod mcrypt

Anubhav Tiwari
fonte
1
Embora seu comentário possa ser tecnicamente verdadeiro, nos esforçamos para incluir algumas explicações para suas respostas aqui no StackOverflow. Além disso, parece que o OP já está instalado mcrypt. Você poderia expandir por que acredita que isso resolverá o problema do OP?
precisa saber é o seguinte
0

no ubuntu 14.04 com base na sua versão php: 5.6,7.0,7.1,7.2,7,3

sudo apt-get install php {versão} -mcrypt

sudo apt-get install php7.1-mcrypt

sudo phpenmod mcrypt 
Jignesh Joisar
fonte