PHP Fatal error: Class PDO not found (mysql/Docker)
PHP Fatal error: Class PDO not found (mysql/Docker)
我正在尝试通过 PDO 创建 MySQL 数据库连接,但收到错误消息:
Fatal error: Uncaught Error: Class 'PDO' not found in /home/vcap/app/htdocs/db.php:18 Stack trace: #0 {main} thrown in /home/vcap/app/htdocs/db.php on line 18
这似乎暗示未安装 PDO,但 phpinfo 显示 mysql(i) pdo 处于活动状态。
db.php:
<?php
use PDO;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$db = getenv()["VCAP_SERVICES"];
$db_parsed = json_decode($db)->{'p.mysql'}[0]->credentials;
//var_dump($db_parsed);
$servername = $db_parsed->hostname;
$dbusername = $db_parsed->username;
$dbpassword = $db_parsed->password;
$dbname = $db_parsed->name;
// Create connection
$conn = new \PDO("mysql:host=$servername;dbname=$dbname", $dbusername, $dbpassword);
$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
?>
php 信息:
./configure' '--disable-static' '--enable-shared' '--enable-ftp=shared' '--enable-sockets=shared' '--enable-soap=shared' '--enable-fileinfo=shared' '--enable-bcmath' '--enable-calendar' '--enable-intl' '--with-kerberos' '--with-bz2=shared' '--with-curl=shared' '--enable-dba=shared' '--with-password-argon2=/usr/lib/x86_64-linux-gnu' '--with-cdb' '--with-gdbm' '--with-mysqli=shared' '--enable-pdo=shared' '--with-pdo-sqlite=shared,/usr' '--with-pdo-mysql=shared,mysqlnd' '--with-pdo-pgsql=shared' '--with-pgsql=shared' '--with-pspell=shared' '--with-gettext=shared' '--with-gmp=shared' '--with-imap=shared' '--with-imap-ssl=shared' '--with-ldap=shared' '--with-ldap-sasl' '--with-zlib=shared' '--with-libzip=/usr/local/lib' '--with-xsl=shared' '--with-snmp=shared' '--enable-mbstring=shared' '--enable-mbregex' '--enable-exif=shared' '--with-openssl=shared' '--enable-fpm' '--enable-pcntl=shared' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-sysvmsg=shared' '--enable-shmop=shared' '--prefix=/tmp/build/391e1b0b/binary-builder/ports/x86_64-linux-gnu/php/7.3.28'
Docker 文件:
FROM composer:2.0.11 AS composer
FROM php:7.3-apache-stretch
RUN apt-get update && apt-get -y install -y libgmp-dev git && docker-php-ext-install gmp
RUN apt-get install -y libzip-dev zip && docker-php-ext-install zip
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
RUN composer install
COPY . .
RUN composer dump-autoload --no-scripts --no-dev --optimize
RUN chmod -R 755 /var/www/html/
当我使用 CloudFoundry 时,没有使用 Dockerfile。
我发现修复正在添加一个新文件:
.bp-config/options.json
{
"WEBDIR": "public",
"PHP_EXTENSIONS": ["gd", "pdo", "mysql", "pdo_mysql"]
}
我正在尝试通过 PDO 创建 MySQL 数据库连接,但收到错误消息:
Fatal error: Uncaught Error: Class 'PDO' not found in /home/vcap/app/htdocs/db.php:18 Stack trace: #0 {main} thrown in /home/vcap/app/htdocs/db.php on line 18
这似乎暗示未安装 PDO,但 phpinfo 显示 mysql(i) pdo 处于活动状态。
db.php:
<?php
use PDO;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$db = getenv()["VCAP_SERVICES"];
$db_parsed = json_decode($db)->{'p.mysql'}[0]->credentials;
//var_dump($db_parsed);
$servername = $db_parsed->hostname;
$dbusername = $db_parsed->username;
$dbpassword = $db_parsed->password;
$dbname = $db_parsed->name;
// Create connection
$conn = new \PDO("mysql:host=$servername;dbname=$dbname", $dbusername, $dbpassword);
$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
?>
php 信息:
./configure' '--disable-static' '--enable-shared' '--enable-ftp=shared' '--enable-sockets=shared' '--enable-soap=shared' '--enable-fileinfo=shared' '--enable-bcmath' '--enable-calendar' '--enable-intl' '--with-kerberos' '--with-bz2=shared' '--with-curl=shared' '--enable-dba=shared' '--with-password-argon2=/usr/lib/x86_64-linux-gnu' '--with-cdb' '--with-gdbm' '--with-mysqli=shared' '--enable-pdo=shared' '--with-pdo-sqlite=shared,/usr' '--with-pdo-mysql=shared,mysqlnd' '--with-pdo-pgsql=shared' '--with-pgsql=shared' '--with-pspell=shared' '--with-gettext=shared' '--with-gmp=shared' '--with-imap=shared' '--with-imap-ssl=shared' '--with-ldap=shared' '--with-ldap-sasl' '--with-zlib=shared' '--with-libzip=/usr/local/lib' '--with-xsl=shared' '--with-snmp=shared' '--enable-mbstring=shared' '--enable-mbregex' '--enable-exif=shared' '--with-openssl=shared' '--enable-fpm' '--enable-pcntl=shared' '--enable-sysvsem=shared' '--enable-sysvshm=shared' '--enable-sysvmsg=shared' '--enable-shmop=shared' '--prefix=/tmp/build/391e1b0b/binary-builder/ports/x86_64-linux-gnu/php/7.3.28'
Docker 文件:
FROM composer:2.0.11 AS composer
FROM php:7.3-apache-stretch
RUN apt-get update && apt-get -y install -y libgmp-dev git && docker-php-ext-install gmp
RUN apt-get install -y libzip-dev zip && docker-php-ext-install zip
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
RUN composer install
COPY . .
RUN composer dump-autoload --no-scripts --no-dev --optimize
RUN chmod -R 755 /var/www/html/
当我使用 CloudFoundry 时,没有使用 Dockerfile。 我发现修复正在添加一个新文件:
.bp-config/options.json
{
"WEBDIR": "public",
"PHP_EXTENSIONS": ["gd", "pdo", "mysql", "pdo_mysql"]
}