Ostrzeżenie PHP: Uruchomienie PHP: Nie można załadować biblioteki dynamicznej


101

Uruchamiam skrypt PHP i otrzymuję ten błąd:

Ostrzeżenie PHP: Uruchomienie PHP: nie można załadować biblioteki dynamicznej '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/ixed.5.2.lin' - / usr / local / lib / php / extensions /no-debug-non-zts-20090626/ixed.5.2.lin: nie można otworzyć pliku obiektu współdzielonego: nie ma takiego pliku lub katalogu w nieznanym w linii 0

Co to znaczy?

Odpowiedzi:


57

Oznacza to, że w jednym z plików konfiguracyjnych php (php.ini lub innym zbliżonym do niego) znajduje się wiersz extension=...lub, który próbuje załadować to rozszerzenie:zend_extension=...ixed.5.2.lin

Niestety ten plik lub ścieżka nie istnieje lub uprawnienia są nieprawidłowe.

  1. Spróbuj przeszukać .inipliki ładowane przez PHP ( phpinfo()możesz wskazać, które z nich są) - jeden z nich powinien spróbować załadować to rozszerzenie.
  2. Popraw ścieżkę do pliku lub zakomentuj odpowiednią linię.

6
Więc też otrzymuję ten błąd, ale moja witryna nadal działa - to najdziwniejsza część. W przypadku tego typu błędu zakładam, że php od razu ulegnie awarii. Zamiast tego otrzymuję moją stronę, ale mój program rejestrujący rejestruje ten błąd. Dziwne co?
BT,

1
W php.ini (w moim przypadku /etc/php.ini) zakomentowałem rozszerzenie linii = php_pdo_mysql.dll i zrestartowałem Apache, co rozwiązało mój problem i pozbyłem się ostrzeżeń. (Mac, Maverick)
ola

Albo popraw ścieżkę o jakiej ścieżce mówimy?
prats1411

3. lub zainstaluj brakujące oczekiwane rozszerzenie
Andrew

@ prats1411 w pliku ini: rozszerzenie = [ścieżka tutaj]
Andrew,

38

Jeśli korzystasz z Linuksa, możesz znaleźć wszystkie załadowane pliki konfiguracyjne, wpisując to w powłoce:

php -r "print phpinfo();" | grep ".ini"

AKTUALIZACJA: Jak wspomniano w komentarzach, może to być jeszcze dokładniejsze:

php -i | grep ini

5
php -i | grep inipowinno też działać dobrze (nie ma potrzeby drukowania phpinfo, gdy masz argument polecenia)
YorickH

1
Miałem podobny błąd, ale phpinfo()nie wymieniłem żadnych problematycznych plików ini. php -i | grep inizgodnie z sugestią YorickH pracował dla mnie. Spowoduje to wyświetlenie bibliotek załadowanych dla CLI i jak się okazało, plik ini, który spowodował ostrzeżenie, znajdował się w katalogu CLI w moim przypadku.
DaneeL

8
co powiesz php --inina wyświetlenie wszystkich plików ini
OzzyCzech

17

Jeśli chcesz tylko, aby błąd zniknął, a nie potrzebujesz rozszerzenia, to z całą pewnością skomentuj linię php.ini. Ale jeśli naprawdę chcesz rozwiązać problem, tutaj znajdziesz dodatkowe informacje.

Istnieje wiele przyczyn takiego stanu rzeczy w zależności od konkretnego modułu, ale istnieją również pewne ogólne wytyczne.

  1. Otwórz phpinfo()i poszukaj extension_dirw Coresekcji. To jest miejsce, w którym powinny znajdować się Twoje moduły.

Na przykład /usr/lib/php/modulesdla systemu Unix / Linux.

  1. Jeśli plik faktycznie istnieje, upewnij się, że uprawnienia są odpowiednie.
  2. Jeśli plik nie istnieje, użyj poniższych zasobów, aby go zainstalować.

Instalacja na * nix (PEAR)
Instalacja rozszerzeń w systemie Windows


Próbuję zainstalować przez ten moduł gruszki, ale kiedy uruchomię perl install <module>, dostałemCan't open perl script "install": File or Directory not found
Fabiotk

Trudno poznać problem, sprawdzić swoje ścieżki i uprawnienia.
EternalHour

jeśli w pojemniku spróbujdocker-php-ext-install <package>
jiggunjer

Pomogło mi to znaleźć to w php.ini i zobaczyć, że folder jest pusty.
frankfurt-laravel

15

phpStom z XAMPP

TL; DR Oprócz sprawdzenia, czy pliki istnieją, może być konieczne dodanie litery dysku do niektórych rekordów w pliku php.ini

Nagle zacząłem mieć problem z używaniem phpStorm 7 do debugowania php za pomocą xampp i xdebug. Kiedy próbowałem ustawić intellij interperter na xampps php, otrzymałem wiele ostrzeżeń, takich jak to w pytaniu, na przykład:

Nie można załadować biblioteki dynamicznej „/xampp/php/ext/php_bz2.dll”

Z jakiegoś powodu musiałem dodać moją literę dysku do rekordów rozszerzenie_dir i Browscap w pliku php.ini:

extension_dir = "\xampp\php\ext"
browscap = "\xampp\php\extras\browscap.ini"

do

extension_dir = "e:\xampp\php\ext"
browscap = "e:\xampp\php\extras\browscap.ini"

2
To naprawiło problem w systemie Windows 10.
Justin Eldracher,

1
To naprawiło problem w systemie Windows 7.
Wielkie

6

php -r "echo php_ini_loaded_file();"

Pokaże się w CLI bieżący załadowany plik ini, wyszukaj tam swoje rozszerzenie, ścieżka do niego jest nieprawidłowa.


4

Ładowanie .dll w systemie Linux

Napotkałem ten komunikat ostrzegawczy, gdy próbowałem zainstalować rozszerzenie php przez php.ini pliku ;

dopóki nie zorientowałem się, że nie możesz załadować .dll w Linuksie rozszerzeń ,

ale musisz skomentować rozszerzenia, które chcesz zaimportować ;extension= ... .dlli poprawnie zainstalować przezsudo apt-get install php-...

uwaga : ...to nazwa rozszerzenia, które chcesz włączyć.


Dokładnie, dla mnie po prostu brakowało instalacji modułu - instalowałem phpPgAdmin i to, co musiałem zainstalować jawnie, było sudo apt install php-pgsqlspecyficzne sudo apt install php7.1-pgsqldla wersji php (zmiana 7.1 na twoją wersję php)
jave.web

3

Zauważ, że możesz również otrzymać ten błąd, jeśli twoja biblioteka PHP nie ma "innych" uprawnień do otwierania katalogu. W moim konkretnym przypadku zauważyłem to podczas używania php -ldo sprawdzania składni skryptu w moim edytorze tekstu. Oznaczało to, że ponieważ moje konto nazywało się „volomike”, to konto nie miało uprawnień do uruchamiania bibliotek, które mająphp polegało polecenie.

Na przykład w systemie Ubuntu 14.04 PHP5 zostało automatycznie zainstalowane w ścieżce /usr/lib/php5/20121212+lfs. Jednakże, ponieważ pracowałem w C ++ przy budowaniu niektórych obiektów współdzielonych, majstrowałem przy uprawnieniach do katalogu i schrzaniłem rzeczy tak, że konta inne niż root nie miały uprawnień do wykonywania katalogu (otwierania katalogu) do przeglądania /usr/lib/php5/20121212+lfs. Tak więc wpisałem następujące polecenie, aby rozwiązać ten problem:

sudo chmod o+x /usr/lib/php5/20121212+lfs.

Teraz, gdy robię to php -l example.phpjako użytkownik inny niż root, nigdy więcej nie powoduje to problemu „Nie można załadować biblioteki dynamicznej”.


To było dla mnie dokładne rozwiązanie, używając Ubuntu 16.10. Upewnij się, że zmieniłeś rozszerzenie "rozszerzenie" na .so podczas używania Linuksa (standardowa konfiguracja dawała mi .dll)
mroesler

Używam linux mint 18 i to jest nadal aktualne
Dika

2

Miałem ten sam problem na XAMPP dla Windows, kiedy próbowałem zainstalować Composer. Zrobiłem php -vi błąd wyrzucania php:

Nie można załadować biblioteki dynamicznej „/xampp/php/ext/php_bz2.dll”

Zajęło mi trochę czasu, zanim zdałem sobie sprawę, że muszę skonfigurować mój XAMPP. Więc biegnę setup_xampp.bati php wraca do pracy jak marzenie.


2

Miałem ten sam problem na XAMPP dla Windows10, kiedy próbowałem zainstalować Composer.

Nie można załadować biblioteki dynamicznej „/xampp/php/ext/php_bz2.dll”

Następnie wykonaj poniższe czynności

  1. po prostu otwórz swój current_xampp_containing_drive: \ xampp (default_xampp_folder) \ php \ php.ini w programie tekstowym (np. Notatnik ++)
  2. teraz po prostu znajdź - czy current_xampp_containing_drive: \ xampp istnieje?
  3. jeśli nie, znajdź "katalog_rozszerzenia" i uzyskaj nazwę dysku (c, d lub żądany dysk), na przykład.

rozszerzenie_katalog = "F: \ xampp731 \ php \ ext" (tutaj nazwa_napędu_nazwy_z_pliku to F)

  1. ponownie zamień na finded_drive_name_from_the_file: \ xampp na current_xampp_containing_drive: \ xampp i zapisz.
  2. teraz ponownie rozpocznij postęp instalacji kompozytora, myślę, że twój problem zostanie rozwiązany.

1

Wystąpił ten błąd na wielu modułach, kiedy równolegle uruchamiałem różne wersje PHP na moim serwerze. Aby to rozwiązać, musiałem zainstalować pakiety, których nie mógł znaleźć dla tej konkretnej wersji PHP. Czyli na przykład, gdybym zobaczył: -

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/xml.so'

Zainstalowałbym bibliotekę specjalnie dla wersji PHP: -

sudo apt-get install php7.1-xml

A następnie uruchom ponownie Apache. Naprawiłem to dla mnie. Możesz sprawdzić swoją wersję w ten sposób: -

php -v

1

Później Windows 10 XAMPPzainstalowałem LAMPP (XAMPP)na Ubuntu.Windows XAMPPmiałem dużo mniej do skonfigurowania w porównaniu z MAC (iOS), ale teraz z Linuksem Ubuntu miałem kilka więcej, ponieważ w Linuksie jest więcej (dobrze).

mysqli.dllPomyliłem i aktywowałem (i mysql.dll: usuń „#” w/etc/php/7.2/cli/php.ini

Zacząłem otrzymywać PHP Warning: PHP Startup: Unable to load dynamic librarywiadomość dotyczącą dll. Skomentowałem mysql(and i).dllw tym samym pliku, ale wiadomość nie zniknęła, dopóki nie skomentowałem „” w /opt/lampp/etc/php.ini.

Wygląda XAMPP odczytuje php.iniplik z /etc/php/7.2/clii czyni modyfikację w php.iniz /opt/lampp/etc. (; rozszerzenie = php_pdo_mysql.dll po ";" zrestartował Apache i nie ma już żadnych wiadomości.


1

W moim przypadku otrzymałem ten błąd, ponieważ pobrałem bezpieczną wątkowo wersję biblioteki dll (z wrostkiem -ts-), ale moja instalacja php php nie była bezpieczna dla wątków (z wrostkiem -nts-). Pobranie odpowiedniej wersji biblioteki dll, dokładnie pasującej do wersji instalacyjnej mojego php, rozwiązało problem.


1
Aby sprawdzić konfigurację bezpieczną wątkowo na serwerze, zobacz phpinfo () i thread-safetywłącz / wyłącz. Wystąpił ten sam błąd w odwrotnej kolejności, pobrano nts po skonfigurowaniu dla ts.
Andy

0

Napotkałem podobny błąd. Błędem, który popełniłem, było użycie nazwy „kontrolera” jako „Strony” zamiast „stron” w moim adresie URL.


0

W systemie Windows może to być nieprawidłowa ścieżka w „Zmiennych środowiskowych systemu”. „Ścieżka” do katalogu php.exe musi być dobra.



0

To, co zrobiłem, to;

1 - Najpierw dowiaduję się, jakiej wersji PHP używam za pomocą funkcji phpinfo ()

<?php   
    phpinfo();
?>

2 - Tam znajdziesz lokalizację pliku konfiguracyjnego (php.ini)

metoda phpinfo () wynik

3 - Otwórz ten plik

4 - Skomentuj linię, podobnie jak na poniższym obrazku

Może to być inna wartość, ale powinna być związana z rozszerzeniem. Nie jestem ekspertem, ale ten proces pomógł mi rozwiązać podobny problem.

wprowadź opis obrazu tutaj


0

„C: /PHP/5.2.13/ext \ php_mcrypt1.dll”

Powiedziałbym, że na twoim php.ini jest jakaś literówka (dodatkowa 1). Być może ładujesz plik php.ini inny niż tego, czego się spodziewasz (zobacz dane wyjściowe php.ini, aby się upewnić).

Poza tym upewnij się, że php_mcrypt.dll i PHP:

Zostały połączone z tą samą biblioteką wykonawczą VC (zwykle msvcrt.dll dla VC6 lub msvcrt90.dll dla VC9) - użyj np. Narzędzia do przechodzenia zależności. dalsze biblioteki (DLL), upewnij się, że są dostępne (np. w tym samym katalogu co rozszerzenie) PHP powinno podawać błędy znaczeniowe, jeśli którykolwiek z pierwszych trzech warunków powyżej nie jest spełniony, ale i tak je napisałem, ponieważ nie jestem pewien dla PHP 5.2.


0

W moim przypadku ta wiadomość zaczęła się pojawiać, gdy zaktualizowałem wersję php do 7.4.

Aby go rozwiązać, musiałem poszukać plików php.ini znalezionych w folderze wersji php (/etc/php/7.4/apache2/ && /etc/php/7.4/cli/), sprawdzając linie, w których widzę rozszerzenia rozszerzenia gd2 i intl zostały odkomentowane.


0

Z C: \ xampp \ php \ php.exe mam

  • Nie można załadować biblioteki dynamicznej „”
  • C: \ xampp \ php \ ext \ php_.dll (nie można znaleźć określonego modułu).

Rozwiązałem przez wykomentowanie
C: \ xampp \ php \ php.ini
; extension =


-1

Miałem podobny problem i poniżej jest część wszystkich ostrzeżeń / błędów.

Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: C:\php\ext\curl 
(The specified module could not be found.), C:\php\ext\php_curl.dll (The specified 
module 
could not be found.)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: 
C:\php\ext\fileinfo (The specified module could not be found.), 
C:\php\ext\php_fileinfo.dll (The specified module could not be found.)) in Unknown on 
line 0

Jeśli przejrzysz ostrzeżenia, zobaczysz, że szuka rozszerzeń php w C:\php\ext\tak, pobrałem php do C:\katalogu i to rozwiązało problemy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.