У меня есть локальное приложение с laravel 5.5, использующее базу данных mysql на моем ubuntu18.04.1. Он размещен на сервере с php7.2, и у меня в системе была такая же версия php. Все работало нормально. Вчера я попытался подключить свое приложение к SQL Server, чтобы получить данные из базы данных, и начался мой кошмар.
Я добавил информацию о подключении к базе данных в файл database.php в моем приложении laravel в следующем формате.
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
Казалось, все работает нормально, но когда я попытался получить данные, у меня было исключение соединения, laravel сообщил мне, что драйвер sqlsrv не найден. Я подумал, что, возможно, расширение sqlsrv не было включено, поэтому я пошел в php.ini, чтобы активировать его, но я его не нашел, поэтому начал исследовать и обнаружил, что мне нужно установить его из Microsoft. веб-страница. Я пытался всеми способами добавить правильный .so, я устанавливал и удалял php7.2, и я не знаю, как папки и модули php7.4 находятся в моей системе. Я следил за этим сайтом (на испанском языке), чтобы установить докер и попытаться предотвратить эту ситуацию в будущем. Я следил за ним до части $ sudo docker-compose up -d nginx mysql phpmyadmin
, затем я попытался запустить свое приложение, и оно работает, оно правильно подключается, но я не могу получить доступ к phpmyadmin через http://localhost:3030/
, у меня ошибка phpMyAdmin, потому что он не находит расширение mysqli.
Потом я устал бегать php -S
как раньше бежал при попытке подключиться к phpMyAdmin и получаю это
$ php -S localhost:3030
[Thu Dec 10 13:17:50 2020] PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning: PHP Startup: Unable to load dynamic library 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] Failed to listen on localhost:3030 (reason: Address already in use)
Я побежал php --ini
, чтобы найти, где находится файл конфигурации, и отредактировал расширение mysqli, чтобы включить его, теперь, когда я снова запускаю php --ini
, я получаю это предупреждение.
$ php --ini
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Configuration File (php.ini) Path: /etc/php/7.2/cli
Loaded Configuration File: /etc/php/7.2/cli/php.ini
Scan for additional .ini files in: /etc/php/7.2/cli/conf.d
Additional .ini files parsed: /etc/php/7.2/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.2/cli/conf.d/10-opcache.ini,
/etc/php/7.2/cli/conf.d/10-pdo.ini,
/etc/php/7.2/cli/conf.d/20-calendar.ini,
/etc/php/7.2/cli/conf.d/20-ctype.ini,
/etc/php/7.2/cli/conf.d/20-exif.ini,
/etc/php/7.2/cli/conf.d/20-fileinfo.ini,
/etc/php/7.2/cli/conf.d/20-ftp.ini,
/etc/php/7.2/cli/conf.d/20-gettext.ini,
/etc/php/7.2/cli/conf.d/20-iconv.ini,
/etc/php/7.2/cli/conf.d/20-json.ini,
/etc/php/7.2/cli/conf.d/20-mysqli.ini,
/etc/php/7.2/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.2/cli/conf.d/20-phar.ini,
/etc/php/7.2/cli/conf.d/20-posix.ini,
/etc/php/7.2/cli/conf.d/20-readline.ini,
/etc/php/7.2/cli/conf.d/20-shmop.ini,
/etc/php/7.2/cli/conf.d/20-sockets.ini,
/etc/php/7.2/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.2/cli/conf.d/20-sysvsem.ini,
/etc/php/7.2/cli/conf.d/20-sysvshm.ini,
/etc/php/7.2/cli/conf.d/20-tokenizer.ini
и я все еще не могу получить доступ к phpMyAdmin. Когда я бегу php --version
я получаю это
$ php --version
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.34-8+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 31 2020 16:57:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34-8+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
Мне нужно исправить это как можно скорее, чтобы продолжить работу над моим приложением laravel, и, когда это будет сделано, мне нужен правильный способ установить правильные драйверы sqlsrv, чтобы иметь возможность подключить мое приложение laravel к базе данных сервера sql.
Когда я бегу php -m
я получаю это
$ php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
и это то, что я сейчас установил с php, nginx и sql
$ dpkg --get-selections | grep php
libapache2-mod-php7.2 install
php-common install
php-mysql install
php7.2 install
php7.2-cli install
php7.2-common install
php7.2-fpm install
php7.2-json install
php7.2-mysql install
php7.2-opcache install
php7.2-readline install
php7.4-common install
php7.4-mysql
$ dpkg --get-selections | grep nginx
libnginx-mod-http-geoip install
libnginx-mod-http-image-filter install
libnginx-mod-http-xslt-filter install
libnginx-mod-mail install
libnginx-mod-stream install
nginx install
nginx-common install
nginx-core install
$ dpkg --get-selections | grep sql
akonadi-backend-mysql install
libaprutil1-dbd-sqlite3:amd64 install
libmono-sqlite4.0-cil install
libmysqlclient20:amd64 install
libmysqlcppconn7v5:amd64 install
libqt4-sql:amd64 install
libqt4-sql-mysql:amd64 install
libqt5sql5:amd64 install
libqt5sql5-mysql:amd64 install
libqt5sql5-sqlite:amd64 install
libsqlite3-0:amd64 install
libvsqlitepp3v5:amd64 install
msodbcsql17 install
mssql-server install
mssql-tools install
mysql-client install
mysql-client-5.7 install
mysql-client-core-5.7 install
mysql-common install
mysql-server install
mysql-server-5.7 install
mysql-server-core-5.7 install
mysql-utilities install
mysql-workbench install
mysql-workbench-data install
php-mysql install
php7.2-mysql install
php7.4-mysql install
postgresql install
postgresql-10 install
postgresql-client-10 install
postgresql-client-common install
postgresql-common install
postgresql-contrib install
python-mysql.connector install
python-pysqlite2 install
Кто-нибудь знает, что я могу сделать?
Если вам нужна дополнительная информация, сообщите мне в комментариях, и я обновлю вопрос.
Спасибо!
Я пытался следовать этой теме , чтобы удалить все файлы php и php7 и попытался переустановить php7.2, но я не могу добавить репозиторий при выполнении add-apt-repository ppa:ondrej/php
, потому что терминал выдает мне это
Obj:1 https://download.docker.com/linux/ubuntu bionic InRelease
Ign:2 http://ppa.launchpad.net/langdalepl/gvfs-mtp/ubuntu bionic InRelease
Obj:3 https://linux.teamviewer.com/deb stable InRelease
Obj:4 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease
Obj:5 http://dl.google.com/linux/chrome/deb stable InRelease
Obj:6 http://ppa.launchpad.net/wireshark-dev/stable/ubuntu bionic InRelease
Obj:7 http://es.archive.ubuntu.com/ubuntu bionic InRelease
Des:8 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Des:9 http://archive.neon.kde.org/user bionic InRelease [131 kB]
Obj:10 https://packages.microsoft.com/ubuntu/18.04/mssql-server-2019 bionic InRelease
Err:11 http://ppa.launchpad.net/langdalepl/gvfs-mtp/ubuntu bionic Release
404 Not Found [IP: 91.189.95.83 80]
Ign:12 https://storage.googleapis.com/download.dartlang.org/linux/debian stable InRelease
Obj:13 https://packages.microsoft.com/ubuntu/18.04/prod bionic InRelease
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]
Obj:15 https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease
Obj:16 https://storage.googleapis.com/download.dartlang.org/linux/debian stable Release
Des:17 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
E: The repository 'http://ppa.launchpad.net/gnome-shell-extensions/ppa/ubuntu bionic Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Я искал свою ошибку и нашел это, но у меня это не сработало.
Я попытался установить php7.2 по ветке, и все прошло хорошо, но когда я выполнил sudo service apache2 restart
, я получил это
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
поэтому я выполнил systemctl status apache2.service
, и он бросил это
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since Fri 2020-12-11 10:34:22 CET; 1min 31s ago
Process: 4671 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
dic 11 10:34:22 Dev-PC apachectl[4671]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directiv
dic 11 10:34:22 Dev-PC apachectl[4671]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
dic 11 10:34:22 Dev-PC apachectl[4671]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
dic 11 10:34:22 Dev-PC apachectl[4671]: no listening sockets available, shutting down
dic 11 10:34:22 Dev-PC apachectl[4671]: AH00015: Unable to open logs
dic 11 10:34:22 Dev-PC apachectl[4671]: Action 'start' failed.
dic 11 10:34:22 Dev-PC apachectl[4671]: The Apache error log may have more information.
dic 11 10:34:22 Dev-PC systemd[1]: apache2.service: Control process exited, code=exited status=1
dic 11 10:34:22 Dev-PC systemd[1]: apache2.service: Failed with result 'exit-code'.
dic 11 10:34:22 Dev-PC systemd[1]: Failed to start The Apache HTTP Server.
Что я мог сделать сейчас? Я не могу запустить службу apache, и я не знаю, что здесь не так...
Я обновил свой менеджер загрузок, чтобы найти доступные репозитории и бинго, репозитории ondrej были заблокированы, я просто разблокировал их и снова попытался добавить репозитории, теперь это сработало. Я переустановил apache2 с запущенным php7.2 sudo apt-get install apache2
и следил за ответом ветки. Но у меня была та же проблема, поэтому я понял, что ошибка показывала две проблемы: первая проблема заключалась в отсутствующем имени сервера, а вторая заключалась в том, что порт 80 использовался, поэтому apache2 продолжает сбой при попытке запуска. Для решения первой проблемы я запустил sudo gedit /etc/apache2/apache2.conf
и добавил Server Name 127.0.0.1
, и после сохранения первая проблема была решена, я решил вторую проблему, запустив sudo lsof -i -n -P | grep ':80'
, и обнаружил, что процесс nginx использует ее, поэтому я использовал sudo kill [the nginx PID]
, чтобы убить процессы nginx и повторил попытку. запустить apache2, и теперь это сработало. Я смог получить доступ к своей базе данных в phpmyadmin, но теперь у меня возникла другая проблема: когда я выполняю php artisan serve
в своем проекте laravel, я получаю ошибку PDOConnection.php, потому что отсутствовал драйвер, и после выполнения php -m
я понял, что это был mysql драйвер, поэтому я запустил sudo apt-get install php7.2-common php7.2-mysql php7.2-cli
и, наконец, починил apache2 и php7.2! Наконец, спасибо всем за помощь!
Но теперь у меня та же проблема, что и у меня, когда все это началось, мне нужно правильно установить драйверы sqlsrv .so, чтобы иметь возможность подключить мое приложение laravel к базе данных SQL Server. Я пытался загрузить файлы .so со страницы Microsoft, но это привело меня к этому кошмару, так что кто-нибудь знает, как мне продолжить правильную установку драйверов sqlsrv?
В поисках решений я снова проверил веб-страницу Microsoft, чтобы узнать, какие драйверы sqlsrv мне нужны для запуска запросов sql с php7.2, и снова попытался запустить sudo pecl install sqlsrv
и sudo pecl install pdo_sqlsrv
, но это не сработало для меня. Затем я нашел другой способ установки драйверов без pecl, и я запустил sudo apt-get install php7.2-dev
и скачал пакеты с wget http://pecl.php.net/get/sqlsrv-5.3.0.tgz
и wget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz
(5.3.0 была моя версия sqlsrv для php7.2), после этого я установил с pear install pdo_sqlsrv-5.3.0.tgz
и pear install sqlsrv-5.3.0.tgz
. На этот раз это сработало для меня (первый раз он выдал мне ошибку, говорящую мне, что была установлена версия pdo_sqlsrv, но я запустил sudo pear uninstall pecl/pdo_sqlsrv
и снова запустил порядок установки, тогда это сработало для меня). Затем я снова попытался запустить sudo pecl install sqlsrv
и sudo pecl install pdo_sqlsrv
, и на этот раз это сработало! После этого я запустил sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv
и, наконец, закончил установку драйверов sqlsrv php7.2 в своей Ubuntu! Я попытался снова запустить соединение с моей базой данных на сервере sql, и это сработало.
Спасибо за помощь!
Спасибо за ответ! Я пытался выполнить sudo apt-get purge php*
и sudo apt-get purge php7*
. Я следил за этой веткой, и кажется, что php сейчас отсутствует на моем компьютере, я попытался добавить репозиторий, но выдает ошибку: «Репозиторий «ppa.launchpad.net/langdalepl/gvfs-mtp/ubuntu bionic Release» не имеет файла Release». Я пытался установить php7.2, как написано в треде, но когда я запускаю sudo service apache2 restart
, он выдает другую ошибку: «Задание для apache2.service не выполнено, поскольку процесс управления завершился с кодом ошибки».
Я побежал systemctl status apache2.service
, я обновил вопрос тем, что он мне кинул
Я не знаю, я думаю, что apache2 тоже испорчен, попробуйте установить его заново, удалите apache2, затем следуйте ondrej add repo для apache2 и после этого установите php ondrej php
Я не могу добавить репозиторий ondrej, я пытался запустить sudo add-apt-repository ppa:compiz/ppa
, но выдает ту же ошибку
никогда не использовал ничего, кроме ondrej, попробуйте найти проблемы в официальном репозитории php на github или попробуйте создать новый
идеальный! теперь я могу правильно запустить apache2, я запустил sudo lsof -i -n -P | grep ':80'
только для того, чтобы увидеть, что процесс nginx блокирует процесс перезапуска apache, поэтому я убил их и повторил попытку, и это сработало, я могу снова использовать phpmyadmin (думаю, что смогу, я проверю свой app сейчас), и все, похоже, работает, но теперь мне нужно установить пакеты sqlsrv .so, чтобы иметь возможность подключаться к серверу sql с помощью моего приложения laravel. Большое спасибо!
Я обновил свой пост своим прогрессом в решении моего собственного вопроса, с помощью bhucho в комментариях к моему посту я смог исправить свой php7.2.
В поисках решений для установки правильного драйвера sqlsrv для моей версии php я снова проверил веб-страницу Microsoft, чтобы узнать, какие драйверы sqlsrv мне нужны для запуска sql-запросов с php7.2, и я снова попытался запустить sudo pecl install sqlsrv
и sudo pecl install pdo_sqlsrv
, но это не помогло. не работал для меня. Затем я нашел другой способ установки драйверов без pecl, и я запустил sudo apt-get install php7.2-dev
и скачал пакеты с wget http://pecl.php.net/get/sqlsrv-5.3.0.tgz
и wget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz
(5.3.0 была моя версия sqlsrv для php7.2), после этого я установил с pear install pdo_sqlsrv-5.3.0.tgz
и pear install sqlsrv-5.3.0.tgz
. На этот раз это сработало для меня (первый раз он выдал мне ошибку, говорящую мне, что была установлена версия pdo_sqlsrv, но я запустил sudo pear uninstall pecl/pdo_sqlsrv
и снова запустил порядок установки, тогда это сработало для меня). Затем я снова попытался запустить sudo pecl install sqlsrv
и sudo pecl install pdo_sqlsrv
, и на этот раз это сработало! После этого я запустил sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv
и, наконец, закончил установку драйверов sqlsrv php7.2 в своей Ubuntu! Я попытался снова запустить соединение с моей базой данных на сервере sql, и это сработало.
Спасибо всем за помощь!
удалите все файлы php и попробуйте добавить репозиторий ondej, используйте
add-apt-repository ppa:ondrej/php
, вы многое изменили, удалите все, используйте apt purge php*, следуйте этому stackoverflow.com/questions/58045685/…