Page 1 of 1

PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 14:18
by andreas franke
Hallo,
ich habe hier auf einem Suse 9.3 System PHP 5.1.4 als CGI kompiliert und installiert. Alles funktioniert nun schon eine ganze Weile ohne Probleme. Heute ist mir aufgefallen das die PDO-Extension nicht mit MySQL zu laufen scheint (Fatal Error). Daraufhin habe ich mir meine PHP Konfiguration noch einmal angeschaut und dabei entdeckt, daß der PDO-Support zwar enabled ist, aber nur der sqlite 2 driver installiert zu sein scheint. Wie kann ich das ändern? Hat jemand einen Tipp?

MfG Andreas

Meine PHPinfo: http://gluecksritter.doc4pc.de/phpinfo.php

Mein PDO-Code:

Code: Select all

function OpenDB ($dsn){
			try{
				$this->db = new PDO($dns);
			}
			
			catch(PDOExeption $e){
				echo "Fehler beim öffnen der Datenbank";
			}
		}

function CreateMenuFromDB (){
			OpenDB ("mysql:host=localhost;dbname=xxxx");
			
		}

Die Fehlermeldung, welche beim Aufruf von PDO-Funktionen erscheit:

Code: Select all

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in /home/httpd/vhosts/doc4pc.de/subdomains/gluecksritter/httpdocs/css-dopdown.class.php:122 Stack trace: #0 /home/httpd/vhosts/doc4pc.de/subdomains/gluecksritter/httpdocs/css-dopdown.class.php(122): PDO->__construct('') #1 /home/httpd/vhosts/doc4pc.de/subdomains/gluecksritter/httpdocs/css-dopdown.class.php(113): CSSMenuBuilder->OpenDB('mysql:host=loca...') #2 /home/httpd/vhosts/doc4pc.de/subdomains/gluecksritter/httpdocs/css-dopdown.class.php(207): CSSMenuBuilder->CreateMenuFromDB() #3 {main} thrown in /home/httpd/vhosts/doc4pc.de/subdomains/gluecksritter/httpdocs/css-dopdown.class.php on line 122
Mein PHP configure:

Code: Select all

make distclean

./configure 
--prefix=/usr 
--with-config-file-path=/etc/php5 
--with-_lib=lib64 
--enable-cli 
--enable-bcmath 
--enable-calendar 
--enable-ctype 
--enable-dbase 
--enable-discard-path 
--enable-exif 
--enable-filepro 
--enable-force-cgi-redirect 
--enable-discard-path 
--enable-ftp 
--enable-inline-optimization 
--enable-magic-quotes 
--enable-memory-limit 
--enable-safe-mode 
--enable-shmop 
--enable-sigchild 
--enable-track-vars 
--enable-trans-sid 
--enable-wddx 
--enable-sqlite 
--enable-php-streams 
--with-pear 
--with-pspell 
--with-bz2 
--with-dom=/usr/include/libxml2 
--with-ftp 
--with-gdbm 
--with-gettext 
--with-gd 
--with-zlib-dir=/usr/include 
--with-jpeg-dir=/usr/include 
--with-png-dir=/usr/include 
--with-freetype2=/usr/include/freetype2 
--with-freetype-dir 
--with-mysql=/usr 
--with-mhash 
--with-mcrypt 
--with-curl 
--enable-pdo 
#--with-imagick 
#--with-t1lib=/usr/include 

make && make install


Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 14:33
by stefanpropehan
Du hast das Problem das kein "mySQL PDO" Treiber vorhanden ist, sagt jedenfalls deine "phpinfo".

Kompiliere PDO mal als "shared" dazu und installiere dann den entsprechenden Treiber über das PECL nach.

Code: Select all

--enable-pdo=shared
--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 14:54
by andreas franke
Hallo Stefan,
stefanpropehan wrote:Du hast das Problem das kein "mySQL PDO" Treiber vorhanden ist, sagt jedenfalls deine "phpinfo".

Kompiliere PDO mal als "shared" dazu und installiere dann den entsprechenden Treiber über das PECL nach.

Code: Select all

--enable-pdo=shared
--
Stefan
wenn ich mit

Code: Select all

--enable-pdo=shared
bekomme ich beim ./configure folgende Fehlermeldung:

Code: Select all

checking for sqlite support... yes
checking whether to enable UTF-8 support in sqlite (default: ISO-8859-1)... no
checking for PDO includes... checking for PDO includes... /home/INSTALL/php-5.1.4/ext
checking for lemon... no
configure: warning: lemon versions supported for regeneration of libsqlite parsers: 1.0 (found: none).
configure: error:
You've configured extension sqlite to build statically, but it
depends on extension pdo, which you've configured to build shared.
You either need to build sqlite shared or build pdo statically for the
build to be successful.
Meine jetziges ./configure:

Code: Select all

make distclean

./configure 
--prefix=/usr 
--with-config-file-path=/etc/php5 
--with-lib=lib64 
--enable-cli 
--enable-bcmath 
--enable-calendar 
--enable-ctype 
--enable-dbase 
--enable-discard-path 
--enable-exif 
--enable-filepro 
--enable-force-cgi-redirect 
--enable-discard-path 
--enable-ftp 
--enable-inline-optimization 
--enable-magic-quotes 
--enable-memory-limit 
--enable-safe-mode 
--enable-shmop 
--enable-sigchild 
--enable-track-vars 
--enable-trans-sid 
--enable-wddx 
--enable-sqlite=shared 
--enable-pdo=shared 
--enable-php-streams 
--with-pear 
--with-pspell 
--with-bz2 
--with-dom=/usr/include/libxml2 
--with-ftp 
--with-gdbm 
--with-gettext 
--with-gd 
--with-zlib-dir=/usr/include 
--with-jpeg-dir=/usr/include 
--with-png-dir=/usr/include 
--with-freetype2=/usr/include/freetype2 
--with-freetype-dir 
--with-mysql=/usr 
--with-mhash 
--with-mcrypt 
--with-curl 
--with-imagick 
Muß ich das verstehen? Ich habe sqlite doch auch als shared gekennzeichnet.

Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 15:05
by stefanpropehan
Mache mal vorher ein "make mrproper", damit sollte dann alles vergessen was du vorher an Einstellungen getätigt hast.

Edit:
Es sollte sowieso leichter sein die gesamten Extensions später über das pecl nach zu installieren.

--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 15:34
by andreas franke
stefanpropehan wrote:Mache mal vorher ein "make mrproper", damit sollte dann alles vergessen was du vorher an Einstellungen getätigt hast.

Edit:
Es sollte sowieso leichter sein die gesamten Extensions später über das pecl nach zu installieren.

--
Stefan
Hab ich gemacht, aber hat nichts genützt, vermute mal das liegt eher an dieser "lemon"-Geschichte. Hast Du eine Ahnung was das ist und wo es sich verstecken könnte?

Mit pecl habe ich so meine Problemchen gehabt. Wollte mit

Code: Select all

pecl install pdo
installieren aber das pecl meinte dazu:

Code: Select all

p15198036:/home/INSTALL/php-5.1.4 # pecl install pdo
downloading PDO-1.0.3.tgz ...
Starting to download PDO-1.0.3.tgz (52,613 bytes)
.............done: 52,613 bytes

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 92160 bytes) in /usr/lib/php/PEAR/PackageFile/v2/Validator.php on line 1831
Habe dann

Code: Select all

pear install pecl/pdo
versucht, da gab's die folgende Meldung:

Code: Select all

p15198036:/home/INSTALL/php-5.1.4 # pear install pecl/pdo
PHP Warning:  PHP Startup: Unable to load dynamic library './/usr/lib/php/extensions/no-debug-non-zts-20050922/pdo.so' - .//usr/lib/php/extensions/no-debug-non-zts-20050922/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library './/usr/lib/php/extensions/no-debug-non-zts-20050922/pdo_mysql.so' - .//usr/lib/php/extensions/no-debug-non-zts-20050922/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
downloading PDO-1.0.3.tgz ...
Starting to download PDO-1.0.3.tgz (52,613 bytes)
.............done: 52,613 bytes
12 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025
ERROR: `phpize' failed
Habe auch folgendes versucht:

Code: Select all

pear download pecl/pdo
tar xvfz PDO-1.0.3.tgz
cd PDO-1.0.3
phpize
./configure
make
make install 
Irgendwie dreh ich mich hier im Kreis.

Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 15:53
by andreask2
stefanpropehan wrote:Kompiliere PDO mal als "shared" dazu und installiere dann den entsprechenden Treiber über das PECL nach.

Code: Select all

--enable-pdo=shared
Warum - wenn ich fragen darf?

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 15:53
by stefanpropehan
Mhh mit dieser "lemon" Geschichte kann ich dir auch nicht so richtig weiter helfen (ist auf jeden Fall ein Teil von SQL Lite, evtl ist sql lite nicht als shared gebaut?).

Code: Select all

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 92160 bytes) in /usr/lib/php/PEAR/PackageFile/v2/Validator.php on line 1831 
Diesen Fehler hättest du leicht mit hochstellen des Wertes "memory_limit" von "8M" auf "16M" in der "php.ini" beheben können.

--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 15:58
by stefanpropehan
andreask2 wrote:

Code: Select all

--enable-pdo=shared
Warum - wenn ich fragen darf?
1. Da sonst die passenden Treiber über das PECL nicht nach installiert werden können. PDO Statisch sollte ja nicht mit shared PDO Treibern (pdo-mysql) aus dem pecl laufen.

2. Ich baue alles nur "shared" dazu, damit nicht jedesmal das PHP neu kompiliert werden muss, wenn updates für die entsprechenden Extensions da sind.

Edit:
Ich lasse mich natürlich gerne eines besseren belehren.

--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 16:08
by andreas franke
stefanpropehan wrote:Mhh mit dieser "lemon" Geschichte kann ich dir auch nicht so richtig weiter helfen (ist auf jeden Fall ein Teil von SQL Lite, evtl ist sql lite nicht als shared gebaut?).

Code: Select all

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 92160 bytes) in /usr/lib/php/PEAR/PackageFile/v2/Validator.php on line 1831 
Diesen Fehler hättest du leicht mit hochstellen des Wertes "memory_limit" von "8M" auf "16M" in der "php.ini" beheben können.

--
Stefan
memory_limit (ist derzeit auf 128M eingestellt) kann ich so hoch setzten wie ich will. Das hochsetzen in der php.ini scheint bei anderen Forum-Usern auch keinen Effekt zuhaben. Daher kam der Tipp aus diesem Forum mit dem "händischen" Download wie ich gerade oben mitbeschrieben habe. Das scheint auch zu klappen aber hatte für mich kein Effekt, da sobald ich

Code: Select all

--enable-pdo=shared 
benutze diese dämliche lemon Geschichte angemeckert wird...

Gruß
Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 16:15
by andreas franke
stefanpropehan wrote:Mhh mit dieser "lemon" Geschichte kann ich dir auch nicht so richtig weiter helfen (ist auf jeden Fall ein Teil von SQL Lite, evtl ist sql lite nicht als shared gebaut?).
Achso, sqlite habe ich nicht selbst gebaut, ist das ganz normal in PHP 5.1.4 integrierte. Oder hab ich Dich da falsch verstanden?

MfG
Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 16:16
by andreask2
Andreas Franke wrote:Habe auch folgendes versucht:

Code: Select all

pear download pecl/pdo
tar xvfz PDO-1.0.3.tgz
cd PDO-1.0.3
phpize
./configure
make
make install 
Wieso willst Du PDO installieren - das hast Du doch schon!

Erstmal musst Du Dir bewußt sein, dass PDO nicht nur aus der PDO-Extension besteht, sondern benötigt Treiber (das sind jeweils eigene PHP-Extensions) für die verschiedenen Datenbanken um zu funktionieren, was Du also brauchst ist PDO_MYSQL.

Du hast 2 Möglichkeiten das zu installieren:

1. PDO und die Treiber befinden sich im Archiv des PHP-Quelltextes. Wenn Du die entsprechenden Extensions direkt mit PHP installieren willst, kannst beim ./configure Befehl sowas wie

Code: Select all

--enable-pdo --with-pdo-mysql
verwenden.

Siehe auch: http://de3.php.net/pdo#pdo.installation

2. Kannst Du es über PECL installieren. Das CVS von pecl-pdo und ext/pdo sind per symlink auf dem php.net Server verbunden, enthalten also denselben Code. Nur die Releases finden zu unterschiedlichen Zeitpunkten/Versionsständen statt.

Wie Du PECL-Extensions installierst steht im Manual:
http://de3.php.net/install.pecl

Bei neueren PEAR-Versionen sollte man nicht mehr den "pear" Befehl verwenden, sondern den "pecl" Befehl!


Grüße
Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 16:25
by stefanpropehan
andreask2 wrote:1. PDO und die Treiber befinden sich im Archiv des PHP-Quelltextes. Wenn Du die entsprechenden Extensions direkt mit PHP installieren willst, kannst beim ./configure Befehl sowas wie
So muss er allerdings, wenn er einen weitern PDO Treiber haben möchte jedesmal PHP neu bauen.

--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 16:43
by andreask2
stefanpropehan wrote:
andreask2 wrote:

Code: Select all

--enable-pdo=shared
Warum - wenn ich fragen darf?
1. Da sonst die passenden Treiber über das PECL nicht nach installiert werden können. PDO Statisch sollte ja nicht mit shared PDO Treibern (pdo-mysql) aus dem pecl laufen.
Das stimmt zumindest nach meiner Erfahrnung so nicht. Es kann höchstens zu Problemen mir unterschiedlichen PDO-API Versionen kommen, aber das Problem hat man auch bei verschieden alten PECL oder ext/pdo Paketen. Ich habe jedenfalls schon einen shared PDO-Treiber mit einem einkompilierten PDO verwendet. War allerdings eher eine Notlösung in einer shared-hosting Umgebung.

Meiner Erfahrung nach kann man man PECL und php-ext Pakete mischen - basieren in diesem Fall ja schließlich auch auf demselben Quellcode. Genau so kann man static und shared extensions mischen. Worauf man achten muss ist dass PDO vor den Treibern geladen wird, und dass die PDO-API Version stimmt.

Ob das jetzt sinnvoll ist steht natürlich auf einem anderen Blatt. Es sollte ja so sein dass PDO und desen Treiber früher über PECL aktualisiert werden sollen, allerdings ist das bis heute eher umgekehrt. Allerdings sind für PHP 5.2 in PDO einige Neuerungen geplant, ich hoffe dass man dann demnächst ein paar neuere PECL-Pakete für PHP 5.1 bekommt.
stefanpropehan wrote:2. Ich baue alles nur "shared" dazu, damit nicht jedesmal das PHP neu kompiliert werden muss, wenn updates für die entsprechenden Extensions da sind.
Dieses Argument höre ich öfter, aber wie sieht das praktisch bei Dir aus? Dass es für PHP-Extensions von PHP selbst unabhängige Release-Zyklen in PECL gibt, ist bei PDO eine von wenigen Ausnahme. Aktualisierst Du bei einem neuen PHP-Release also nur ein paar Extensions, oder beobachtest Du das PHP-CVS und kompilierst Extensions bei wichtigen Änderungen aus dem CVS neu? Oder wie muss ich mir das vorstellen?

Abgesehen davon bringen shared extensions meiner Erfahrung nach vor allem bei CGI durchaus einen gewissen Performance-Nachteil mit sich.


Grüße
Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 17:21
by stefanpropehan
andreask2 wrote:Dieses Argument höre ich öfter, aber wie sieht das praktisch bei Dir aus? Dass es für PHP-Extensions von PHP selbst unabhängige Release-Zyklen in PECL gibt, ist bei PDO eine von wenigen Ausnahme. Aktualisierst Du bei einem neuen PHP-Release also nur ein paar Extensions, oder beobachtest Du das PHP-CVS und kompilierst Extensions bei wichtigen Änderungen aus dem CVS neu? Oder wie muss ich mir das vorstellen?
Mhh, da hast du natürlich Recht Theorie und Praxis sind zwei verschiedene Schuhe. Da meine Server auf Debian laufen und ich die meisten benötigten Extensions über das Packet Management von Debian installiere... fallen die Änderungen im pecl kaum ins Gewicht. Außer "apc" habe ich im Moment auch nix aus dem pecl installiert.
andreask2 wrote:Abgesehen davon bringen shared extensions meiner Erfahrung nach vor allem bei CGI durchaus einen gewissen Performance-Nachteil mit sich.
Sie haben aber auch Ihre Vorteile, bei einer Lösung von PHP über FAST-CGI wo für jeden VHost eine individuelle Konfiguration mitgegeben werden kann... hast du ein schlankes PHP und lädst nur die wirklich benötigten Extensions für den jeweiligen VHost, anstatt immer alles fest zu laden.

--
Stefan

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-07 17:36
by andreas franke
stefanpropehan wrote:
andreask2 wrote:1. PDO und die Treiber befinden sich im Archiv des PHP-Quelltextes. Wenn Du die entsprechenden Extensions direkt mit PHP installieren willst, kannst beim ./configure Befehl sowas wie
So muss er allerdings, wenn er einen weitern PDO Treiber haben möchte jedesmal PHP neu bauen.

--
Stefan
Das stört mich eigentlich wenig, ist da CGI-Version denke ich eh sinnvoller. Kann allerdings erst morgen weiter machen.

Vielen Dank für Eure Hilfen, melde mich morgen wie es gelaufen ist...

Andreas

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-10 16:01
by outofbound
doofe Frage:

function OpenDB ($dsn){
try{
$this->db = new PDO($dns);
}


Du weisst, dass $dsn != $dns ist?

Gruss,

Out

PS: Nein, ich hab mir net den ganzen Thread durchgelesen ;)

Re: PHP 5.1.4 PDO Problem...

Posted: 2006-07-10 17:14
by andreas franke
OutOfBound wrote:doofe Frage:

function OpenDB ($dsn){
try{
$this->db = new PDO($dns);
}


Du weisst, dass $dsn != $dns ist?

Gruss,

Out

PS: Nein, ich hab mir net den ganzen Thread durchgelesen ;)
Hallo,
über den Dreher bin ich auch schon gestolpert. Was mir fehlte, waren die PDO-Treiber. Jetzt funktioniert alles primstens.

Vielen Dank an Alle, für den Beistand.

Andreas