Laravel wymaga rozszerzenia Mcrypt PHP

429

Próbuję użyć migrate funkcji Laravel 4na OSX. Jednak pojawia się następujący błąd:

Laravel requires the Mcrypt PHP extension.

O ile rozumiem, jest już włączony (patrz obrazek poniżej).

Co jest nie tak i jak mogę to naprawić?

wprowadź opis zdjęcia tutaj

Patrick Reck
źródło
Czy używasz Laravel 3 lub 4?
Jan P.
Właśnie dodałem informacje do wpisu. To Laravel 4
Patrick Reck
4
Może ten post pomoże ci: stackoverflow.com/questions/14476181/…
Jan P.
Używasz wbudowanego PHP, czy zainstalowałeś inną wersję? Jeśli tak, to jak to zainstalowałeś?
Jamie Schembri
2
Znalazłem to łatwe rozwiązanie za pomocą homebrew: jorble.com/2013/04/install-php-mcrypt-in-macosx
gelviis

Odpowiedzi:

288

Rozszerzenia z obsługą sieci i rozszerzenia z obsługą wiersza poleceń mogą się różnić. Uruchom php -mterminal i sprawdź, czy mcryptjest na liście. Jeśli nie, sprawdź, skąd wiersz poleceń ładuje php.iniplik, uruchamiając go php --iniz terminala.

W tym php.inipliku możesz włączyć rozszerzenie.

OSX

Słyszałem o ludziach z OSX, które mają problemy z terminalem wskazującym na natywnego PHP dostarczanego z OSX. Zamiast tego powinieneś zaktualizować swój profil bash, aby zawierał rzeczywistą ścieżkę do twojego PHP. Coś w tym stylu (tak naprawdę nie używam OSX, więc może to nie być 100%):

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

Ubuntu

We wcześniejszych wersjach Ubuntu (przed 14.04) po uruchomieniu sudo apt-get install php5-mcryptnie instaluje ono rozszerzenia w mods-available. Musisz to dowiązać symbolicznie.

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

We wszystkich wersjach Ubuntu musisz włączyć mod po jego zainstalowaniu. Możesz to zrobić za pomocą php5enmod.

sudo php5enmod mcrypt
sudo service apache2 restart

UWAGI

Jason Lewis
źródło
4
to działało dla mnie na Ubuntu, dzięki! Dziwne, że sudo apt-get install php5-mcrypttak naprawdę nie instaluje rozszerzenia w pełni.
Aristides
Ubuntu 13.10 - Musiałem także zainstalować sam mcrypt
Ondrej Galbavý
1
Najwyraźniej zainstalował już mcrypt ini w dostępnych modach, po prostu nie wiedziałem o komendzie php5enmod. Korzystanie z tego sprawia, że ​​działa jak urok. Dzięki!
imkingdavid
Więc tylko na tym, mam mcrypt na liście, kiedy idę php -m, kiedy idę, który to php mówi / usr / local / bin / php. Próbowałem zainstalować mcrypt z zaparzeniem i wydawało się, że zadziałało. Ale Laravel nadal twierdzi, że wymagane jest rozszerzenie Mcrypt PHP.
Marais Rossouw,
1
Podobnie jak @imkingdavid, również nie wymagałem dowiązania symbolicznego. php5enmod było wystarczające. Ubuntu 14.04 LTS
Brett
340

Czy masz zainstalowany MAMP ?

Użyj which phpw terminalu, aby zobaczyć, której wersji PHP używasz.

Jeśli nie jest to wersja PHP z MAMP, powinieneś edytować lub dodać .bash_profiledo katalogu domowego użytkownika, to znaczy:cd ~

W .bash_profiledodaj następujący wiersz:

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

Edytowane: Najpierw powinieneś użyć polecenia, cd /Applications/MAMP/bin/phpaby sprawdzić, której wersji PHP z MAMP używasz, a następnie zastąpić ją wersją PHP powyżej.

Następnie restartterminal, aby zobaczyć, którego PHP używasz teraz.

I powinno już działać.

JustinHo
źródło
18
Nie potrzebujesz MAMP, aby uzyskać Mcrypt.
jackyalcine
48
oczywiście nie potrzebujesz MAMP, aby zdobyć Mcrypt. ta odpowiedź jest tylko dla osób, które mają wiele wersji PHP zainstalowanych na swoim komputerze, powiedzmy XAMPP lub MAMP, lub inne.
JustinHo,
Podobnie dla użytkowników AMPPS: export PATH=/Applications/AMPPS/php-5.4/bin:$PATH... zakładając, że strzelasz do wersji 5.4.xx, są tam również 5.3 i 5.5.
Joel Mellon,
6
Każdy nie korzysta z MAMP, masz odpowiedź dla reszty ludzi?
TuGordoBello,
2
Pomyślałem, że wskazałem, że cd ~jest to bardzo ważne, musisz otworzyć to, .bash_profileco tam jest, TAKŻE ważne jest, aby zamknąć terminal i otworzyć ponownie, aby załadować nowe zmienne bash. Po prostu upewnij się, aby uruchomić php, aby sprawdzić, czy zmiana została zastosowana, szczęśliwego kodowania!
przewodowy00
142

Do tych, którzy używają XAMPP 1.7.3 i Mac

  1. Idź do terminalu
  2. Wchodzić which php
    • Jeśli to powie /usr/bin/php, przejdź do 3.
  3. Wpisz sudo nano ~/.bash_profile(lub sudo vim ~/.bash_profilejeśli wiesz, jak go używać)
  4. Następnie wklej to export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
  5. Ctrl+Onastępnie wprowadź, aby zapisać, a następnie, Ctrl+Xaby wyjść.
  6. Rodzaj cd ~
  7. rodzaj . .bash_profile
  8. uruchom ponownie terminal.
  9. Enter which php. Jeśli zrobiłeś to dobrze, powinien być taki sam jak ścieżka w # 4.

Przyczyną błędu mcrypt jest to, że twój Mac używa natywnego php, musisz zmienić go na ten, który ma xampp.

PS Polecam używanie MAMP dla Laravel 4 dla użytkowników komputerów Mac, problem ten zostanie rozwiązany wraz z błędem informacji o pliku php bez wysiłku, a wersja php xampp jest tak przestarzała.

Bryan P.
źródło
12
Również dobra odpowiedź! Powinno tak być dla "export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:$PATH"
MAMP
3
dla tych, którzy nie mają ~ / .bash_profile, spróbuj sprawdzić ~ / .bashrc
Ironwind
6
uruchamia plik .bash_profile natychmiast, normalnie musisz uruchomić ponownie, aby uruchomić bash
Bryan P
Stało się coś złego i teraz mój terminal nawet nie rozpoznał sudo
Sunny R Gupta,
Działa również na lampp, po prostu zmień ścieżkę naexport PATH="/opt/lampp/bin:$PATH"
JTC
87

Dla użytkowników innych niż MAMP lub XAMPP na OSX (z zainstalowanym homebrew):

brew install homebrew/php/php56-mcrypt

Twoje zdrowie!

oozzal
źródło
1
Martwiłem się, że to nie zadziała z natywnym OSX PHP, ale właśnie to zainstalowałem i nie musiałem się bawić z moją PATH ani nic takiego. Po prostu działa. Niezłe.
Lauren
3
Byłoby wspaniale, gdyby ta odpowiedź została dołączona do wiodących odpowiedzi w tym wątku, aby uczynić ją bardziej wszechstronnym zasobem. Dzięki za szybką radę, jak wspomniała Lauren, to naprawdę naprawia problem.
Bryan Rayner,
4
Tak naprawdę jest $ brew install homebrew/php/php55-mcryptinaczejError: No available formula with the name "php55-mcrypt"
Connor Leech
47

Tylko z Ubuntu

sudo php5enmod mcrypt

zrobił dla mnie lewę. Nie musisz restartować Apache, ponieważ musisz używać PHP tylko z poziomu CLI.

mppfiles
źródło
37

W Ubuntu (PHP-FPM, Nginx)

sudo apt-get install php5-mcrypt

Po zainstalowaniu php5-mcrypt

musisz utworzyć dowiązanie symboliczne do plików ini w dostępnych modach:

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

włączyć:

sudo php5enmod mcrypt

uruchom ponownie php5-fpm:

sudo service php5-fpm restart

Więcej szczegółów

Nanhe Kumar
źródło
Pobiegłem sudo aptitude -y install php5-mcrypt, a następnie sudo php5enmod mcrypti sudo service php5-fpm restart. (Pominąłem krok miękkiego linkowania). Udało się :)
Aditya, poseł
26

Nakłonienie Laravela do pracy nad Apache

Wersja PHP: PHP 5.5.9

Wersja Ubuntu: 14.04

Miałem działający projekt Laravela na Windowsie. kiedy skopiowałem go na serwer Ubuntu, zacząłem otrzymywać błąd mcrypt. to po wielu godzinach prób i błędów

uruchomienie pracy rzemieślnika

(jeśli masz błąd mcrypt podczas korzystania z narzędzia wiersza polecenia rzemieślnika)

Zrobiłem wiele prób i błędów, więc za każdym razem, gdy uruchamiam komendę php5enmod, miałem komunikaty o błędach. ale przy świeżej instalacji nie było komunikatów o błędach. po tym kroku uruchomiłem polecenie rzemieślnika

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

naprawianie błędu przeglądarki

(jeśli masz błąd mcrypt w przeglądarce podczas uzyskiwania dostępu do lokalnej strony indeksu laravel)

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

dodaj następujący wiersz pod dynamicznie skompilowaną sekcją rozszerzeń php ini

extension=mcrypt.so

zrestartuj serwer Apache, wyczyść pamięć podręczną laravel i wszystko działa

Sojan V Jose
źródło
Jeśli pracujesz nad obrazem dokera php , musisz również uruchomić docker-php-ext-install mcrypt. Testowane na obrazek: php:5.6.31-apache. Bez tego php -mnie pokazuje mcrypt.
Ewa
19

W przypadku instalacji php-fpm na Ubuntu 14.04 działały dla mnie:

sudo apt-get install php5-mcrypt

Spowoduje to utworzenie mcrypt.inipliku w środku/etc/php5/mods-available/

Następnie

sudo php5enmod mcrypt

utworzy dowiązanie symboliczne w: /etc/php5/fpm/conf.d/

Po prostu uruchom ponownie usługi php-fpm sudo service php5-fpm restart

Prateek Choudhary
źródło
19

W przypadku Ubuntu wypróbuj następujące kroki, jeśli inni nie działają:

  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

Mam nadzieję, że to pomoże. Dzięki !

Sagiruddin Mondal
źródło
19

Albo użyj:

sudo apt-get install php5-mcrypt

nie jestem pewien, czy to zadziała na standardowych instalacjach PHP - zainstalowałem php 5.5.7używając pakietu z:

sudo add-apt-repository ppa:ondrej/php5 
sudo apt-get update
JoeTidee
źródło
16

Mój system operacyjny to Yosemite.

Rozwiązuję ten problem, znajdując ścieżki konfiguracji:

php --ini

Przykładowe dane wyjściowe:

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)

Następne kroki:

  1. Zmień nazwę lub usuń plik ini php55
  2. Utwórz dowiązanie symboliczne
  3. Uruchom ponownie serwer Apache

Polecenia:

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

Następnie możesz sprawdzić swoje moduły php poprzez:

php -m
d.danailov
źródło
16

Tylko dla mniszek

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

Może potrzebujesz zainstalować remo repo

Sean
źródło
15

Rozwiązało to dla mnie na moim lokalnym środowisku Linux Mint /ubuntu/350942/cannot-get-mcrypt-for-php5

Musiałem utworzyć dowiązanie symboliczne do mojego pliku /etc/php5/conf.d/mcrypt.ini w następujących folderach /etc/php5/apache2/conf.d/mcrypt.ini i /etc/php5/cli/conf.d /mcrypt.ini

Theo Kouzelis
źródło
14

Potrzebujesz wszystko w jednym środowisku. Możesz użyć MAMP lub XAMPP lub dowolnego innego narzędzia. Po zainstalowaniu jednego z tych narzędzi będziesz musiał edytować (utworzyć) plik .bash_profile (zakładając, że używasz bash).

Lub nawet prosty i bardziej profesjonalny możesz użyć Laravel Homestead.

Oto link do oficjalnej dokumentacji: http://laravel.com/docs/5.0/homestead

Jeffrey ma również darmowy samouczek na ten temat: https://laracasts.com/series/laravel-5-fundamentals/episodes/2

Radzę iść z homestead, ponieważ wstępnie zainstalujesz wszystkie następujące narzędzia.

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Węzeł (z altaną, chrząknięciem i łykiem)
  • Redis
  • Memcached
  • Beanstalkd
  • Wysłannik Laravela
  • Materiał + rozszerzenie HipChat
mburakergenc
źródło
10

Rozwijanie w @JetLaggy:

Po ponownych próbach modyfikacji pliku .bash_profile w katalogu MAMP zmieniłem uprawnienia do pliku w katalogu MAMP php i udało mi się uzyskać „który php”, aby wyświetlić właściwy katalog. Problem polegał na tym, że inne funkcje nie działały, takie jak „php -v”.

Więc zaktualizowałem MAMP. http://documentation.mamp.info/en/mamp/installation/updating-mamp

To załatwiło sprawę dla mojej konkretnej konfiguracji. Musiałem dostosować ŚCIEŻKĘ, aby odzwierciedlała zaktualizowaną wersję PHP, ale kiedy to zrobiłem, wszystko działało!

abaumer
źródło
9

W systemie OS X

Korzystanie z MAMP

Wpisz polecenie which phpw terminalu, aby zobaczyć, której wersji PHP używasz. Jeśli nie jest to wersja PHP z MAMP, zmienna $ PATH używana przez Bash będzie musiała zostać zaktualizowana.

Najpierw powinieneś użyć polecenia „cd / Applications / MAMP / bin / php”, aby sprawdzić, która wersja php z MAMP i zanotować wersję (np. Php5.6.7).

Po poznaniu wersji należy edytować ~/.bash_profileplik (czyli ten, .bash_profilektóry znajduje się w katalogu domowym) i dodać wiersz eksportu:

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

Upewnij się, że zastąpiłeś php5.6.7 wersją PHP, którą wybrałeś w MAMP.

Po zapisaniu pliku upewnij się, że zamknąłeś terminal i otworzyłeś go ponownie. Gdy to zrobisz, będziesz używać PHP dostarczanego z MAMP.


Jednym ze sposobów, aby łatwo znaleźć linię, którą należy umieścić w swoim, .bash_profilejest uruchomienie następującej komendy w terminalu:

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

Skopiowanie i wklejenie tych trzech wierszy do terminala spowoduje prawidłowe wydrukowanie wersji PHP wybranej w panelu sterowania MAMP.

Korzystanie z Homebrew / MacPorts

Upewnij się, że pathzawiera /usr/local/bin/(Homebrew) lub /opt/local/bin(MacPorts), jeśli używasz PHP dostarczanego z jednym z tych dwóch menedżerów pakietów.

Sprawdzanie ścieżki PHP za pomocą MacPorts

Dokładną lokalizację PHP można znaleźć za pomocą MacPorts za pomocą następującego polecenia:

port contents php70 | grep bin/php

Pamiętaj, że powinieneś zastąpić php70zainstalowaną wersją PHP.

Sprawdź ścieżkę PHP za pomocą Homebrew-php

Homebrew-php ( https://github.com/Homebrew/homebrew-php ) to kran, który ma różne wersje PHP.

Możesz znaleźć dokładną lokalizację PHP za pomocą Homebrew za pomocą następującego polecenia:

brew --prefix homebrew/php/php56

Pamiętaj, że powinieneś zastąpić php56zainstalowaną wersją PHP.

Tim Groeneveld
źródło
6

w 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

lub

sudo apt install php7.2-mcrypt
sudo phpenmod mcrypt
Gowthaman D.
źródło
5

Jeśli używasz Z Shell, wykonaj następujące czynności:

  1. Otwórz terminal
  2. sudo nano ~/.zshrc
  3. Wklej to; export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH
  4. Zapisać
  5. Biegać source ~/.zshrc
  6. Uruchom which php - powinieneś pobrać ścieżkę MAMP 5.6.10

5.6.10 to wersja PHP, którą ustawiłeś w swoim MAMP-ie.

Bez okablowania
źródło
3

OSX z naparem

$ brew install mcrypt php70-mcrypt

Korzystam z PHP 7.0.x, więc zmień „php70” na swoją wersję, jeśli używasz innej wersji.
Jak stwierdzono w innych odpowiedziach, możesz zobaczyć swoją wersję php za pomocą $ php -v.

kris
źródło
3

Dla tych, którzy nadal tu przyjeżdżają:

Laravel nie potrzebuje mcryptjuż rozszerzenia . mcryptjest przestarzały, ostatnia aktualizacja libmcrypt miała miejsce w 2007 roku. Laravel 4.2 jest również przestarzały i nie ma już wsparcia. Najlepszym (= bezpiecznym) rozwiązaniem jest aktualizacja do Laravel> 5.1 (przed Laravel 5.2 nie ma LTS).

Mcrypt został usunięty z Laravel w czerwcu 2015 r .: https://github.com/laravel/framework/pull/9041

rap-2-h
źródło
0

sudo php zainstaluj mcrypt

sudo php5enmod mcrypt

Anubhav Tiwari
źródło
1
Chociaż technicznie Twój komentarz może być prawdziwy, staramy się zamieścić wyjaśnienie twoich odpowiedzi tutaj na StackOverflow. Ponadto wygląda na to, że OP jest już zainstalowany. mcryptCzy możesz wyjaśnić, dlaczego uważasz, że to rozwiąże problem OP?
milo526,
0

w Ubuntu 14.04 w oparciu o twoją wersję php: 5.6,7.0,7.1,7.2,7.3

sudo apt-get install php {wersja} -mcrypt

sudo apt-get install php7.1-mcrypt

sudo phpenmod mcrypt 
Jignesh Joisar
źródło