Ignorando erro PHP, enquanto ainda imprimir uma mensagem de erro personalizada

votos
0

Assim:

@fopen($file);

Ignora quaisquer erros e continua

fopen($file) or die(Unable to retrieve file);

Ignora erro, mata programa e imprime uma mensagem personalizada

Existe uma maneira fácil de ignorar erros de uma função, imprimir uma mensagem de erro personalizada e não matar o programa?

Publicado 19/05/2009 em 17:47
fonte usuário
Em outras línguas...                            


5 respostas

votos
4

Use Exceções:

try {
   fopen($file);
} catch(Exception $e) {
   /* whatever you want to do in case of an error */
}

Mais informações em http://php.net/manual/language.exceptions.php

Respondeu 19/05/2009 em 17:51
fonte usuário

votos
4

Tipicamente:

if (!($fp = @fopen($file))) echo "Unable to retrieve file";

ou usando o seu caminho (que descarta identificador de arquivo):

@fopen($file) or printf("Unable to retrieve file");
Respondeu 19/05/2009 em 17:51
fonte usuário

votos
2

slosd maneira 's não vai funcionar. fopen não lançar uma exceção. Você deve thow-lo manualmente vou modificar a sua segunda exaple e combiná-lo com slosd 's:

try
{
    if (!$f = fopen(...)) throw new Exception('Error opening file!');
} 
catch (Exception $e)
{
    echo $e->getMessage() . ' ' . $e->getFile() . ' at line ' . $e->getLine;
}
echo ' ... and the code continues ...';
Respondeu 19/05/2009 em 18:26
fonte usuário

votos
1

Aqui está a minha própria solução. Note que ele precisa tanto um nível roteiro global ou uma variável estática de uma classe para fácil referência. Eu escrevi classe de estilo para referência, mas desde que ele pode encontrar a matriz está tudo bem.

class Controller {
  static $errors = array();
}

$handle = fopen($file) or array_push(Controller::errors,
  "File \"{$file}\" could not be opened.");

 // ...print the errors in your view
Respondeu 19/05/2009 em 18:49
fonte usuário

votos
0

Em vez de morrer você poderia lançar uma exceção e fazer o erro de manipulação no centro de qualquer forma você vê o ajuste :-)

Respondeu 19/05/2009 em 17:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more