【发布时间】:2019-10-17 21:48:56
【问题描述】:
我在新的 Ubuntu 18.04 服务器上为 Postgres 安装了 php,但我遇到了 php 问题。以下是我的 php 7.3 安装步骤:
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php]
sudo systemctl restart apache2
安装 PHP 7.3 后,我安装了 pgsql。
sudo apt install php-pgsql
sudo service apache2 reload
接下来我编辑了 /etc/php/7.3/apache2 中的 php.ini 文件,并从以下几行中删除了分号:
extension=pdo_pgsql
extension=pgsql
我保存了文件并 sudo systemctl restart apache2.
最后我启用了模块:
sudo phpenmod -v 7.3 pgsql
sudo phpenmod -v 7.3 pdo_pgsql
sudo systemctl restart apache2
然后我创建了一个脚本来使用 pdo 登录到我的 Postgres 数据库(登录凭据在此处替换为占位符值。)
<?php
$params = [
'host' => '[IP Address]',
'user' => '[username]',
'pwd' => '[password]',
'db' => '[dbname]'
];
$dsn = sprintf('pgsql:host=%s;dbname=%s;user=%s;password=%s',
$params['host'],
$params['db'],
$params['user'],
$params['pwd']);
try {
$dsn = sprintf('pgsql:host=%s;dbname=%s;unix_socket=%s',
$params['host'], $params['db'], $params['sock']);
$opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
$pdo = new PDO($dsn, $params['user'], $params['pwd'], $opts);
} catch (PDOException $e) {
echo $e->getMessage();
} catch (Throwable $e) {
echo $e->getMessage();
}
?>
但 Firefox 开发控制台回显:“找不到驱动程序。”
一个线索是 php 7.3 在 /etc/apache2/mods-available 中,但它不在 /etc/apache2/mods-enabled 中,这表明它没有启用。但是当我尝试 phpenmod -v 7.3 php7.3.conf 时,我得到:警告:模块 php7.3.conf ini 文件在 /etc/php/7.3/mods-available 下不存在。
我已经对此进行了大量研究,这些都是要遵循的步骤。大部分研究都是针对 MySQL 的,但这对 PDO 来说并不重要。
感谢您对我收到“找不到驱动程序”消息的原因提出任何想法。
更新:
我创建了一个脚本来运行 phpinfo():
<?php
ob_start();
phpinfo();
$info = ob_get_clean();
echo $info;
?>
但它只返回 html 代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #fff; color: #222; font-family: sans-serif;}
pre {margin: 0; font-family: monospace;}
a:link {color: #009; text-decoration: none; background-color: #fff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse; border: 0; width: 934px; box-shadow: 1px 2px 3px #ccc;}
.center {text-align: center;}
.center table {margin: 1em auto; text-align: left;}
.center th {text-align: center !important;}
td, th {border: 1px solid #666; font-size: 75%; vertical-align: baseline; padding: 4px 5px;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccf; width: 300px; font-weight: bold;}
.h {background-color: #99c; font-weight: bold;}
.v {background-color: #ddd; max-width: 300px; overflow-x: auto; word-wrap: break-word;}
.v i {color: #999;}
img {float: right; bo…
jquery.min.js line 2 > eval:12:21
?
但这不是我所期望的。
【问题讨论】:
-
基于您看到的驱动程序错误消息,而不是 PHP 代码文本,Apache 似乎正在加载 PHP。听起来您可能安装了多个版本的 PHP,而 Apache 加载了与 7.3 不同的版本。建议查看How to check the presence of php and apache on ubuntu server through ssh 看看是否有帮助。即:
a2enmod php7.3 -
删除输出缓冲,只将
<?php phpinfo(); exit;放入info.php并在浏览器中导航到它。您还需要使用a2dismod php7.2来禁用 PHP 7.2,然后使用a2enmod php7.3在 Apache 中切换到 php 7.3。 -
php5的有趣冲突然后你需要做a2dismod php5。 -
是的,你的
DSN里面有unix_socket,而你的params['socket']不见了,在不知道你的数据库服务器是如何配置的情况下无法解决这个问题。 (端口或套接字) -
您的 DSN(数据库源名称)是
pgsql:host=%s;dbname=%s;unix_socket=%s请参阅:php.net/manual/en/ref.pdo-pgsql.connection.php 所以您可以将其更改为pgsql:host=%s;dbname=%s;user=%s;password=%s
标签: php postgresql ubuntu pdo