Php pdo_dblib - kann Freetds nicht finden / nicht laden


7

Selbst gehostete Box,
RHEL 6
PHP 5.3.3

PDO installiert
freetds installiert
pdo_dblib - bisher kein Glück bei der Installation

Mein Ziel ist es, PDO mit Sybase zu verwenden. Versuch, pdo_dblib vom entsprechenden PHP-Quellcode der Version zu installieren. Ich habe verschiedene Methoden ausprobiert und viel nach Hilfe zu diesem Thema gesucht, bin aber noch nicht erfolgreich.

Methode 1

Installieren Sie freetds

$ ./configure
$ make
$ su root
Password: 
$ make install

Das ist erfolgreich

Installieren Sie pdo_dblib

im Ordner / ext / pdo_dblib:

$ phpize
$ ./configure
$ make
$ make test

Fehlerausgabe:

PHP Warning:  PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Das sieht nicht gut aus ... Ich habe das recherchiert und hier einen interessanten Hack dafür gefunden . Das Ändern von pdo.ini in pdo_0.ini war jedoch nicht die Lösung, da beim Make-Test immer noch dieselben Fehler aufgetreten sind.

$ su
$ make install

Ausgabe:

Installing shared extensions:     /usr/lib64/php/modules/

Das scheint seltsam ... und nein, es wird nicht installiert (wird nach dem Neustart von Apache nicht auf phpinfo angezeigt).

Methode 2

Installieren Sie freetds

Ich folge genau den Anweisungen und füge das Präfix hinzu

$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
Password: 
$ make install

Das ist erfolgreich

Installieren Sie pdo_dblib

im Ordner / ext / pdo_dblib:

$ phpize
$ ./configure --with-sybase=/usr/local/freetds

Dies erzeugt den folgenden Fehler am unteren Rand der Ausgabe

...
checking for PDO_DBLIB support via FreeTDS... yes, shared
configure: error: Cannot find FreeTDS in known installation directories

Methode 3

Die freetds ./configure-Variante (einschließlich oder ohne das --prefix ...) hat das Ergebnis nicht geändert, daher überspringe ich es.

Installieren Sie die Erweiterung pdo_dblib pecl

nach der hier angegebenen Methode .

pecl download pdo_dblib
tar -xzvf PDO_DBLIB-1.0.tgz

Zeile entfernt,

<dep type=”ext” rel=”ge” version=”1.0″>pdo</dep>

Die Datei package.xml wurde gespeichert und in das Verzeichnis PDO_DBLIB verschoben.

mv package.xml ./PDO_DBLIB-1.0

Navigierte zum Verzeichnis PDO_DBLIB und installierte das Paket aus dem Verzeichnis.

cd ./PDO_DBLIB-1.0
pecl install package.xml

Dieser Befehl gibt mir jedoch die folgende Fehlerausgabe wie Methode 2 .

checking for PDO_DBLIB support via FreeTDS... yes, shared
configure: error: Cannot find FreeTDS in known installation directories
ERROR: `/home/sybase/Install_items/pecl_pdo_dblib/PDO_DBLIB-1.0/configure' failed

Ich habe genau das gleiche Problem, wenn ich versuche, PDO_INFORMIX auf einem CentOS 6.3 mit PHP 5.3.3 zu installieren.
jap1968

Ich habe auch versucht, pdo.ini in 0_pdo.ini umzubenennen, aber das Problem bleibt bestehen:pdo_informix.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
jap1968

Ich habe das gleiche Problem bei der Verwendung von FreeTDS mit pdo_dblib. Haben Sie hier Erfolg?
Siva

Antworten:


1

Überprüfen Sie nach Methode 1 Ihre INI-Dateien und stellen Sie sicher, dass die Dateien pdo.so und pdo_dblib.so zum Laden konfiguriert sind. Sie können dies über die Befehlszeile mit einem PHP -i tun und nach "Geladene Konfigurationsdatei" sowie "Zusätzliche analysierte INI-Dateien" suchen.

Stellen Sie unter diesen Dateien sicher, dass extension = pdo.so geladen ist (möglicherweise / wahrscheinlich bevor Ihre pdo_dblib.so geladen wird). Wenn Sie separate INI-Dateien verwalten möchten, können Sie die Ladereihenfolge anhand der Reihenfolge ls -alder Dateien steuern .


1

Kehren Sie zu Methode 1 zurück und erstellen Sie Freetds mit neu

./configure --enable-msdblib

und möglicherweise

--enable-sybase-compat

Wenn dies immer noch fehlschlägt, stellen Sie die Ausgabe von ldd gegen eine .so-Datei, die nicht geladen werden kann.


0

Ich fand, dass dies heutzutage funktioniert:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm && \
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && \
yum update -y && yum install --enablerepo=remi -y \
    php-cli \
    php-fpm \
    php-mssql

Sie können die installierte PDO-DBLIB überprüfen, indem Sie die Ausgabe des folgenden Befehls sichten:

php -i
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.