ChatGPT解决这个技术问题 Extra ChatGPT

Laravel requires the Mcrypt PHP extension

I am trying to use the migrate function in Laravel 4 on OSX. However, I am getting the following error:

Laravel requires the Mcrypt PHP extension.

As far as I understand, it's already enabled (see the image below).

What is wrong, and how can I fix it?

https://i.stack.imgur.com/ezq8a.png

Do you use Laravel 3 or 4?
Just added the info to the post. It's Laravel 4
Maybe this post will help you: stackoverflow.com/questions/14476181/…
Are you using built-in PHP, or did you install another version? If so, how did you install it?
I found this easy solution using homebrew: jorble.com/2013/04/install-php-mcrypt-in-macosx

S
Synchro

Do you have MAMP installed?

Use which php in the terminal to see which version of PHP you are using.

If it's not the PHP version from MAMP, you should edit or add .bash_profile in the user's home directory, that is : cd ~

In .bash_profile, add following line:

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

Edited: First you should use command cd /Applications/MAMP/bin/php to check which PHP version from MAMP you are using and then replace with the PHP version above.

Then restart the terminal to see which PHP you are using now.

And it should be working now.


You don't need MAMP to get Mcrypt.
of course you don't need MAMP to get Mcrypt. this answer is just for people who have multiple versions of PHP installed on their computer, say XAMPP or MAMP, or others.
Similarly, for AMPPS users: export PATH=/Applications/AMPPS/php-5.4/bin:$PATH ...assuming you're shooting for 5.4.xx, there's also 5.3 and 5.5 in there.
Everybody does not use MAMP, you have an answer for the rest of people?
Just thought I'd point out, the cd ~ is very important, you must open the .bash_profile that exists there, ALSO important is you must close your terminal and re-open so that the new bash variables are loaded. Just make sure to run which php to verify your change has applied, happy coding!
M
Machavity

The web enabled extensions and command line enabled extensions can differ. Run php -m in your terminal and check to see if mcrypt is listed. If it's not then check where the command line is loading your php.ini file from by running php --ini from your terminal.

In this php.ini file you can enable the extension.

OSX

I have heard of people on OSX running in to problems due to the terminal pointing to the native PHP shipped with OSX. You should instead update your bash profile to include the actual path to your PHP. Something like this (I don't actually use OSX so this might not be 100%):

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

Ubuntu

On earlier versions of Ubuntu (prior to 14.04) when you run sudo apt-get install php5-mcrypt it doesn't actually install the extension into the mods-available. You'll need to symlink it.

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

On all Ubuntu versions you'll need to enable the mod once it's installed. You can do that with php5enmod.

sudo php5enmod mcrypt
sudo service apache2 restart

NOTES PHP 7.1 deprecated mcrypt and 7.2 has removed the mcrypt extension entirely Laravel 5.1 and later removed the need for mcrypt


this worked for me on Ubuntu, thanks! Weird how sudo apt-get install php5-mcrypt doesn't actually install the extension fully.
Ubuntu 13.10 - I also had to install mcrypt itself
Apparently it had already installed the mcrypt ini into mods-available, i just wasn't aware of the php5enmod command. Using that makes it work like a charm. Thanks!
So just on this, I have mcrypt listed when I go php -m, when I go which php it says /usr/local/bin/php. Ive tried installing mcrypt with brew and seemed to have worked.. But Laravel still says Mcrypt PHP extension required.
Like @imkingdavid I also did not require the symbolic link. php5enmod was sufficient. Ubuntu 14.04 LTS
g
gvlasov

To those that uses XAMPP 1.7.3 and Mac

Go to Terminal Enter which php If it says /usr/bin/php, then proceed to 3. Enter sudo nano ~/.bash_profile (or sudo vim ~/.bash_profile if you know how to use it) Then paste this export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH" Ctrl+O then enter to save, then Ctrl+X to exit. Type cd ~ type . .bash_profile restart terminal. Enter which php. If you did it right, it should be the same as the path in #4.

The reason for the mcrypt error is because your Mac uses its native php, you need to change it to the one xampp has.

P.S. I'd recommend using MAMP for Laravel 4 for Mac users, this issue will get resolved along with the php file info error without a sweat, and the php version of xampp is so outdated.


Also a good answer! Should be this for MAMP: "export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
for those who doesn't have ~/.bash_profile, try checking the ~/.bashrc
runs the .bash_profile immediately, normally you need to restart for those bash to run
Something bad happened and now my terminal would not even recognise sudo
It works on lampp too, just change the path to export PATH="/opt/lampp/bin:$PATH"
o
oozzal

For non MAMP or XAMPP users on OSX (with homebrew installed):

brew install homebrew/php/php56-mcrypt

Cheers!


I was worried that this wouldn't work with native OSX PHP, but I just installed that and I didn't have to mess around with my PATH or anything. Just works. Nice one.
It would be great to have this answer appended to the leading answers on this thread, to make it a more comprehensive resource. Thanks for the quick advice, as Lauren mentioned, this really fixes the problem.
This is actually $ brew install homebrew/php/php55-mcrypt, otherwise got Error: No available formula with the name "php55-mcrypt"
m
mppfiles

Using Ubuntu, just

sudo php5enmod mcrypt

did the trick for me. You don't need to restart Apache since you need to use PHP just from the CLI.


N
Nanhe Kumar

In Ubuntu (PHP-FPM,Nginx)

sudo apt-get install php5-mcrypt

After installing php5-mcrypt

you have to make a symlink to ini files in mods-available:

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

enable:

sudo php5enmod mcrypt

restart php5-fpm:

sudo service php5-fpm restart

More detail


I ran sudo aptitude -y install php5-mcrypt, followed by sudo php5enmod mcrypt and sudo service php5-fpm restart. (I skipped the soft linking step). It worked :)
S
Sojan Jose

Getting Laravel working on Apache

PHP version : PHP 5.5.9

Ubuntu version : 14.04

i had a working laravel project on windows. when i copied it to ubuntu server , i started getting the mcrypt error. this after a lot of hours of trial and error

getting artisan command working

(if you are having mcrypt error while using artisan command line tool)

i did a lot of trial and error so each time i run the php5enmod command before, i had error messages. but on fresh install there was no error messages. after this step i got artisan command working

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

fixing the browser error

(if you are having mcrypt error in browser when accessing local laravel index page)

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

add the following line under the dynamically compiled extensions section of php ini

extension=mcrypt.so

restart the apache server , purge the laravel cache and everything working


If you are working on php docker image, you also need to run docker-php-ext-install mcrypt. Tested on image: php:5.6.31-apache. Without that, php -m does not show mcrypt.
P
Prateek Choudhary

For php-fpm installations on Ubuntu 14.04, the following worked for me :

sudo apt-get install php5-mcrypt

This will create mcrypt.ini file inside /etc/php5/mods-available/

Then

sudo php5enmod mcrypt

will create a symlink in: /etc/php5/fpm/conf.d/

Just restart php-fpm services sudo service php5-fpm restart


B
Barry

For ubuntu try these steps if others are not working :

cd ~ sudo apt-get remove php5-mcrypt sudo apt-get install php5-mcrypt sudo php5enmod mcrypt sudo service apache2 restart

Hope that will help. Thanks !


B
Barry

Or, use:

sudo apt-get install php5-mcrypt

not sure if this will work on standard PHP installs - I installed php 5.5.7 using the package from :

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

B
Barry

My OS is Yosemite.

I resolve this issue, by finding configuration paths:

php --ini

Example output:

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)

Next steps:

Rename or Delete php55 ini file Create symlink Restart Apache server

Commands:

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

Then you can check your php modules via:

php -m

B
Barry

Just for yumers,

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

Maybe you need install remi repo


C
Community

This solved it for me on my Linux Mint local enviroment https://askubuntu.com/questions/350942/cannot-get-mcrypt-for-php5

I needed to make a symlink to my /etc/php5/conf.d/mcrypt.ini file in the following folders /etc/php5/apache2/conf.d/mcrypt.ini and /etc/php5/cli/conf.d/mcrypt.ini


m
mergenc

You need an all in one environment. You may use MAMP or XAMPP or any other tools. After installing one of these tools you will need to edit(create) your .bash_profile(Assuming that you use bash).

Or even simple and more professional you can use Laravel Homestead.

Here is a link to official documentation: http://laravel.com/docs/5.0/homestead

Also Jeffrey has a free tutorial about it: https://laracasts.com/series/laravel-5-fundamentals/episodes/2

I advice you to go with homestead because you will preinstall all of the following tools.

Ubuntu 14.04

PHP 5.6

HHVM

Nginx

MySQL

Postgres

Node (With Bower, Grunt, and Gulp)

Redis

Memcached

Beanstalkd

Laravel Envoy

Fabric + HipChat Extension


a
abaumer

Expanding on @JetLaggy:

After trying again and again to modify .bash_profile with the MAMP directory, I changed the file permissions for the MAMP php directory and was able to get 'which php' to show the proper directory. Trouble was that other functions didn't work, such as 'php -v'.

So I updated MAMP. http://documentation.mamp.info/en/mamp/installation/updating-mamp

This did the trick for my particular setup. I had to adjust my PATH to reflect the updated version of PHP, but once I did, everything worked!


C
Community

On OS X

Using MAMP

Enter the command which php in the terminal to see which version of PHP you are using. If it's not the PHP version from MAMP, the $PATH variable used by Bash will need to be updated.

First, you should use command "cd /Applications/MAMP/bin/php" to check which php version from MAMP and take note of the version (eg, php5.6.7).

Once you know the version, you should edit the ~/.bash_profile file (that is, the .bash_profile that is in your home directory) and add an export line:

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

Make sure that you replace php5.6.7 with the version of PHP that you have selected in MAMP.

Once the file has been saved, make sure that you close close your Terminal and open it again. Once that has been done, you will be using the PHP that ships with MAMP.

One way to easily find what the line should be that you need to put inside your .bash_profile is to run the following command inside your 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

Copying and pasting those three lines into your terminal will correctly output the PHP version that has been selected inside the MAMP control panel.

Using Homebrew/MacPorts

Make sure that your path contains /usr/local/bin/ (Homebrew) or /opt/local/bin (MacPorts) if you are using PHP that comes with either of these two package managers.

Checking the PHP path with MacPorts

You can find the exact location of PHP using MacPorts with the following command:

port contents php70 | grep bin/php

Note that you should replace php70 with the version of PHP that you have installed.

Check the PHP path with Homebrew-php

Homebrew-php (https://github.com/Homebrew/homebrew-php) is a tap that has various different versions of PHP.

You can find the exact location of PHP using Homebrew with the following command:

brew --prefix homebrew/php/php56

Note that you should replace php56 with the version of PHP that you have installed.


r
rap-2-h

For those who still come here today:

Laravel does not need mcrypt extension anymore. mcrypt is obsolete, the last update to libmcrypt was in 2007. Laravel 4.2 is obsolete too and has no more support. The best (=secure) solution is to update to Laravel >5.1 (there is no LTS before Laravel 5.2).

Mcrypt was removed from Laravel in June 2015: https://github.com/laravel/framework/pull/9041


I fixed my issue by running homestead provision
I still came here today. and Still using Laravel 4.2
G
Gowthaman D

in 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

or

sudo apt install php7.2-mcrypt
sudo phpenmod mcrypt

U
Unwired

If you are using Z Shell, just do the following:

Open terminal sudo nano ~/.zshrc Paste this; export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH Save Run source ~/.zshrc Run which php - you should get the MAMP 5.6.10 path

5.6.10 is the version of PHP you set in your MAMP.


k
kris

OSX with brew

$ brew install mcrypt php70-mcrypt

I am running PHP 7.0.x, so change "php70" to your version, if you are using a different version.
As stated in other answers, you can see your php version with $ php -v.


A
Anubhav Tiwari

sudo php install mcrypt sudo php5enmod mcrypt


While your comment might technically be true we strive to include some explanation to your answers here on StackOverflow. Furthermore it seems like OP already installed mcrypt, could you expand on why you believe this will fix OP's problem?
J
Jignesh Joisar

in ubuntu 14.04 based on your php version : 5.6,7.0,7.1,7.2,7.3

sudo apt-get install php{version}-mcrypt

sudo apt-get install php7.1-mcrypt

sudo phpenmod mcrypt