php - 连接数据库错误类型 : 2002: Permission denied

标签 php mysql curl selinux

我正在尝试使用以下脚本(cxn-test.php)连接数据库

<?php
$host = '155.30.136.20';//dummy ip 
$user = 'abc_user';
$pass = 'xxxxxxxxx';
$dbname = 'welcome';
$link = mysqli_connect($host, $user, $pass,$dbname);
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}else {
    echo "success" . PHP_EOL;
}

当我在终端上尝试时

php cxn-test.php //success

但是当我在本地主机上尝试时,出现以下错误,

curl -s http://localhost/cxn-test.php

错误:无法连接到 MySQL。 调试错误号:2002 调试错误:权限被拒绝

这是一个奇怪的问题,它在本地主机上不起作用,但在命令行上运行良好。

最佳答案

在获得运行 SELinux 的新 CentOS 7 机器后,我遇到了同样的问题。我可以从命令行连接到我的远程 MySQL 数据库服务器,但 Drupal(和测试 PHP 脚本)不能。

问题原来是 SELinux 安全策略。

默认情况下,策略 httpd_can_network_connect_db 被禁用(意味着您的网络服务器无法联系远程数据库。)

通过以下方式检查:

getsebool -a | grep httpd

如果 httpd_can_network_connect_db 关闭,通过以下方式启用它:

setsebool -P httpd_can_network_connect_db 1

(-P 标志使更改永久生效,因此设置在重新启动后仍然存在。)

关于php - 连接数据库错误类型 : 2002: Permission denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41178774/

相关文章:

java - 如何根据数据库中已输入的值自动增加employeeID?

mysql - SQL 查询改进 - 仅当 A>B 时才选择 X,其中 A 和 B 值在变量的范围内

linux - 如何列出系统上可用的 target_link_libraries?

javascript - 如何在html表格中添加动态行?

现实世界中的 PHP 编码!!!我需要学习任何框架吗?

php - SQL 仅显示可用记录(3 个表)

java - 使用JDBC向MySQL插入数据

php - htaccess 正则表达式 vs php 手动参数解析

linux - curl 同时下载和上传相同的文件

php - Atlassian Confluence 基本登录 API 不工作 : Page Not Found