hipnos na area Posted November 9, 2012 Report Share Posted November 9, 2012 (edited) 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.phpE as vezes na nessa parte: unlink($o); ocorre o seguinte erro:Warning: Unlink failed (No such file or directory) in gerar_log.phpObservem que usei as funções: file_exists, is_readable e is_writable e mesmo assim ocorrem esses erros. Edited November 9, 2012 by hipnos na area Quote Link to comment Share on other sites More sharing options...
0 Romero Dias Posted November 10, 2012 Report Share Posted November 10, 2012 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(); ?> Quote Link to comment Share on other sites More sharing options...
0 hipnos na area Posted November 10, 2012 Author Report Share Posted November 10, 2012 (edited) 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 November 11, 2012 by hipnos na area Quote Link to comment Share on other sites More sharing options...
Question
hipnos na area
Ao tentar "copiar" um arquivo com apenas um requisição, funciona tudo normalmente:
Porém fui simular múltiplas requisições [teste_conexoes.html]:E nisso ás vezes nessa parte !copy($o,$p) ocorre o sequinte erro:
E as vezes na nessa parte: unlink($o); ocorre o seguinte erro:
Observem que usei as funções: file_exists, is_readable e is_writable e mesmo assim ocorrem esses erros.
Edited by hipnos na areaLink to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.