Назад | Перейти на главную страницу

Ошибка «неопределенный символ: mysqlnd_connect»

Я создаю виртуальную машину для разработки существующего приложения PHP 5.6 с использованием Vagrant 2.1.2. Моя операционная система виртуальной машины - Ubuntu / Bionic64. Для этого приложения требуется расширение mysqli с mysqlnd, среди других пакетов, как описано в прилагаемом файле Vagrantfile.

Проблема, с которой я столкнулся, - это отчеты PHP в журнале ошибок, когда Apache2 запускается и продолжает сообщать об этом при каждом выполненном скрипте.

[14-янв-2019 21:48:24 UTC] Предупреждение PHP: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/20131226/mysql.so' - /usr/lib/php/20131226/mysql.so: неопределенный символ: mysqlnd_connect in Unknown в строке 0

[14-янв-2019 21:48:24 UTC] Предупреждение PHP: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/20131226/mysqli.so' - /usr/lib/php/20131226/mysqli.so: неопределенный символ: mysqlnd_connect in Unknown в строке 0

Я пытался:

VAGRANTFILE

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = '2'
APP_NAME = 'app'

@script = <<-SCRIPT

apt-get update && apt-get upgrade
apt-get install -y software-properties-common
add-apt-repository ppa:ondrej/php
apt-get update

#################### PHP 5.6 ####################
apt-get install -y apt-utils php5.6
a2dismod php7.0
a2dismod php7.2
a2enmod php5.6

#################### APACHE2 ####################
apt-get install -y apache2 libapache2-mod-php

# Add ServerName to httpd.conf
echo "ServerName localhost" > /etc/apache2/httpd.conf

# Setup hosts file
VHOST=$(cat <<EOF
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/#{APP_NAME}/public_html
    ServerName localhost
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory />
        Options Indexes FollowSymLinks MultiViews Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
EOF
)
echo "${VHOST}" > /etc/apache2/sites-enabled/000-default.conf

# Enable mod_rewrite
a2enmod rewrite

# Put PHP into development configuration
mv /etc/php/5.6/apache2/php.ini /etc/php/5.6/apache2/php.ini.back
cp /usr/lib/php/5.6/php.ini-development /etc/php/5.6/apache2/php.ini

# Adjust php.ini file
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 100M/' /etc/php/5.6/apache2/php.ini

# Enable PHP extensions in php.ini
###sed -i 's/;extension=php_curl.dll/extension=curl.so/' /etc/php/5.6/apache2/php.ini
sed -i 's/;extension=php_mysql.dll/extension=mysql.so/' /etc/php/5.6/apache2/php.ini
sed -i 's/;extension=php_mysqli.dll/extension=mysqli.so/' /etc/php/5.6/apache2/php.ini

# PHP will log errors here
sed -i 's:;error_log = php_errors.log:error_log = /home/#{APP_NAME}/public_html/log/error_log:' /etc/php/5.6/apache2/php.ini

#################### PHP Extensions ####################
apt-get install -y php5.6-mysql php5.6-mysqli php5.6-bz2 php5.6-cli php5.6-curl php5.6-intl php5.6-json php5.6-mbstring php5.6-opcache php5.6-soap php5.6-sqlite3 php5.6-xml php5.6-zip unzip php5.6-gd

# Restart apache
systemctl restart apache2.service

#################### MYSQL ####################
apt-get install -y mysql-server mysql-client-core-5.7

systemctl start mysql.service

# Reset root password
#/usr/bin/mysqladmin -u root password 'root'
mysqladmin -u root password 'root'

# Setup database from root user and setup the application user
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS app"
mysql -uroot -proot app < /home/#{APP_NAME}/public_html/db/schema.sql
mysql -uroot -proot app < /home/#{APP_NAME}/public_html/db/seed.sql
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* to 'vagrant'@'localhost' IDENTIFIED BY '*****'"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* to 'vagrant'@'%' IDENTIFIED BY '*****'"
mysql -uroot -proot -e "FLUSH PRIVILEGES"

# Allow remote connections to mysql (don't do it like this in production)
MYSQLCONF=$(cat <<EOF

[mysqld]
bind-address        = 0.0.0.0
EOF
)
echo "${MYSQLCONF}" >> /etc/mysql/my.cnf

# Restart mysql
/etc/init.d/mysql restart

SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = 'ubuntu/bionic64'
    config.ssh.insert_key = false
    config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.network "forwarded_port", guest: 443, host: 8081
    config.vm.network "forwarded_port", guest: 3306, host: 3307

    # We do not want Vagrant picking the root directory
    config.vm.synced_folder ".", "/vagrant", disabled: true
    config.vm.synced_folder ".", "/home/#{APP_NAME}/public_html"

    # Provision runs only on the first "Vagrant up" command
    config.vm.provision 'shell', privileged: true, inline: @script

    config.vm.provider "virtualbox" do |vb|
        vb.customize ["modifyvm", :id, "--memory", "2048"]
        vb.customize ['modifyvm', :id, "--natdnshostresolver1", "on"]
        #vb.customize ["modifyvm", :id, "--name", "domain.com"]
    end
end