Não é possível obter mcrypt para PHP5

29

Eu fiz isso muitas vezes:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

O aptitude diz que o mcrypt está instalado. Já o reinstalei três vezes. Reiniciei o apache cerca de 20 vezes desde que o instalei. Quando olho para o phpInfo, não vejo o mcrypt listado. Quando tento executar meu código, ele diz que a função mcrypt (escolha uma - qualquer uma) não existe. mcrypt claramente não está ativado.

Alguém tem alguma idéia do que pode estar errado? Não sei quais peças devem estar onde e como tudo isso deve se encaixar.

Eu instalei o PHP 5.5.3

webDeveloperDave
fonte
Você instalou o PHP a partir do gerenciador de pacotes ( apt-get/ aptitude) também? O pacote php5-mcryptsó pode configurar a extensão para php.inio que ele "conhece". Em segundo lugar, não o faço agora se apache2ctlrecarregar os módulos. A maneira "normal" de reiniciar o Apache seria algo parecido sudo service apache2 restart. Terceiro, como o PHP está conectado ao seu Apache? Se você usar algo como (f) cgi ou php-fpm (em contraste com o mod-php), provavelmente precisará reiniciar o PHP por conta própria, além de reiniciar o Apache.
Henning Kockerbeck
Instalamos tudo usando o aptitude. apache2ctl para e reinicia o apache. Reiniciamos o computador várias vezes desde a instalação. Confie em mim quando digo que o apache foi "reiniciado" desde que instalamos o php5-mcrypt - assim como o PHP. O PHP5 funciona bem como um módulo apache - é um site escrito em PHP - então eu presumo que o PHP esteja instalado como um módulo apache. Se eu for para / etc / apache2 / mods-enabled php5 está nessa lista. Não vejo mcrypt em / etc / php5 / mods-available, mas se eu fizer o sudo aptitude search mcrypt, vejo três coisas instaladas: libmcypt4, mcrypt e php5-mcrypt - ????
webDeveloperDave 30/09
Qual php.iniestá listado na saída de phpinfo(da 5ª à 7ª entrada)? Deve ser um arquivo em /etc/php5/. Se você procurar nesse arquivo mcrypt, o que acontece?
Henning Kockerbeck
php.ini está em /etc/php5/apache2/php.ini, há uma seção mcrypt com 2 configurações - ambas comentadas - mcrypt.algorithms_dir e mcrypt.modes_dir e mcrypt.modes_dir. Os comentários acima dizem que o padrão é / usr / local / lib / libmcrypt - esses diretórios não existem. Isso foi o que primeiro me deu a entender que o mcrypt pode não estar instalado, embora o aptitude diga que sim. Se eu fizer sudo aptitude info mcrypt diz que o estado do pacote está instalado - versão 2.6.8-1.3 - diz Conflitos: mcrypt - então o que está dizendo? que este pacote entra em conflito consigo mesmo? Existe uma maneira melhor de criptografar as informações do usuário?
webDeveloperDave
Você não precisa se preocupar com o mcryptpacote. Esse é o programa de linha de comando que usa libmcrypt, assim como a extensão PHP. Então, você precisa garantir que o pacote libmcrypt4esteja instalado. Existe um php.initrecho em /etc/php5/conf.d/mcrypt.ini? Isso deve carregar a lib. Esse trecho é carregado pelo PHP (consulte phpinfo)? Mais uma vez, você tentou reiniciar o Apache em sudo service apache2 restartvez de apache2ctl?
Henning Kockerbeck

Respostas:

62

Tente isto

sudo php5enmod mcrypt

sudo service apache2 restart
user229183
fonte
Funcionou bem e o link simbólico (copiar tudo) é +1 para mim. Tão votado!
Stefano Mtangoo
4
Isso funcionou para mim. Mas não precisei do primeiro comando (ln). Eu não tinha mcrypt.ini na pasta /etc/php5/apache/conf.d. A execução do sudo php4enmod mcrypt funcionou. Arquivo lá agora. Servidor funciona! Muito obrigado.
peterept
1
Obrigado, está funcionando bem. Mas eu quero saber sobre o comando que você usou "sudo php5enmod mcrypt" .. O que é isso ..? Qual é o objetivo de usar este comando ..?
Elavarasan
1
"sudo php5enmod mcrypt" criará um link simbólico no diretório "/etc/php5/conf.d" com um número de prioridade (padrão 20) para que você possa desinstalá-lo sem modificar os arquivos ini com "sudo php5dismod mcrypt"
Vizjerai
11

Eu tive um problema semelhante no Ubuntu 13.10. Ao executar a instalação do compositor, ele produziu o mesmo erro, terminando em.

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

  [RuntimeException]  
  Error Output:****   

Eu instalei mcrypte php5-mcryptcom o aptitude, e ainda php -mnão apareceu mcryptcomo uma extensão carregada:

aptitude install mcrypt
aptitude install php5-mcrypt

Eu corri um updatedbe depois locate mcrypt. Eu encontrei o meu mcrypt.inino /etc/php5/conf.d. No entanto, todas as outras extensões (como json) tinham seus arquivos .ini em /etc/php5/apache2/conf.de /etc/php5/cli/conf.d. Esses dois eram links para ../../mods.available.

Então, mudei mcrypt.inipara /etc/php5/available-modulese defina os links:

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

E da mesma forma para /etc/php5/apache2/conf.d.

E pronto, ele apareceu php -m!

user239289
fonte
Muito obrigado por esta resposta. Totalmente me resolveu. Embora eu não tenha movido /etc/php5/conf.d/mcrypt.ini - apenas configurei meus links simbólicos para apontar para o local que também funcionou e, presumivelmente, garantirá que futuras atualizações do mcrypt sejam carregadas automaticamente?
alexleonard
2

Parece que o snippet ini que carrega libmcrypt quando o PHP é chamado pelo Apache está ausente. Deve haver um arquivo chamado /etc/php5/apache2/conf.d/mcrypt.inicom o seguinte conteúdo

; configuration for php MCrypt module
extension=mcrypt.so

Você deve poder copiá-lo das outras configurações da integração do PHP, como /etc/php5/cli/conf.d/mcrypt.iniou /etc/php5/conf.d/mcrypt.ini, dependendo do que estiver instalado no seu sistema.

Henning Kockerbeck
fonte
2

O módulo mcrypt não está ativado por padrão. Ative o módulo mcrypt e, em seguida, reinicie o apache ( crédito )

sudo php5enmod mcrypt
sudo service apache2 restart
Boinst
fonte
1

Bem, é isso. Parece que, às vezes, estamos em busca da maneira mais confusa de fazer algo tão simples como 'enmod'; ) Como Boinst diz: sudo php5enmod mcrypt. Em seguida, recarregue o apache.

máximo
fonte