Laravel требует расширения Mcrypt PHP


429

Я пытаюсь использовать migrateфункцию Laravel 4вкл OSX. Однако я получаю следующую ошибку:

Laravel requires the Mcrypt PHP extension.

Насколько я понимаю, он уже включен (см. Изображение ниже).

Что не так, и как я могу это исправить?

введите описание изображения здесь


Вы используете Laravel 3 или 4?
Ян П.

Просто добавил информацию в пост. Это Ларавел 4
Патрик Рек

4
Может быть, этот пост поможет вам: stackoverflow.com/questions/14476181/…
январь P.

Вы используете встроенный PHP или вы установили другую версию? Если да, то как вы его установили?
Джейми Шембри

2
Я нашел это простое решение, используя homebrew: jorble.com/2013/04/install-php-mcrypt-in-macosx
gelviis

Ответы:


289

Расширения с поддержкой Интернета и расширения с поддержкой командной строки могут различаться. Запустите php -mв своем терминале и проверьте, есть ли mcryptв списке. Если это не так, проверьте, откуда командная строка загружает ваш php.iniфайл, запустив его php --iniс вашего терминала.

В этом php.iniфайле вы можете включить расширение.

OSX

Я слышал о людях на OSX, сталкивающихся с проблемами из-за терминала, указывающего на нативный PHP, поставляемый с OSX. Вместо этого вы должны обновить свой профиль bash, чтобы включить фактический путь к вашему PHP. Примерно так (на самом деле я не использую OSX, так что это может быть не 100%):

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

Ubuntu

В более ранних версиях Ubuntu (до 14.04) при запуске sudo apt-get install php5-mcryptон фактически не устанавливает расширение в mods-available. Вам нужно будет символическую ссылку.

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

На всех версиях Ubuntu вам нужно будет включить мод после его установки. Вы можете сделать это с php5enmod.

sudo php5enmod mcrypt
sudo service apache2 restart

НОТЫ


4
это сработало для меня на Ubuntu, спасибо! Странно, как на sudo apt-get install php5-mcryptсамом деле не установить расширение полностью.
Аристидес

Ubuntu 13.10 - Я также должен был установить сам mcrypt
Ondrej Galbavý

1
Очевидно, он уже установил mcrypt ini в mods-available, я просто не знал о команде php5enmod. Использование этого заставляет это работать как очарование. Спасибо!
imkingdavid

Так вот, у меня есть mcrypt, перечисленный, когда я иду php -m, когда я иду, который php говорит / usr / local / bin / php. Я пытался установить mcrypt с brew и, похоже, сработало. Но Laravel по-прежнему говорит, что требуется расширение Mcrypt PHP.
Марэ Россоув

1
Как и @imkingdavid, мне также не требовалась символическая ссылка. php5enmod было достаточно. Ubuntu 14.04 LTS
Бретт

340

У вас установлен MAMP ?

Используйте which phpв терминале, чтобы увидеть, какую версию PHP вы используете.

Если это не версия PHP от MAMP, вы должны отредактировать или добавить .bash_profileв домашний каталог пользователя, то есть:cd ~

В .bash_profile, добавьте следующую строку:

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

Отредактировано: сначала вы должны использовать команду, cd /Applications/MAMP/bin/phpчтобы проверить, какую версию PHP из MAMP вы используете, а затем заменить на версию PHP выше.

Затем restartтерминал, чтобы увидеть, какой PHP вы используете сейчас.

И это должно работать сейчас.


18
Вам не нужно MAMP, чтобы получить Mcrypt.
Jackyalcine

48
Конечно, вам не нужен MAMP, чтобы получить Макрипта. Этот ответ предназначен только для людей, у которых на компьютере установлено несколько версий PHP, например, XAMPP или MAMP или другие.
JustinHo

Точно так же для пользователей AMPPS: export PATH=/Applications/AMPPS/php-5.4/bin:$PATH... при условии, что вы снимаете для 5.4.xx, там также есть 5.3 и 5.5.
Джоэл Меллон

6
Все не используют MAMP, у вас есть ответ для остальных людей?
TuGordoBello

2
Я подумал, что cd ~очень важно, вы должны открыть .bash_profileсуществующее там, ТАКЖЕ важно, чтобы вы закрыли свой терминал и снова открыли его, чтобы загрузить новые переменные bash. Просто убедитесь, что запустили какой php, чтобы убедиться, что ваши изменения применены, счастливого кодирования!
wired00

142

Для тех, кто использует XAMPP 1.7.3 и Mac

  1. Перейти к терминалу
  2. Войти which php
    • Если это говорит /usr/bin/php, тогда переходите к 3.
  3. Введите sudo nano ~/.bash_profile(или sudo vim ~/.bash_profileесли вы знаете, как его использовать)
  4. Затем вставьте это export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
  5. Ctrl+Oзатем введите, чтобы сохранить, затем Ctrl+Xвыйти.
  6. Тип cd ~
  7. тип . .bash_profile
  8. перезапустить терминал.
  9. Введите which php. Если вы все сделали правильно, он должен совпадать с путем в # 4.

Причина ошибки mcrypt в том, что ваш Mac использует свой собственный php, вам нужно заменить его на тот, что есть у xampp.

PS Я бы порекомендовал использовать MAMP для Laravel 4 для пользователей Mac, эта проблема будет решена вместе с ошибкой в ​​информации о php-файле без проблем, а php-версия xampp настолько устарела.


12
Также хороший ответ! Должно быть это для MAMP:"export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
Foxinni

3
для тех, у кого нет ~ / .bash_profile, попробуйте проверить ~ / .bashrc
Ironwind

6
запускает .bash_profile немедленно, обычно вам нужно перезапустить эти bash
Bryan P

Произошло что-то плохое, и теперь мой терминал даже не распознает sudo
Sunny R Gupta

Это также работает на lampp, просто измените путь наexport PATH="/opt/lampp/bin:$PATH"
JTC

87

Для пользователей без MAMP или XAMPP в OSX (с установленным homebrew):

brew install homebrew/php/php56-mcrypt

Ура!


1
Я волновался, что это не будет работать с родным OSX PHP, но я только установил это, и мне не пришлось возиться с моим PATH или чем-то еще. Просто работает. Хороший.
Лорен

3
Было бы здорово добавить этот ответ к ведущим ответам в этой теме, чтобы сделать его более полным ресурсом. Спасибо за быстрый совет, как упоминала Лорен, это действительно решает проблему.
Брайан Райнер

4
Это на самом деле $ brew install homebrew/php/php55-mcrypt, иначе получилError: No available formula with the name "php55-mcrypt"
Коннор Лич

47

Используя Ubuntu, просто

sudo php5enmod mcrypt

сделал трюк для меня. Вам не нужно перезапускать Apache, так как вам нужно использовать PHP только из CLI.


37

В Ubuntu (PHP-FPM, Nginx)

sudo apt-get install php5-mcrypt

После установки php5-mcrypt

Вы должны сделать символическую ссылку на INI-файлы в доступных модах:

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

включить:

sudo php5enmod mcrypt

перезапустите php5-fpm:

sudo service php5-fpm restart

Подробнее


Я побежал sudo aptitude -y install php5-mcrypt, а затем sudo php5enmod mcryptи sudo service php5-fpm restart. (Я пропустил шаг мягкого связывания). Это сработало :)
депутат Адитья

26

Заставить Laravel работать на Apache

Версия PHP: PHP 5.5.9

Версия Ubuntu: 14.04

У меня был рабочий проект Laravel на окнах. когда я скопировал его на сервер Ubuntu, я начал получать ошибку mcrypt. это после многих часов проб и ошибок

заставить команду ремесленника работать

(если у вас ошибка mcrypt при использовании инструмента командной строки artisan)

Я сделал много проб и ошибок, поэтому каждый раз, когда я запускал команду php5enmod, у меня появлялись сообщения об ошибках. но при новой установке не было сообщений об ошибках. после этого шага я получил команду ремесленников, работающих

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

исправление ошибки браузера

(если у вас возникла ошибка mcrypt в браузере при доступе к локальной странице индекса laravel)

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

добавьте следующую строку в раздел динамически скомпилированных расширений php ini

extension=mcrypt.so

перезагрузите сервер apache, очистите кеш laravel и все работает


Если вы работаете над образом php docker , вам также нужно запустить docker-php-ext-install mcrypt. Испытано на изображение: php:5.6.31-apache. Без этого php -mне показывает mcrypt.
Ева

19

Для установок php-fpm в Ubuntu 14.04 у меня работало следующее:

sudo apt-get install php5-mcrypt

Это создаст mcrypt.iniфайл внутри/etc/php5/mods-available/

затем

sudo php5enmod mcrypt

создаст символическую ссылку в: /etc/php5/fpm/conf.d/

Просто перезапустите сервисы php-fpm sudo service php5-fpm restart


19

Для Ubuntu попробуйте эти шаги, если другие не работают:

  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

Надеюсь, что это поможет. Спасибо !


19

Или используйте:

sudo apt-get install php5-mcrypt

не уверен, что это будет работать на стандартных установках PHP - я установил php 5.5.7с помощью пакета из:

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

16

Моя ОС есть Yosemite.

Я решил эту проблему, найдя пути конфигурации:

php --ini

Пример вывода:

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)

Следующие шаги:

  1. Переименовать или удалить файл php55 ini
  2. Создать символическую ссылку
  3. Перезапустите сервер Apache

Команды:

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

Затем вы можете проверить свои php модули через:

php -m

16

Просто для юмеров,

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

Может быть, вам нужно установить реми репо


15

Это решило это для меня в моей локальной среде Linux Mint /ubuntu/350942/cannot-get-mcrypt-for-php5

Мне нужно было создать символическую ссылку на мой файл /etc/php5/conf.d/mcrypt.ini в следующих папках /etc/php5/apache2/conf.d/mcrypt.ini и /etc/php5/cli/conf.d /mcrypt.ini


14

Вам нужно все в одной среде. Вы можете использовать MAMP или XAMPP или любые другие инструменты. После установки одного из этих инструментов вам необходимо отредактировать (создать) ваш .bash_profile (при условии, что вы используете bash).

Или даже простой и более профессиональный вы можете использовать Laravel Homestead.

Вот ссылка на официальную документацию: http://laravel.com/docs/5.0/homestead

Также у Джеффри есть бесплатный учебник об этом: https://laracasts.com/series/laravel-5-fundamentals/episodes/2

Я советую вам пойти с усадьбой, потому что вы предварительно установите все следующие инструменты.

  • Убунту 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Узел (с Бауэром, Грантом и Глэпом)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Расширение Fabric + HipChat

10

Расширение на @JetLaggy:

После попыток снова и снова изменить .bash_profile с каталогом MAMP, я изменил права доступа к файлу для каталога MAMP php и смог получить 'what php', чтобы показать правильный каталог. Проблема была в том, что другие функции не работали, такие как 'php -v'.

Поэтому я обновил MAMP. http://documentation.mamp.info/en/mamp/installation/updating-mamp

Это помогло моей конкретной установке. Мне пришлось настроить PATH в соответствии с обновленной версией PHP, но как только я это сделал, все заработало!


9

На OS X

Используя MAMP

Введите команду which php в терминале, чтобы увидеть, какую версию PHP вы используете. Если это не версия PHP от MAMP, переменная $ PATH, используемая Bash, должна быть обновлена.

Во-первых, вы должны использовать команду "cd / Applications / MAMP / bin / php", чтобы проверить, какая версия php из MAMP и записать версию (например, php5.6.7).

Как только вы узнаете версию, вы должны отредактировать ~/.bash_profileфайл (то есть тот, .bash_profileкоторый находится в вашем домашнем каталоге) и добавить строку экспорта:

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

Убедитесь, что вы заменили php5.6.7 на версию PHP, которую вы выбрали в MAMP.

Как только файл был сохранен, убедитесь, что вы закрыли, закрыли свой терминал и снова открыли его. Как только это будет сделано, вы будете использовать PHP, который поставляется с MAMP.


Один из способов легко найти строку, которую вы должны поместить в свой файл, .bash_profile- запустить следующую команду в вашем терминале:

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

Копирование и вставка этих трех строк в ваш терминал приведет к правильному выводу версии PHP, выбранной на панели управления MAMP.

Использование Homebrew / MacPorts

Убедитесь , что ваш pathсодержит /usr/local/bin/(Homebrew) или /opt/local/bin(MacPorts) , если вы используете PHP , который поставляется с любым из этих двух менеджеров пакетов.

Проверка пути PHP с помощью MacPorts

Вы можете найти точное местоположение PHP с помощью MacPorts с помощью следующей команды:

port contents php70 | grep bin/php

Обратите внимание, что вы должны заменить php70версию PHP, которую вы установили.

Проверьте путь PHP с помощью Homebrew-php

Homebrew-php ( https://github.com/Homebrew/homebrew-php ) - это тап, который имеет различные версии PHP.

Вы можете найти точное местоположение PHP с помощью Homebrew с помощью следующей команды:

brew --prefix homebrew/php/php56

Обратите внимание, что вы должны заменить php56версию PHP, которую вы установили.


6

в 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

или

sudo apt install php7.2-mcrypt
sudo phpenmod mcrypt

5

Если вы используете Z Shell, просто сделайте следующее:

  1. Открытый терминал
  2. Судо nano ~/.zshrc
  3. Вставьте это; export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH
  4. Сохранить
  5. Запустить source ~/.zshrc
  6. Выполнить which php - вы должны получить путь MAMP 5.6.10

5.6.10 - это версия PHP, которую вы установили в своем MAMP.


3

OSX с заваркой

$ brew install mcrypt php70-mcrypt

Я использую PHP 7.0.x, поэтому измените «php70» на вашу версию, если вы используете другую версию.
Как указано в других ответах, вы можете увидеть свою версию PHP с $ php -v.


3

Для тех, кто все еще приезжает сюда сегодня:

Laravel больше не нуждается в mcryptрасширении . mcryptустарел, последнее обновление libmcrypt было в 2007 году. Laravel 4.2 тоже устарел и больше не поддерживается. Лучшее (= безопасное) решение - это обновить до Laravel> 5.1 (до Laravel 5.2 нет LTS).

Макрипт был удален из Laravel в июне 2015 года: https://github.com/laravel/framework/pull/9041.


Я исправил свою проблему, запустив усадьбу

0

sudo php установить mcrypt

sudo php5enmod mcrypt


1
Хотя ваш комментарий технически может быть правдой, мы стремимся включить некоторые объяснения в ваши ответы здесь, на StackOverflow. Кроме того, кажется, что OP уже установлен mcrypt, не могли бы вы рассказать, почему вы считаете, что это решит проблему с OP?
milo526

0

в Ubuntu 14.04 на основе вашей версии PHP: 5.6,7.0,7.1,7.2,7.3

sudo apt-get install php {версия} -mcrypt

sudo apt-get install php7.1-mcrypt

sudo phpenmod mcrypt 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.