Como saída a razão para uma falha de abertura de arquivo PHP
-
05-07-2019 - |
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?
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 .