Extensão MySQL do PHP não funciona

2

Em um servidor Debian, e depois da instalação e remoção do SquirrelMail (com algum downgrade e upgrade do php5, mysql ...) a extensão MySQL do PHP parou de funcionar.

Eu tenho o php5-mysql instalado, e quando tento me conectar a um banco de dados através do php-cli, eu me conecto com sucesso, mas quando eu tento conectar de uma web servida pelo Apache eu não consigo conectar.

Este script, executado pelo php5-cli:

echo phpinfo();
$link = mysql_connect('localhost', 'user, 'password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
echo 'Connected successfully';
mysql_close($link);

Imprime o phpinfo, que inclui "/etc/php5/cli/conf.d/mysql.ini", e também a seção MySQL com toda a configuração: SOCKET, LIBS ... E então ele imprime "Conecta com sucesso" .

Mas quando executado pelo apache acessado pelo navegador da web, ele exibe o phpinfo, que inclui "/etc/php5/apache2/conf.d/mysql.ini", mas a seção MySQL está faltando, e o script morre imprimindo " Erro fatal: Chame a função indefinida mysql_connect () ".

Note que tanto "/etc/php5/cli/conf.d/mysql.ini" e "/etc/php5/apache2/conf.d/mysql.ini" são na verdade a mesma configuração, porque eu tenho debian a estrutura:

/etc/php5/apache2
/etc/php5/cgi
/etc/php5/cli
/etc/php5/conf.d

E ambos apontam para o mesmo diretório:

/etc/php5/apache2/conf.d -> ../conf.d
/etc/php5/cli -> ../conf.d

Onde /etc/php5/conf.d/mysql.ini consiste em uma linha:

extension=mysql.so

Então, minha pergunta é: por que a extensão do MySQL para PHP não funciona se eu tiver a configuração incluída da mesma maneira que no php-cli, o que está funcionando?

Muito obrigado!

    
por Víctor 03.07.2012 / 10:40

2 respostas

1

Isso provavelmente não é um problema de configuração. Eu não estou familiarizado com a forma como as coisas são feitas no Debian (com relação ao upgrade / downgrade do PHP), mas parece que o PHP usado pelo Apache e o PHP CLI estão de fato usando PHPs diferentes.

Você pode verificar isso fazendo um phpinfo() do navegador e um php -i na linha de comando. Se o Apache e o CLI estiverem usando o mesmo PHP, os resultados devem ser exatamente os mesmos (mesmas opções de configuração, tempo de compilação, bibliotecas ativadas, etc.).

    
por 03.08.2012 / 15:43
0

Assumindo que o servidor web PHP está rodando como mod_php, as duas causas mais prováveis são:

1) as permissões no arquivo php.ini ou no arquivo .so não permitem o acesso do servidor web ao (s) arquivo (s)

2) o servidor está executando chroot

Você pode facilmente testar isso do PHP usando 'is_readable' e, no caso do php.ini, usar file_get_contents () para verificar se o arquivo contém o que você espera, e no caso do mysql.so, use dl () para carregar o arquivo.

    
por 03.07.2012 / 12:21