PDO-Verbindung funktioniert von der Kommandozeile aus, nicht aber durch den Apache?

Habe ich ein sehr einfaches test-script:

<?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";

}

?>

Wenn ich das Skript von der Kommandozeile, funktioniert es tadellos:

$ 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

Aber wenn ich auf die exakt gleiche Skript über meine web-browser, es sagt:

Could not connect to database, rawr. :-(

Ich habe versucht var_dump auf den Fehler und die Meldung: "SQLSTATE[HY000] [2003] Can' T connect to MySQL server on 'db.example.edu' (13)".

Dies ist rätselhaft. Es ist das exakt gleiche script auf dem genau gleichen server-warum funktioniert es, wenn ich es ausführen von der Befehlszeile aus, aber nicht, wenn Apache ausgeführt?

  • Ist dies ein Linux-server? Ist es Red Hat oder CentOS läuft SELinux? Wenn dem so ist, die Sie benötigen, um die SELinux-booleans httpd_can_network_connect und httpd_can_network_connect_db, damit Apache, um verbindungen zu einem remote-Datenbank-host.
  • weitere Informationen zu diesem Fehler (13 = permission denied) ist hier: filonov.com/blog/2009/08/07/...
  • Ja, es ist ein RHEL 6.1 server, und ein glänzendes neues an. Auch, @thetaiko -- das hat geklappt! Es war SELinux blockiert die Verbindung, und läuft setsebool -P httpd_can_network_connect=1 als root behoben. Wenn Sie buchen möchten, die als eine Antwort, ich werde es gerne annehmen und upvote.
InformationsquelleAutor Will Martin | 2011-11-15
Schreibe einen Kommentar