Jump to content
Fórum Script Brasil
  • 0

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


hipnos na area

Question

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.

Edited by hipnos na area
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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.

Edited by hipnos na area
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...