Questão 44 · Informática: Programação e algoritmos
O PHP5 permite manipular arquivos externos, como, por exemplo, arquivos txt, assim como permite realizar tratamento de erro.
A seguir, são apresentados o código em PHP5 que abre o arquivo hello.txt e um possível erro associado. <?php 1 $file=fopen("hello.txt","r"); 2?> 3 Warning: fopen(hello.txt) [function.fopen]: failed to open stream:
No such file or directory in xpto.php on line 2 Assinale a opção que apresenta o código correto para prevenir o erro em questão.
- A) <?php if(feof("hello.txt")) { echo("Arquivo não existe!"); } else { $file=fopen("hello.txt","r"); }?>
- B) <?php if(error().fopen("hello.txt")) { exit("Arquivo não existe!"); } else { $file=fopen("hello.txt","r"); }?>
- C) <?php if(error_log("Warning: fopen(hello.txt)")) { curl_error ("Arquivo não existe!"); } else { $file=fopen("hello.txt","r"); }?>
- D) <?php if(!file_exists("hello.txt")) { die("Arquivo não existe!"); } else { $file=fopen("hello.txt","r"); }?>
Marque a alternativa correta:
Gabarito: D
Gabarito definitivo divulgado pela banca Cebraspe (TRT7 2017).
Comentário
Gabarito: D.
O erro é que o arquivo hello.txt não existe. A forma preventiva é verificar a existência antes de abrir: file_exists("hello.txt") retorna verdadeiro se o arquivo existe. Com !, o código entra no die("Arquivo não existe!") quando o arquivo não existe, e só chama fopen no caso contrário.
- (A) feof: testa se o ponteiro chegou ao fim de um arquivo já aberto; não verifica existência, e recebe string, não handle.
- (B) error() não é função nativa do PHP e exit com concatenação não faz a verificação pedida.
- (C) error_log grava mensagem em log e não testa existência; curl_error é função de cURL, sem relação com arquivos locais.
Dica: para prevenir o warning de fopen, procure a função de verificação (file_exists) antes da abertura; funções de erro de log ou de cURL são distratores.
Fundamentos: PHP: função file_exists para verificar a existência de arquivo antes de fopen; die para encerrar a execução
Comentário gerado pela Cravei IA a partir do enunciado e do gabarito definitivo divulgado pela banca, e conferido por uma verificação automática. A IA pode errar: o gabarito oficial sempre prevalece.
Fonte: prova Cebraspe TRT7 2017 (Analista Judiciário – Área Apoio Especializado – Especialidade Tecnologia da Informação), questão 44, com o gabarito definitivo da banca. Comentário: Equipe Cravei · como fazemos e revisamos.