Php pdo_dblib - não é possível localizar / não é possível carregar os freetds

7

Caixa auto-hospedada,
RHEL 6
PHP 5.3.3

PDO instalado
freetds instalados
pdo_dblib - até agora não há sorte em instalar

Meu objetivo é usar o PDO com sybase. Tentativa de instalar o pdo_dblib a partir do código fonte da versão apropriada do php. Eu tentei uma variedade de métodos e procurei bastante por ajuda sobre este tópico, mas ainda não tive sucesso.

Método 1

Instalar os freetds

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

Isso é bem sucedido

Instalar o pdo_dblib

dentro da pasta / ext / pdo_dblib:

$ phpize
$ ./configure
$ make
$ make test

Saída de erro:

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

Isso não parece bom ... Eu pesquisei isso e encontrei um hack interessante para este aqui . Mas mudar o pdo.ini para o pdo_0.ini não foi a solução, pois ainda tenho os mesmos erros no make test.

$ su
$ make install

Saída:

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

Isso parece estranho ... e não, ele não é instalado (não aparece no phpinfo após o reinício do apache).

Método 2

Instalar os freetds

seguindo as instruções exatamente, adiciono o prefixo

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

Isso é bem-sucedido |

Instalar o pdo_dblib

dentro da pasta / ext / pdo_dblib:

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

Isso produz o seguinte erro na parte inferior da saída

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

Método 3

freetds ./configure variation (incluindo ou não incluir o --prefix ...) não alterou o resultado disso, então vou ignorá-lo.

Instalar extensão pecl pdo_dblib

seguindo o método especificado aqui .

pecl download pdo_dblib
tar -xzvf PDO_DBLIB-1.0.tgz

Removeu a linha

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

Salvou o arquivo package.xml e o moveu para o diretório PDO_DBLIB.

mv package.xml ./PDO_DBLIB-1.0

Navegue para o diretório PDO_DBLIB e, em seguida, instale o pacote a partir do diretório.

cd ./PDO_DBLIB-1.0
pecl install package.xml

Mas, esse comando me fornece a seguinte saída de erro, igual ao Método 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
    
por MaxPowers 07.11.2012 / 04:42

3 respostas

1

Após o método 1, verifique seus arquivos ini e certifique-se de que os arquivos pdo.so e pdo_dblib.so estejam configurados para serem carregados. Você pode fazer isso a partir da linha de comando com um php -i e procurar pelo "Loaded Configuration File" assim como "Additional .ini files parsed".

Entre esses arquivos, assegure-se de que extendion = pdo.so esteja carregado (possivelmente / provavelmente antes que seu pdo_dblib.so seja carregado). Se você quiser manter arquivos .ini separados, poderá controlar a ordem de carregamento de acordo com a forma como um ls -al direto ordena os arquivos.

    
por 30.06.2013 / 15:10
1

Volte para o método um e reconstrua os freetds com

./configure --enable-msdblib

e possivelmente

--enable-sybase-compat

Se ainda falhar, poste a saída do ldd em qualquer .so que não carregue.

    
por 02.09.2013 / 19:01
0

Eu encontrei isso funciona hoje em dia:

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

Você pode verificar o PDL DBLIB instalado, analisando a saída do seguinte comando:

php -i
    
por 02.09.2015 / 07:20