Página 1 de 1

Não exibir mensagens quando ocorre erros

Enviado: 30 Nov 2011, 16:17
por rgtobr
Prezados,

Tenho uma dúvida: o OC está configurado para exibir todas as mensagens de erro (conforme vi a existência do error_reporting(E_ALL) no arquivo system/startup.php).

Só que tenho uma dúvida: existem casos e casos onde o OC pode gerar um erro, e um dos erros mais básicos pode ser falha na conexão com o banco de dados (e também por qualquer razão, seja um estagiário tropeçando no cabo de rede que fornece Internet a todos os clientes da Embratel, ou mesmo 1 milhionésimo de Qubit gerado por engano devido uma oscilação de energia, enfim....).

Alguém sabe se modificarmos esta linha do error_reporting(E_ALL) para exibir mensagens de erro a nível de usuário, se isso vai ou não gerar algum problema no ambiente de produção?

Aconteceu comigo por esses dias, por alguma razão, apareceu falha na conexão com banco de dados com uma mensagem que alertava tal falha e detalhes como "usuario@meu.servidor.com.br" foram expostos, ou seja, não quero que isso volte a acontecer, seja comigo ou com qualquer um que tenha acesso ao ambiente de produção.

Sugestões para mostrar apenas "mensagens de erros amigáveis" aos visitantes e esconder os detalhes dos erros no ambiente de produção?



----

Encontrei, a mensagem que apareceu foi a seguinte:
Código: Selecionar todos
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'mysql01.meuservidor.com' (2) in /home/storage/5/61/a3/meuservidor/public_html/homolog/system/database/mysql.php on line 6
Error: Could not make a database connection using usuario@mysql01.meuservidor.com
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/storage/5/61/a3/meuservidor/public_html/homolog/system/database/mysql.php on line 67
... mas é isto que quero esconder do visitante, caso ocorra algum erro parecido.

Re: Não exibir mensagens quando ocorre erros

Enviado: 03 Dez 2011, 08:03
por denisgomes
Se você mudar o error_reporting para 0 (talvez você tenha de mudar em outros lugares além do startup.php) os erros não aparecerão para quem visita a loja, mas ainda poderão ser vistos no log do servidor. Se não me engano não há como esconder somente a mensagem de erro de conexão com o banco de dados, a menos que você altere alguma coisa no núcleo do OpenCart (o que não é recomendado) pra detectar o erro no momento da conexão e exibir outra coisa.

Mudando um pouco de assunto, você não deve deixar que ACONTEÇAM erros de qualquer tipo, especialmente erros de banco de dados. Os usuários tendem a simplesmente abandonar a loja (e você pode possivelmente perder a venda) quando encontram um erro, e um erro de banco de dados derruba a loja inteira. Sei que erros podem acontecer a qualquer momento e em qualquer situação, mas é muito importante ter uma hospedagem confiável e que funcione sem que você tenha de ficar de babá.

Re: Não exibir mensagens quando ocorre erros

Enviado: 15 Dez 2011, 23:21
por Renato Frota
Basta editar o arquivo system/database/mysql.php de
Código: Selecionar todos
		if (!$this->connection = mysql_connect($hostname, $username, $password)) {
      		exit('Error: Could not make a database connection using ' . $username . '@' . $hostname);
    	}
para
Código: Selecionar todos
		if (!$this->connection = mysql_connect($hostname, $username, $password)) {
      		exit('Erro: nosso banco de dados está passando por manutenção. Por favor, tente mais tarde.');
    	}
e de
Código: Selecionar todos
	public function __destruct() {
		mysql_close($this->connection);
	}
para
Código: Selecionar todos
	public function __destruct() {
		@mysql_close($this->connection);
	}

Re: Não exibir mensagens quando ocorre erros

Enviado: 16 Dez 2011, 06:40
por rgtobr
Muitíssimo obrigado pela dica! Com certeza vou fazer este ajuste.

Um detalhe que notei no sistema mas ainda não testei. Em sistema > configurações > minha loja, na guia Servidor tem a opção:

Exibir mensagens de Erro:
Exibir mensagens de erro na loja e na administração da loja.
(X) Sim ( ) Não

Surte o mesmo efeito?

Re: Não exibir mensagens quando ocorre erros

Enviado: 16 Dez 2011, 10:03
por Renato Frota
Essa configuração é global. Eu prefiro deixar exibindo os erros aparecendo (é útil para que possamos saber se está tudo OK sem precisar verifando logs) e mudar somente estes arquivos manualmente, pois esses erros de conexão mysql são os únicos que expoem dados sensíveis (nome de usuário, do banco e hostname).