我有一个非常简单的测试脚本:PDO连接从命令行运行,但不通过Apache?
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=search_data";
try {
$DB = new PDO($DSN, "username", "super-secret-password!");
} catch (PDOException $e) {
header('Content-Type: text/plain');
print "Could not connect to database, rawr. :-(";
exit;
}
$SQL = "SELECT phrase FROM search ORDER BY RAND() LIMIT 10";
foreach($DB->query($SQL) as $row){
print $row['phrase']."\n";
}
?>
当我执行命令行这个脚本,它完美的作品:
$ php test.php
corporal punishment
Stretches
voluntary agencies and the resettlement of refugees
music and learning
Nike Tiger Woods Scandal
Hermeneia
PSYCHINFO
anthony bourdain
Black-White Couples and their Social Worlds
colonization, hodge
但是当我通过网络浏览器访问完全相同的脚本,它说:
Could not connect to database, rawr. :-(
我的错误尝试var_dump
,消息是:“SQLSTATE [HY000] [2003]无法连接到MySQL服务器' db.example.edu'(13)“。
这是令人费解的。它是完全相同的服务器上的完全相同的脚本 - 为什么当我从命令行执行它时会工作,但在Apache执行它时会失败?
这是Linux服务器吗?运行SELinux的是Red Hat还是CentOS?如果是这样,您可能需要启用SELinux布尔型'httpd_can_network_connect'和'httpd_can_network_connect_db'以允许Apache建立到远程数据库主机的连接。 –
有关此错误的更多信息(13 =权限被拒绝)在此处:http://www.filonov.com/blog/2009/08/07/sqlstatehy000-2003-cant-connect-to-mysql-server-on-xxx -xxx-xxx-xxx-13/ – thetaiko
@Michael是的,它是一个RHEL 6.1服务器,并且是一个闪亮的新服务器。另外,@thetaiko - 工作!这是SELinux阻止连接,并以root身份运行'setsebool -P httpd_can_network_connect = 1'来修复它。如果你想发布这个答案,我会很乐意接受和赞成。 –