Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Gerar arquivo em múltiplas requisições


hipnos na area

Pergunta

Obs.: Esse erro só ocorre em versões do PHP inferiores ao 5.3.4.

Estou testando em uma máquina com PHP_5.3.0 e em outra máquina com o PHP_4.1.1.

Preciso que o código funcione independente da versão do PHP.

Estou criando um sistema de backup para erros no código da página (acaso ocorra)

Ao tentar "copiar" um arquivo com apenas um requisição, funciona tudo normalmente:

<?php
//gerar_log.php
$p = 'erros/'.$arqErr;
$o = 'temp/'.$arqErr;
if(file_exists($o) && is_readable($o) && is_writable($o)){
    if(!copy($o,$p)){
        echo 'Não foi possivel mover "',$p,'" para "',$o,'"';
    }
    if(file_exists($o) && is_readable($o) && is_writable($o)){
        unlink($o);//remove temporário
    }
}
?>
Porém fui simular múltiplas requisições [teste_conexoes.html]:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="pt-br">
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Teste multiplas conexoes</title>
<script type="text/javascript" src="js/jquery-1.8.1.min.js"></script>
<script type="text/javascript">
function teste(z){
    $.ajax("gerar_log.php="+(new Date().getTime()),{"success":function(data){
        $("<div></div>").addClass("sty").html(data).appendTo("body");
    });
}
</script>
<style>
.sty{
border:1px #000 solid;
overflow:auto;
margin:5px 0 0 5px;
}
</style>
</head>
<body>
<p><a href="teste_conexoes.html">Novo teste</a></p>
<script type="text/javascript">
var dd = "";
for(var i=0;i<10;i++){
    dd += "teste(\"#a"+(i+1)+"\");\n";
}
eval(dd);
</script>
</body>
</html>

E nisso ás vezes nessa parte !copy($o,$p) ocorre o sequinte erro:

Warning: Unable to open 'temp/6039dd66559c9431004109202d279557.php' for reading: No such file or directory in gerar_log.php

E as vezes na nessa parte: unlink($o); ocorre o seguinte erro:

Warning: Unlink failed (No such file or directory) in gerar_log.php

Observem que usei as funções: file_exists, is_readable e is_writable e mesmo assim ocorrem esses erros.

Editado por hipnos na area
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Guilherme,

Esse provavelmente não se trata de erro e sim uma implementação do PHP.

Por motivo de desempenho, o PHP mantem um cache das informações retornadas pelos métodos is_readable() , is_file() entre outros.

Utilize a função clearstatcache() para limpar as informações que o PHP mantem sobre um arquivo.

<?php
//gerar_log.php
$p = 'erros/'.$arqErr;
$o = 'temp/'.$arqErr;
if(file_exists($o) && is_readable($o) && is_writable($o)){
    if(!copy($o,$p)){
        echo 'Não foi possivel mover "',$p,'" para "',$o,'"';
    }
    if(file_exists($o) && is_readable($o) && is_writable($o)){
        unlink($o);//remove temporário
    }
}
clearstatcache();
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Romero Dias, eu havia esquecido de fechar alguns Resources (handles abertos por fopen), por isso copy falhava, porém o unlink continuou tendo o erro, e o clearstatcache resolveu meu problema.

Pode marcar como RESOLVIDO, por que agora está 100%

Muito obrigado.

Editado por hipnos na area
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...