web-dev-qa-db-ja.com

PHP pdo_dblib-freetdsを見つけられない、または読み込めない

自己ホスト型ボックス、
RHEL 6
PHP 5.3.3

PDOがインストールされている
freetdsがインストールされています
pdo_dblib-これまでのところ、インストールできない

私の目標はPDOをsybaseで使用することです。適切なバージョンのphpソースコードからpdo_dblibをインストールしようとしています。私はさまざまな方法を試し、このトピックに関するヘルプをかなり検索しましたが、まだ成功していません。

方法1

Freetdsをインストールする

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

これは成功です

Pdo_dblibをインストールする

/ ext/pdo_dblibフォルダー内:

$ phpize
$ ./configure
$ make
$ make test

エラー出力:

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

それは見栄えがよくありません...私はこれを調査し、これのための興味深いハックを発見しました ここ 。しかし、pdo.iniをpdo_0.iniに変更することは解決策ではありませんでした。makeテストで同じエラーが発生するためです。

$ su
$ make install

出力:

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

それは奇妙に思えます...そしていいえ、実際にはインストールされません(Apacheの再起動後にphpinfoに表示されません)。

方法2

Freetdsをインストールする

手順に正確に従って、プレフィックスを追加します

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

これは成功です

Pdo_dblibをインストールする

/ ext/pdo_dblibフォルダー内:

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

これにより、出力の下部に次のエラーが生成されます

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

方法3

freetds ./configureバリエーション(--prefix ...を含むか含まないか)はこの結果を変更しなかったので、スキップします。

Pdo_dblib pecl拡張機能をインストールする

指定されたメソッドに従います ここ

pecl download pdo_dblib
tar -xzvf PDO_DBLIB-1.0.tgz

行を削除し、

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

Package.xmlファイルを保存し、PDO_DBLIBディレクトリに移動しました。

mv package.xml ./PDO_DBLIB-1.0

PDO_DBLIBディレクトリに移動し、ディレクトリからパッケージをインストールしました。

cd ./PDO_DBLIB-1.0
pecl install package.xml

しかし、このコマンドは方法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
7
MaxPowers

方法1の後、iniファイルを確認し、pdo.soおよびpdo_dblib.soファイルがロードされるように構成されていることを確認します。コマンドラインからphp -iを使用してこれを実行し、「読み込まれた構成ファイル」と「解析された追加の.iniファイル」を探すことができます。

それらのファイルの中で、extension = pdo.soがロードされていることを確認してください(おそらく、/おそらくpdo_dblib.soがロードされる前に)。個別の.iniファイルを維持したい場合は、どのようにストレートls -alファイルを並べ替えます。

1
Clint Priest

方法1に戻り、freetdsを再構築します

./configure --enable-msdblib

そしておそらく

--enable-sybase-compat

それでも失敗する場合は、ロードに失敗した.soに対してlddの出力をポストします。

1
chugadie

私はこの作品を最近見つけました:

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

次のコマンドの出力をシフトすることにより、インストールされているPDO DBLIBを確認できます。

php -i
0
b01