You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS 13 Ventura下PHP通过Apache无法连接PostgreSQL但命令行可访问

解决MacOS 13 Ventura下PHP连接PostgreSQL超时问题

问题背景

在MacOS 13 Ventura系统中,已安装PHP 8.2.10及通过Postgres.app安装的PostgreSQL 16,数据库可通过命令行正常查询,浏览器也能正常显示phpinfo()页面,但运行PHP脚本查询数据库时出现超时错误:页面加载时服务器连接已重置。

用户提供的PHP脚本

<?php
$host        = "host = 127.0.0.1";
$port        = "port = 5432";
$dbname      = "dbname = DBNAME";
$credentials = "user = USER password = PASS";

$conn = pg_connect( "$host $port $dbname $credentials"  );
if(!$conn) {
  echo "Error : Unable to open database".PHP_EOL;
} else {
  echo "Opened database successfully".PHP_EOL;
}

?>

用户对Apache httpd.conf的修改

  • 取消注释:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
  • 修改内容:
ServerName localhost

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>
  • 添加内容:
#PHP
PHPIniDir "/usr/local/etc/php/8.2/php.ini"
LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so "Vlad Atanasiu Myself"
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

解决步骤

1. 确认PHP的PostgreSQL扩展已启用

  • 打开PHP配置文件 /usr/local/etc/php/8.2/php.ini,找到以下两行,确保前面没有注释符;:
    extension=pgsql
    extension=pdo_pgsql
    
  • 保存文件后重启Apache:
    sudo apachectl restart
    
  • 刷新phpinfo页面,搜索pgsql关键字,确认扩展已成功加载。

2. 检查PostgreSQL监听配置

  • 打开Postgres.app对应的PostgreSQL配置文件(路径通常为 ~/Library/Application Support/Postgres/var-16/postgresql.conf)
  • 找到listen_addresses参数,确保其值为'*'或'127.0.0.1'(允许本地网络连接),而不是仅局限于本地套接字
  • 确认port参数设置为5432
  • 重启Postgres.app使配置生效

3. 优化数据库连接字符串

当前连接字符串格式存在多余空格,可能导致解析异常,建议简化为:

$conn = pg_connect("host=127.0.0.1 port=5432 dbname=DBNAME user=USER password=PASS");

4. 验证Apache运行用户的数据库访问权限

MacOS下Apache默认以_www用户运行,需确认该用户能正常连接PostgreSQL:

  • 在终端执行以下命令,模拟Apache用户连接数据库:
    sudo -u _www psql -h 127.0.0.1 -U USER DBNAME
    
  • 输入密码后若能成功连接,说明权限无问题;若连接失败,需调整PostgreSQL的用户权限或pg_hba.conf配置。

5. 查看错误日志定位问题

  • Apache错误日志:路径为 /var/log/apache2/error_log,可查看服务器层面的连接异常信息
  • PHP错误日志:若未启用,先在php.ini中添加以下配置并重启Apache:
    error_log = /usr/local/var/log/php/8.2/php_error.log
    
    运行出错的PHP脚本后,查看日志获取更详细的错误原因。

内容的提问来源于stack exchange,提问作者Vlad Atanasiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:35:29