Nie można uzyskać programu mcrypt dla PHP5

29

Zrobiłem to wiele razy:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude mówi, że mcrypt jest zainstalowany. Przeinstalowałem go już 3 razy. Ponownie uruchomiłem apache około 20 razy, odkąd go zainstalowałem. Kiedy patrzę na phpInfo, nie widzę mcrypt na liście. Kiedy próbuję wykonać mój kod, mówi, że funkcja mcrypt (wybierz jedną - dowolną) nie istnieje. mcrypt najwyraźniej nie jest włączony.

Czy ktoś ma pojęcie, co może być nie tak? Nie wiem, które elementy powinny być gdzie i jak to wszystko ma do siebie pasować.

Zainstalowałem PHP 5.5.3

webDeveloperDave
źródło
Czy zainstalowałeś również PHP z menedżera pakietów ( apt-get/ aptitude)? Pakiet php5-mcryptmoże skonfigurować rozszerzenie tylko dla tych, o php.iniktórych „wie”. Po drugie, nie teraz, jeśli ponownie apache2ctlładuję moduły. „Normalny” sposób ponownego uruchomienia Apache byłby podobny sudo service apache2 restart. Po trzecie, w jaki sposób PHP jest podłączony do twojego Apache? Jeśli używasz czegoś takiego jak (f) cgi lub php-fpm (w przeciwieństwie do mod-php), prawdopodobnie będziesz musiał zrestartować PHP samodzielnie, dodatkowo do restartowania Apache.
Henning Kockerbeck
Zainstalowaliśmy wszystko za pomocą aptitude. apache2ctl zatrzymuje i restartuje apache. Ponownie uruchomiliśmy komputer kilka razy od czasu tych instalacji. Zaufaj mi, gdy mówię, że apache został „zrestartowany”, odkąd zainstalowaliśmy php5-mcrypt - a także PHP. PHP5 działa dobrze jako moduł apache - to strona internetowa napisana w PHP - więc zakładam, że PHP jest zainstalowany jako moduł apache. Jeśli przejdę do / etc / apache2 / mods-włączony php5 jest na tej liście. Nie widzę mcrypt w / etc / php5 / mods-available, ale jeśli wykonam sudo aptitude search mcrypt, widzę zainstalowane 3 rzeczy: libmcypt4, mcrypt i php5-mcrypt - ????
webDeveloperDave
Które php.inisą wymienione w wynikach phpinfo(około 5 do 7 pozycji)? Powinien to być plik /etc/php5/. Jeśli szukasz w tym pliku mcrypt, co się pojawia?
Henning Kockerbeck
php.ini jest w /etc/php5/apache2/php.ini, jest tam sekcja mcrypt z 2 ustawieniami - oba skomentowane - mcrypt.alameterms_dir i mcrypt.modes_dir powyższe komentarze mówią, że domyślnie jest to / usr / local / lib / libmcrypt - te katalogi nie istnieją. Właśnie to po raz pierwszy przekonało mnie, że mcrypt może nie zostać zainstalowany, chociaż aptitude twierdzi, że tak jest. Jeśli zrobię sudo aptitude info mcrypt mówi, że pakiet jest zainstalowany - wersja 2.6.8-1.3 - mówi Konflikty: mcrypt - więc co to mówi? że ten pakiet jest w konflikcie z samym sobą? Czy istnieje lepszy sposób szyfrowania informacji o użytkowniku?
webDeveloperDave
Nie musisz przejmować się mcryptpaczką. Jest to program wiersza poleceń, który używa libmcrypt, podobnie jak rozszerzenie PHP. Musisz więc upewnić się, że pakiet libmcrypt4jest zainstalowany. Czy jest tam php.inifragment kodu /etc/php5/conf.d/mcrypt.ini? To powinno załadować lib. Czy ten fragment kodu jest ładowany przez PHP (patrz phpinfo)? Znów próbowałeś zrestartować Apache sudo service apache2 restartzamiast apache2ctl?
Henning Kockerbeck

Odpowiedzi:

62

Spróbuj tego

sudo php5enmod mcrypt

sudo service apache2 restart
użytkownik229183
źródło
Ładnie działało, a dowiązanie symboliczne (po skopiowaniu całej rzeczy) to dla mnie +1. Tak pozytywnie!
Stefano Mtangoo
4
To zadziałało dla mnie. Ale nie potrzebowałem pierwszego polecenia (ln). Nie miałem mcrypt.ini w folderze /etc/php5/apache/conf.d. Działało sudo php4enmod mcrypt. Złóż plik teraz. Serwer działa !. Wielkie dzięki.
peterept
1
Dzięki działa dobrze. Ale chcę wiedzieć o poleceniu, którego użyłeś „sudo php5enmod mcrypt” .. Co to jest ..? Jaki jest cel używania tego polecenia?
Elavarasan
1
„sudo php5enmod mcrypt” utworzy dowiązanie symboliczne w katalogu „/etc/php5/conf.d” z numerem priorytetu (domyślnie 20), dzięki czemu można go odinstalować bez modyfikowania plików ini za pomocą „sudo php5dismod mcrypt”
Vizjerai
11

Miałem podobny problem na Ubuntu 13.10. Po uruchomieniu instalacji kompozytora wygenerował ten sam błąd, kończący się na.

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

  [RuntimeException]  
  Error Output:****   

Zainstalowałem mcryptiz php5-mcryptaptitude i nadal php -mnie wyświetlałem się mcryptjako załadowane rozszerzenie:

aptitude install mcrypt
aptitude install php5-mcrypt

Uruchomiłem updatedbi wtedy locate mcrypt. Znalazłem się mcrypt.iniw /etc/php5/conf.d. Jednak wszystkie inne rozszerzenia (jak json) miały swoje pliki .ini w /etc/php5/apache2/conf.di /etc/php5/cli/conf.d. Oba były linkami do ../../mods.available.

Następnie przeniosłem się mcrypt.inido /etc/php5/available-modulesi ustawiłem linki:

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

I podobnie dla /etc/php5/apache2/conf.d.

I voila, pojawiło się php -m!

użytkownik239289
źródło
Dziękuję bardzo za tę odpowiedź. Całkowicie mnie załatwiłeś. Chociaż nie przeniosłem /etc/php5/conf.d/mcrypt.ini - po prostu ustawiłem moje dowiązania symboliczne, aby wskazywały tę lokalizację, która również działała i prawdopodobnie zapewni automatyczne ładowanie przyszłych aktualizacji mcrypt?
alexleonard,
2

Wygląda na to, że brakuje fragmentu ini, który ładuje libmcrypt, gdy PHP jest wywoływane przez Apache. Powinien istnieć plik /etc/php5/apache2/conf.d/mcrypt.inio następującej treści

; configuration for php MCrypt module
extension=mcrypt.so

Powinieneś być w stanie skopiować go z konfiguracji innych integracji PHP, takich jak /etc/php5/cli/conf.d/mcrypt.inilub /etc/php5/conf.d/mcrypt.ini, w zależności od tego, co jest zainstalowane w twoim systemie.

Henning Kockerbeck
źródło
2

Moduł mcrypt nie jest domyślnie włączony. Włącz moduł mcrypt, a następnie uruchom ponownie apache ( kredyt )

sudo php5enmod mcrypt
sudo service apache2 restart
Boinst
źródło
1

Cóż, to jest to. Wygląda na to, że czasami szukamy najbardziej splątanego sposobu zrobienia czegoś tak prostego jak „enmod”; ) Jak Boinst mówi: sudo php5enmod mcrypt. Następnie załaduj ponownie Apache.

Maximo
źródło