2013-03-11 22 views
24

Ich habe MySQL (5.5.23 Community Server), Apache (2.2) und PHP (5.3.13) auf einem Fedora 15-Rechner (64- Bit). Jeder funktioniert ohne Probleme für sich.PHP/Apache: PHP Schwerwiegender Fehler: Aufruf zu undefinierter Funktion mysql_connect()

Ich dachte, dass PHP für die Arbeit mit MySQL konfiguriert/kompiliert wurde, aber wenn ich versuche, eine PHP-Webseite zu laden, die einen MySQL-Aufruf macht, bekomme ich den oben genannten fatalen Fehler (im Apache-Fehlerprotokoll). PHP funktioniert alleine, über Apache und über die Kommandozeile.

Wenn ich php -i von der Kommandozeile aus starte, dann zeigt es wirklich alle MySQL Bits und Teile, aber wenn ich eine Seite mit phpinfo() lade, dann werden keine MySQL Module erwähnt.

Ich habe auch versucht, "extension = mysql.so" in php.ini zu kommentieren, aber PHP klagt dann mit "PHP Startup: Kann dynamische Bibliothek '/usr/lib64/php/modules/mysql.so'." nicht laden (obwohl das Modul dort residiert). Aber dann bin ich mir nicht ganz sicher, ob diese Zeile unkommentiert sein muss oder nicht. [Korrektur: Der angegebene Fehler war eigentlich auf einen Tippfehler zurückzuführen, aber das Ausführen von der Befehlszeile zeigt, dass das Modul sowieso schon geladen ist - da ist es eine Warnung von PHP, die das sagt.]

Ich habe auch SELinux deaktiviert, gestoppt/neu gestartet Apache mehrmals, yummed MySQL-Devel, falls es einen Unterschied machte, und, so scheint es, jede andere mögliche Sache.

Wenn ich ein kleines PHP-Testskript von der Kommandozeile aus benutze, um auf die MySQL-Datenbank zuzugreifen, dann funktioniert es problemlos, also weiß PHP nichts über MySQL, aber wenn es unter Apache läuft, scheint es keine Ahnung zu haben, dass MySQL überhaupt existiert .

Ich habe seit Monaten ein- und ausgeschaltet, um dieses Problem zu lösen, und scheinen alles versucht zu haben, aber nichts scheint zu funktionieren.

Ich habe nichts dagegen, PHP neu zu installieren, wenn ich wirklich muss, wenn jemand den richtigen Weg zur Konfiguration/Kompilierung mit MySQL-Unterstützung demonstrieren kann, damit ich es unter Apache arbeiten kann, obwohl ich idealerweise würde es einfach vorziehen, die bestehende Installation zum Laufen zu bringen.

Vielen Dank im Voraus für jede Hilfe!

+0

sind Sie sicher, dass dies das Modul Sie benötigen? 'msql.so'? Wie wäre es mit dem Versuch, das PDO-Modul zu laden? – Sebas

+0

Sie könnten zwei php.ini-Dateien zum Ändern haben. /etc/php5/apache2/php.ini und /etc/php5/cli/php.ini. –

+0

Versucht, pdo ebenfalls zu laden, aber den gleichen "unable to dynamic library" -Fehler zu bekommen. – Cheddar

Antwort

-4

Die mysql Deamon sollte laufen.

Wenn nicht versuchen Sie dies:

#/etc/init.d/mysql start 

Oder diese:

#service mysqld start 

Und wenn Sie wollen, dass MySQL beim Booten hinzuzufügen:

# chkconfig --add mysqld 
# chkconfig -- level 235 mysqld on 

Wenn ja, und es ist nach wie vor funktioniert nicht versuchen:

U ncomment die folgenden Zeilen in /etc/php/php.ini

extension=mysqli.so 
extension=mysql.so 

Und überprüfen Sie bitte Ihre Post über '/usr/lib64/php/modules/msql.so'. Es sollte sein mysql.so (wenn es falsch vertippt wird es ignorieren ...)

+0

Ja, habe das schon probiert. Neustart von MySQL und Apache, nur für den Fall. Trotzdem danke. – Cheddar

+6

Neustart des mysql-Servers wird nicht ändern, was mit den Client-Bibliotheken passiert –

+0

Nun, es ist ein Fall von etwas zu versuchen gerade jetzt ... – Cheddar

0

Die Apache-Modul PHP-Version könnte aus irgendeinem seltsamen Grund nicht die PHP abholen.ini-Datei als CLI-Version einen guten Blick zumin würde ich vorschlagen:

  • Differenzen bei den .ini Dateien, die zwischen php -i und phpinfo() über eine Webseite abweichen *
  • Wenn es keine Unterschiede sind dann aussehen bei den Berechtigungen von mysql.so und die .ini-Dateien, aber ich denke, dass Apache diese als root Benutzer parst

hier wirklich klar zu sein, gehen Sie nicht für php.ini Dateien im Dateisystem suchen, werfen Sie einen Blick auf das, was PHP sa ys, dass es

+0

Ich werde meinen Sherlock-Hut auf und überprüfen Sie, welche Unterschiede es gibt, und wieder hier, aber, wie für die Berechtigungen, dann habe ich irgendwie gedacht das gleiche wie du: Apache wird trotzdem als root parsen. Die Module haben alle Root-Besitzer/Gruppe und sind alle auf 755 eingestellt. – Cheddar

+0

Es wird nicht aufhören zu arbeiten, aber die Module müssen nicht das Exec-Bit gesetzt haben, so 644 ist in Ordnung. –

+0

Okay, gut zu wissen. Nun, ich bin schon ein wenig verwirrt, wenn ich versuche, die Ausgabe zu vergleichen. Sowohl bei php -i als auch bei phpinfo() wird die Konfigurationsdatei als /etc/php.ini angegeben, mit der ich gerade gespielt habe, und ist die einzige, die mir bekannt ist. Mit php -i zeigt die Kompilierungsinfo jedoch, dass sie mit mysql und anderen verwandten Modulen kompiliert wurde (zB pdo, etc), aber phpinfo() zeigt kompiliert ohne (... '--without-mysql' '- ohne-gd '' --disable-dom '' --disable-dba '' --ohne-unixODBC '' --disable-pdo '... etc.); Zu Ihrer Information: Es gibt nur eine Instanz von MySQL und Apache auf dem Server. – Cheddar

2

Ich hatte das gleiche Problem und musste auf die php manual beziehen, die mir sagte, die mysql und mysqli Erweiterungen erfordern libmysql.dll zu laden. Ich habe es unter C: \ windows \ system32 (Windows 7) gesucht und konnte nicht finden, also habe ich es heruntergeladen here und legte es in meinem C: \ windows \ system32. Ich habe Apache neu gestartet und alles hat gut funktioniert. Nahm mich 3 Tage um herauszufinden, hoffe es hilft.

63

Falls jemand anders damit konfrontiert wird, hat PHP keinen Zugriff auf die MySQL-Clientbibliotheken. Einen MySQL-Server auf dem System zu haben ist nicht die richtige Lösung. Fix für Ubuntu (und PHP 5):

Nach der Installation des Clients sollte der Webserver neu gestartet werden. Wenn Sie Apache verwenden, sollte folgendes funktionieren:

sudo service apache2 restart 
+9

Sie müssen dann 'sudo service apache2 restart' danach –

+3

Das gleiche Problem auf einer RHEL/CEntOS-Box konnte mit dem Befehl' yum install php-m behoben werden ysqli' –

+0

@Taco erwähnte, dass Sie auf anderen Systemen sudo apt-get install php-mysql verwenden können – andreimarinescu

-3

Ich hatte eine ähnliche Fehlermeldung erhalten. Ich glaube, ich habe am Anfang der ersten Zeile der php.ini-Datei versehentlich "9o" eingegeben. Sobald ich das entfernte, erhielt ich nicht mehr die "fatalen Fehler" -Meldungen. Hoffe das hilft.

16

Beachten Sie, dass ab PHP 5.5.0 die mysql_connect() Funktion ist veraltet und wird vollständig entfernt in PHP 7

Mehr Infos auf der php documentation finden:

Zitat:

Warning
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
* mysqli_connect()
* PDO::__construct()

0

Wie Bout

sudo yum install php-mysql

oder

sudo apt-get install php5-mysql

Verwandte Themen