测试类似 LAMP 的应用程序,失败并显示:
SQLSTATE[08006] [7] 连接到套接字“/tmp/.s.PGSQL.5432”上的服务器失败:没有这样的文件或目录
经过大量故障排除后,我被难住了。我可能不得不重新安装 Linux 来解决我因盲目破解而引入的任何问题。在我这样做之前,有什么方法可以调试它以找到根本原因吗?
这是我的灯箱:
这是我迄今为止尝试过的:
[xxx@mybox~]$ sudo ls -al /tmp/.s.*
srwxrwxrwx. 1 postgres postgres 0 Nov 28 12:10 /tmp/.s.PGSQL.5432
-rw-------. 1 postgres postgres 48 Nov 28 12:10 /tmp/.s.PGSQL.5432.lock
php /var/www/html/lamp/connect.php
curl http://localhost/lamp/connect.php
SQLSTATE[08006] [7] 连接到套接字“/tmp/.s.PGSQL.5432”上的服务器失败:没有这样的文件或目录 服务器是否在本地运行并接受该套接字上的连接?
测试文件connect.php。使用PDO连接Postgresql:
<?php
require_once 'config.php';
function connect(string $host, string $db, string $user, string $password): PDO
{
try {
$dsn = "pgsql:host=/tmp;port=5432;dbname=$db";
// make a database connection
return new PDO(
$dsn,
$user,
$password,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
} catch (PDOException $e) {
die($e->getMessage());
}
}
return connect($host, $db, $user, $password);
我确实找到了与该问题直接相关的审核日志通知,使用 sealert 来允许所需的访问。那行不通。我禁用了修复模块,可能已经搞砸了 SE,因为我再也找不到拒绝的信息了。关闭 SE 和防火墙也不起作用。
[peter@fedora ~]$ getenforce
Permissive
$ firewall-cmd --state
not running
尝试从 DSN 中删除
host=
和 port=
。 AFAIK 这将使 PDO 连接到本地套接字:
$dsn = "pgsql:dbname=$db";