Pergunta

Eu estou tentando depurar um enorme, antiquado (circa 2001) serviço de web PHP e eu estou encontrando arquivo falhas abertas. A chamada fopen está em um módulo incluído, o chamador está registrando que o arquivo não pôde ser aberto mas não há razão está sendo registrado.

O código que realmente faz a céu aberto é:

  // Read the file
  if (!($fp = @fopen($fileName, 'rb'))) {
    $errStr = "Failed to open '{$fileName}' for read.";
    break; // try-block
  }

Como posso descobrir por que FOPEN falhou?

Foi útil?

Solução

Grandes respostas já foram dadas, sobre a @ operador , mas aqui está um par de mais informações que poderiam ser úteis, quer para você ou outra pessoa:

  • Se, para fins de depuração, é necessário o desativar o @ operator, você pode instalar o href="http://pecl.php.net/package/scream" rel="nofollow noreferrer"> grito extensão - veja também o manual - que é realmente útil quando você' está mantendo algum tipo de aplicativo antigo não bem concebido / codificado ^^
  • Dependendo do seu configuation PHP (se o track_errors opção é ativada) , você pode ser capaz de usar $php_errormsg para obter a última mensagem de erro.

Considerando este pedaço de código:

// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
    var_dump($php_errormsg);
}

// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
    var_dump($php_errormsg);
}

Você pode ficar com isto:

string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)

string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)

Assim, real, úteis, significativos, mensagens de erro ; -)

Outras dicas

Tira o sinal @.

O sinal @ suprime mensagens de erro, por isso é suprimindo o erro da função normalmente dar.

Remova a erro supressor .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top