Błędy podczas konfiguracji środowiska developerskiego

0

Witam.
Podczas instalacji i konfiguracji środowiska do programowania w PHP na Linuxa wg tego poradnika (jest to moja pierwsza styczność z tym językiem)

napotkałem błąd przy próbie wejścia w panel "phpmyadmin" w przeglądarce:

"Fatal error: Array and string offset access syntax with curly braces is no longer supported in /usr/share/phpmyadmin/libraries/Util.php on line 2087"

Tak więc wyedytowałem ten plik zamieniając nawiasy klamrowe w podanej linii na kwadratowe, następnie znów wszedłem w "phpmyadmin" i tym razem pojawił się inny błąd:

"Fatal error: Array and string offset access syntax with curly braces is no longer supported in /usr/share/phpmyadmin/libraries/url_generating.lib.php on line 231"

Ten plik również wyedytowałem. Znów wszedłem w "phpmyadmin" i kolejny błąd:

"The mbstring extension is missing. Please check your PHP configuration."

Z jednego wątku na stackoverflow.com dowiedziałem się, że prawdopodobnie muszę doinstalować plik "php-mbstring", komendą:

"sudo apt install phpmyadmin php-mbstring php-gettext"

następnie zrestartowałem serwer, komendą:

"sudo /etc/init.d/apache2 restart"

Jednak nic to nie dało i dalej pojawiał się ten sam błąd. Jednak w tym samym wątku ktoś napisał, że powinno się zainstalować mbstring w takiej wersji jaką wersję interpretera php mam zainstalowaną.
No i tutaj pojawia się problem, gdyż trochę tutaj namieszałem. To długa historia, więc powiem tylko, że na php -v w terminalu system odpowiada "PHP 7.4.28 (cli)" a na funkcję phpinfo() w index.php: "PHP 8.0.16".

Postanowiłem więc zainstalować mbstring w obydwu wersjach. Jednak to pogorszyło sprawę, bo teraz wyskakuje mi taki błąd:

"Fatal error: Uncaught ValueError: mb_convert_encoding(): Argument #2 ($to_encoding) must be a valid encoding, "" given in /usr/share/php/php-php-gettext/gettext.inc:181 Stack trace: #0 /usr/share/php/php-php-gettext/gettext.inc(181): mb_convert_encoding() #1 /usr/share/php/php-php-gettext/gettext.inc(278): _encode() #2 /usr/share/php/php-php-gettext/gettext.inc(285): _gettext() #3 /usr/share/phpmyadmin/libraries/sanitizing.lib.php(179): __() #4 /usr/share/phpmyadmin/libraries/Message.php(607): PMA_sanitize() #5 /usr/share/phpmyadmin/libraries/Message.php(672): PMA\libraries\Message::decodeBB() #6 /usr/share/phpmyadmin/libraries/Error.php(220): PMA\libraries\Message->getMessage() #7 /usr/share/phpmyadmin/libraries/ErrorHandler.php(193): PMA\libraries\Error->getHash() #8 /usr/share/phpmyadmin/libraries/ErrorHandler.php(156): PMA\libraries\ErrorHandler->addError() #9 [internal function]: PMA\libraries\ErrorHandler->handleError() #10 /usr/share/phpmyadmin/libraries/session.inc.php(133): ini_set() #11 /usr/share/phpmyadmin/libraries/common.inc.php(280): require('...') #12 /usr/share/phpmyadmin/index.php(13): require_once('...') #13 {main} thrown in /usr/share/php/php-php-gettext/gettext.inc on line 181"

Czy wiecie o co może chodzić i jak zmusić do działania "phpmyadmin"?

Mój system to: Linux Mint 19.3 Cinnamon
Serwer: Apache2

0

Spróbuj uaktualnić phpMyAdmin.
U mnie działa dla:
PHP 8.1.2
phpMyAdmin 5.1.1

1
Kano napisał(a):

napotkałem błąd przy próbie wejścia w panel "phpmyadmin" w przeglądarce:
[...]
Tak więc wyedytowałem ten plik zamieniając nawiasy klamrowe w podanej linii na kwadratowe, następnie znów wszedłem w "phpmyadmin" i tym razem pojawił się inny błąd:
[..]
Ten plik również wyedytowałem. Znów wszedłem w "phpmyadmin" i kolejny błąd:

Nie powinieneś nic edytować; bo jasno widać że masz nowszą wersję PHP; a oprogramowanie używało feature'ów (klamerek) które nie były kompatybilne w przód.

Tak więc to co powinieneś zrobić, to albo zmnieszyć wersję PHP; albo zupdate'ować PhpMyAdmin, z czego ta druga opcja jest lepsza.

0
  1. Autor jest tu na forum "sławny" ... obawiam się, że nie z dobrej strony

    Jest wiele rzetelnych i po tysiąc razy sprawdzonych tutoriali, czy w kręgu Debiana (jak w tym przypadku chyba), czy Fedory
    https://www.google.com/search?client=firefox-b-d&q=debian+php++mysql+setup

  2. Jak wejdziesz na ścieżkę "naprawiania" po słabym tutorialu, to wątpię czy skończysz. Te dwa pehapy 7 i 8 mi to mówią.

0

A czy moglibyście mi pomóc uaktualnić phpmyadmin? Po ok. godzinnym przeszukiwaniu internetu jedynym sposobem jaki proponują użytkownicy linuxa jest wpisanie w terminalu:

"apt install phpmyadmin"

tylko, że najnowsza wersja tego panelu w repozytoriach, które mam dodane to 4.6. Nie znalazłem informacji z jakich repozytoriów mogę pobrać nowszą wersję.

ZrobieDobrze napisał(a):
  1. Autor jest tu na forum "sławny" ... obawiam się, że nie z dobrej strony

    Jest wiele rzetelnych i po tysiąc razy sprawdzonych tutoriali, czy w kręgu Debiana (jak w tym przypadku chyba), czy Fedory
    https://www.google.com/search?client=firefox-b-d&q=debian+php++mysql+setup

  2. Jak wejdziesz na ścieżkę "naprawiania" po słabym tutorialu, to wątpię czy skończysz. Te dwa pehapy 7 i 8 mi to mówią.

A czy jest jakiś inny sposób na posprzątanie tego bałaganu oprócz reinstalki systemu?

0
Kano napisał(a):

A czy moglibyście mi pomóc uaktualnić phpmyadmin? Po ok. godzinnym przeszukiwaniu internetu jedynym sposobem jaki proponują użytkownicy linuxa jest wpisanie w terminalu:

"apt install phpmyadmin"

tylko, że najnowsza wersja tego panelu w repozytoriach, które mam dodane to 4.6. Nie znalazłem informacji z jakich repozytoriów mogę pobrać nowszą wersję.

Jeśli koniecznie chcesz wersję 4.6, to tutaj masz opisane dokładnie co jest wymagane: https://docs.phpmyadmin.net/en/release_4_8_5/require.html

Ale ja bym radził zainstalować 5tkę.

0

Ok, zainstaluję 5tkę. Tylko jak to zrobić? W jakim repozytorium ją znajdę? Niestety wyrosłem na windzie. Z linuxa korzystam od niedawna i nie jestem zbyt oblatany.

0

Ok. W końcu znalazłem w necie instrukcję jak zaktualizować phpmyadmin. Zauktualizowałem do wersji 5.1.3. Ostatni opisany przez mnie błąd zniknął, ale pojawił się kolejny (za to favikonka wróciła, więc jest lepiej ;):

Brak rozszerzenia mysqli. Proszę sprawdzić konfigurację PHP. Zobacz naszą dokumentację, aby uzyskać więcej informacji.

Tutaj jest link do wyżej wspomnianej dokumentacji (punkt 1.20):

http://localhost/phpmyadmin/doc/html/faq.html#faqmysql

Jest tam napisane:

"This problem can be also caused by wrong paths in the php.ini or using wrong php.ini.

Make sure that the extension files do exist in the folder which the extension_dir points to and that the corresponding lines in your php.ini are not commented out (you can use phpinfo() to check current setup):"

W phpinfo() znalazłem ścieżkę do pliku php.ini

Loaded Configuration File:  /etc/php/8.0/apache2/php.ini

oraz lokalizację extension_dir:

extension_dir:  /usr/lib/php/20200930

W pliku php.ini w linii extension_dir zmieniłem lokalizację z ./ na /usr/lib/php/20200930, ale nic to nie dało. Potem zobaczyłem, że plik mysqli.so znajduje się jedynie w lokalizacji /usr/lib/php/20210902/mysqli.so, więc skopiowałem go też do lokalizacji extension_dir, ale również nic to nie dało.

Czy macie jeszcze jakiś pomysł dlaczego to może nie działać?

1
Kano napisał(a):

Ok. W końcu znalazłem w necie instrukcję jak zaktualizować phpmyadmin. Zauktualizowałem do wersji 5.1.3. Ostatni opisany przez mnie błąd zniknął, ale pojawił się kolejny (za to favikonka wróciła, więc jest lepiej ;):

Brak rozszerzenia mysqli. Proszę sprawdzić konfigurację PHP. Zobacz naszą dokumentację, aby uzyskać więcej informacji.

To po prostu oznacza że nie masz włączonego extensiona mysqli, które domyślnie jest wyłączone, a którego wymaga PhpMyAdmin. Musisz po prostu go włączyć, znajdując plik php.ini (możesz go zobaczyć uruchamiając php --ini), edytować go i odkomentować ;extension=mysqli, usuwając średnik.

Jakoś tak to powinno wyglądać:

...
...
;extension=intl
;extension=imap
;extension=ldap
extension=mbstring
;extension=exif     
extension=mysqli
;extension=oci8_12c  
;extension=odbc
;extension=openssl
;extension=pdo_firebird
...
...
0

Zrobiłem tak jak napisałeś, ale nadal ten sam błąd.

0
Kano napisał(a):

Zrobiłem tak jak napisałeś, ale nadal ten sam błąd.

Odpaliłeś php --ini, zobaczyłeś który plik php.ini jest używany, otworzyłeś go, odkomentowałeś mysqli, zapisałeś, i nadal podczas uruchomienia dostajesz błąd o brakującym extensionie mysqli?

1

że na php -v w terminalu system odpowiada "PHP 7.4.28 (cli)" a na funkcję phpinfo() w index.php: "PHP 8.0.16

Skoro tak to sprawdznie w CLI nie ma sensu.
Co masz po wyświetleniu przez phpinfo()

0
TomRiddle napisał(a):
Kano napisał(a):

Zrobiłem tak jak napisałeś, ale nadal ten sam błąd.

Odpaliłeś php --ini, zobaczyłeś który plik php.ini jest używany, otworzyłeś go, odkomentowałeś mysqli, zapisałeś, i nadal podczas uruchomienia dostajesz błąd o brakującym extensionie mysqli?

W sumie plików php.ini mam 6.

dmk@dmk-P31-DS3L:~$ sudo find / -name php.ini
[sudo] hasło użytkownika dmk:
find: ‘/run/user/1000/gvfs’: Brak dostępu
/etc/php/7.4/apache2/php.ini
/etc/php/7.4/cli/php.ini
/etc/php/8.1/phpdbg/php.ini
/etc/php/8.1/cli/php.ini
/etc/php/8.0/apache2/php.ini
/etc/php/8.0/cli/php.ini

We wszystkich odkomentowałem extension=mbstring i extension=mysqli

Na php --ini system odpowiada:

dmk@dmk-P31-DS3L:~$ php --ini
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20190902/mysqli (/usr/lib/php/20190902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/mysqli.so (/usr/lib/php/20190902/mysqli.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File: /etc/php/7.4/cli/php.ini
Scan for additional .ini files in: /etc/php/7.4/cli/conf.d
Additional .ini files parsed: /etc/php/7.4/cli/conf.d/10-opcache.ini,
/etc/php/7.4/cli/conf.d/10-pdo.ini,
/etc/php/7.4/cli/conf.d/20-calendar.ini,
/etc/php/7.4/cli/conf.d/20-ctype.ini,
/etc/php/7.4/cli/conf.d/20-exif.ini,
/etc/php/7.4/cli/conf.d/20-ffi.ini,
/etc/php/7.4/cli/conf.d/20-fileinfo.ini,
/etc/php/7.4/cli/conf.d/20-ftp.ini,
/etc/php/7.4/cli/conf.d/20-gettext.ini,
/etc/php/7.4/cli/conf.d/20-iconv.ini,
/etc/php/7.4/cli/conf.d/20-json.ini,
/etc/php/7.4/cli/conf.d/20-mbstring.ini,
/etc/php/7.4/cli/conf.d/20-phar.ini,
/etc/php/7.4/cli/conf.d/20-posix.ini,
/etc/php/7.4/cli/conf.d/20-readline.ini,
/etc/php/7.4/cli/conf.d/20-shmop.ini,
/etc/php/7.4/cli/conf.d/20-sockets.ini,
/etc/php/7.4/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.4/cli/conf.d/20-sysvsem.ini,
/etc/php/7.4/cli/conf.d/20-sysvshm.ini,
/etc/php/7.4/cli/conf.d/20-tokenizer.ini

jurek1980 napisał(a):

że na php -v w terminalu system odpowiada "PHP 7.4.28 (cli)" a na funkcję phpinfo() w index.php: "PHP 8.0.16

Skoro tak to sprawdznie w CLI nie ma sensu.
Co masz po wyświetleniu przez phpinfo()

A co konkretnie mam podać? Przesyłam screen pierwszej tabeli. Napisz jeśli coś jeszcze mam podać.
php.png

0

@Kano: Po pierwsze; robisz bajzel, bo używasz php z linii poleceń który widać że jest w wersji 7.4; ale pokazujesz nam phpinfo() z wersji 8.0. Więc widać, że masz różne wersje PHP na kompie. Ogarnij to jakoś.

@Kano: Co do samego błędu - przecież masz napisane jak na dłoni

PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20190902/mysqli (/usr/lib/php/20190902/mysqli: cannot open shared object file: No such file or directory)
1

Za to, że wpiszesz sobie w dowolnym miejscu w systemie php filex.php i to zadziała odpowdają zmienne środowiskowe. Ustaw sobie tą samą w wersję dla comand line. https://forums.linuxmint.com/viewtopic.php?t=180380

Lub na odwrót w apache ustaw z jakiego rozszerzenia ma on korzystać.
https://serverfault.com/questions/149039/how-to-change-what-version-of-php-apache2-uses

Jak to sobie poustawiasz odkomentuj potrzebne rozszerzenia we właściwej wersji. Załadowane modułu możesz sprawdzić poprzez php -m w cmd oraz przez phpinfo() w jakimś index.php

W ogóle walczysz o to PHPMyAdmin ale czy jest Co ono potrzebne? Do bazy możesz podłączyć się z jakiegoś IDE typu Vscode czy innych programów, a nawet pisać zapytania w linii komend. Piszę tak tylko informacyjne, żebyś się nie poddawał i w rasie co miał alternatywę.

0
TomRiddle napisał(a):

@Kano: Po pierwsze; robisz bajzel, bo używasz php z linii poleceń który widać że jest w wersji 7.4; ale pokazujesz nam phpinfo() z wersji 8.0. Więc widać, że masz różne wersje PHP na kompie. Ogarnij to jakoś.

Dobrze, postanowiłem więc najpierw zrobić porządek. W Synapticu usunąłem wszystkie pakiety mające w nazwie php7.4. Teraz na php -v system odpowiada

dmk@dmk-P31-DS3L:$ php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20210902/mysqli (/usr/lib/php/20210902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: Module "mbstring" is already loaded in Unknown on line 0
PHP 8.1.3 (cli) (built: Feb 21 2022 1426) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies
with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies

a na php --ini

dmk@dmk-P31-DS3L:</del>$ php --ini
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20210902/mysqli (/usr/lib/php/20210902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: Module "mbstring" is already loaded in Unknown on line 0
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File: /etc/php/8.1/cli/php.ini
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed: /etc/php/8.1/cli/conf.d/10-mysqlnd.ini,
/etc/php/8.1/cli/conf.d/10-opcache.ini,
/etc/php/8.1/cli/conf.d/10-pdo.ini,
/etc/php/8.1/cli/conf.d/15-xml.ini,
/etc/php/8.1/cli/conf.d/20-bz2.ini,
/etc/php/8.1/cli/conf.d/20-calendar.ini,
/etc/php/8.1/cli/conf.d/20-ctype.ini,
/etc/php/8.1/cli/conf.d/20-curl.ini,
/etc/php/8.1/cli/conf.d/20-dom.ini,
/etc/php/8.1/cli/conf.d/20-exif.ini,
/etc/php/8.1/cli/conf.d/20-ffi.ini,
/etc/php/8.1/cli/conf.d/20-fileinfo.ini,
/etc/php/8.1/cli/conf.d/20-ftp.ini,
/etc/php/8.1/cli/conf.d/20-gd.ini,
/etc/php/8.1/cli/conf.d/20-gettext.ini,
/etc/php/8.1/cli/conf.d/20-iconv.ini,
/etc/php/8.1/cli/conf.d/20-mbstring.ini,
/etc/php/8.1/cli/conf.d/20-mysqli.ini,
/etc/php/8.1/cli/conf.d/20-pdo_mysql.ini,
/etc/php/8.1/cli/conf.d/20-phar.ini,
/etc/php/8.1/cli/conf.d/20-posix.ini,
/etc/php/8.1/cli/conf.d/20-readline.ini,
/etc/php/8.1/cli/conf.d/20-shmop.ini,
/etc/php/8.1/cli/conf.d/20-simplexml.ini,
/etc/php/8.1/cli/conf.d/20-sockets.ini,
/etc/php/8.1/cli/conf.d/20-sysvmsg.ini,
/etc/php/8.1/cli/conf.d/20-sysvsem.ini,
/etc/php/8.1/cli/conf.d/20-sysvshm.ini,
/etc/php/8.1/cli/conf.d/20-tokenizer.ini,
/etc/php/8.1/cli/conf.d/20-xmlreader.ini,
/etc/php/8.1/cli/conf.d/20-xmlwriter.ini,
/etc/php/8.1/cli/conf.d/20-xsl.ini,
/etc/php/8.1/cli/conf.d/20-zip.ini

Czy powinienem jeszcze usunąć PHP 8.1, czy jest to część PHP 8.0?

TomRiddle napisał(a):

@Kano: Co do samego błędu - przecież masz napisane jak na dłoni

PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20190902/mysqli (/usr/lib/php/20190902/mysqli: cannot open shared object file: No such file or directory)

Nie wiem dlaczego wyskakuje taki komunikat, bo taki katalog istnieje:

dmk@dmk-P31-DS3L:/usr/lib/php$ ls -1
20190902
20200930
20210902
8.0
8.1
packaging
php-fpm-socket-helper
php-helper
php-maintscript-helper
sessionclean

Skopiowałem do wszystkich już wcześniej mysqli.so, ale nic to nie dało.

jurek1980 napisał(a):

Za to, że wpiszesz sobie w dowolnym miejscu w systemie php filex.php i to zadziała odpowdają zmienne środowiskowe. Ustaw sobie tą samą w wersję dla comand line. https://forums.linuxmint.com/viewtopic.php?t=180380

Lub na odwrót w apache ustaw z jakiego rozszerzenia ma on korzystać.
https://serverfault.com/questions/149039/how-to-change-what-version-of-php-apache2-uses

Jak to sobie poustawiasz odkomentuj potrzebne rozszerzenia we właściwej wersji. Załadowane modułu możesz sprawdzić poprzez php -m w cmd oraz przez phpinfo() w jakimś index.php

Szczerze mówiąc woałbym zostawić sobie tylko PHP 8.0 a wszystkie pozostałe usunąć (jeśli się da), bo nie będą mi do niczego potrzebne.

jurek1980 napisał(a):

W ogóle walczysz o to PHPMyAdmin ale czy jest Co ono potrzebne? Do bazy możesz podłączyć się z jakiegoś IDE typu Vscode czy innych programów, a nawet pisać zapytania w linii komend. Piszę tak tylko informacyjne, żebyś się nie poddawał i w rasie co miał alternatywę.

Nie mam pojęcia. Stawiam tutaj pierwsze kroki. Z kursu podanego na początku tego tematu wynika, że jest mi potrzebne, więc wolałbym móc go używać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1