jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 tenho esse programinha que mostra quantos acessos teve uma página usando imagens "gif", mas quanto o arquivo "contador.txt" não existe ele não cria, e quando o arquivo existe ele não adiciona valores... <html> <head> <title>Contador PHP com imagens</title> </head> <body> <?php date_default_timezone_set('America/Sao_Paulo'); $arquivo = "contador.txt"; $contador = 1; $fp = fopen($arquivo, "r"); $contador = fgets($fp, filesize($arquivo)); fclose($fp); ++$contador; $fp = fopen($arquivo, "w+"); fwrite($fp, $contador, filesize($arquivo)); fclose($fp); ?> <table width="102" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <?php /* Arrumo de 0-9 nome dos arquivos gifs */ $numero[0] = "0.gif"; $numero[1] = "1.gif"; $numero[2] = "2.gif"; $numero[3] = "3.gif"; $numero[4] = "4.gif"; $numero[5] = "5.gif"; $numero[6] = "6.gif"; $numero[7] = "7.gif"; $numero[8] = "8.gif"; $numero[9] = "9.gif"; /* Cria-se variável para que contenha a longitude da cadeia */ /* é a partir daí onde se sabe que mostrará o contador em GIFS */ $longitude = strlen($contador); /* Loops para mostrar os números */ $ate = 6 - $longitude; For ($celula = 1; $celula <= $ate; $celula++) { echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[0]\"></div></td>"; } $ate = $longitude - 1; For ($celula = 0; $celula <= $ate; $celula++) { $num = substr($contador, $celula, 1); echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[$num]\"></div></td>"; } ?> </tr> </table> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Mude a permisão do fopen , pra w+ , no Primeiro FOPEN Algum Erro Aparece ? Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 Mude a permisão do fopen , pra w+ , no Primeiro FOPEN Algum Erro Aparece ? mudei como pediu e deu isso. Warning: fgets(): Length parameter must be greater than 0 in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 15 Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Certo , vamos testar desta forma .. <?php date_default_timezone_set('America/Sao_Paulo'); $arquivo = "contador.txt"; if(!file_exists($arquivo)) { @fopen($arquivo, 'w+'); } $contador = 1; $fp = fopen($arquivo, "r"); fwrite($fp, '0'); $contador = file_get_contents($arquivo); fclose($fp); ++$contador; $fp = fopen($arquivo, "w+"); fwrite($fp, $contador); fclose($fp); ?> Poste o Resultado Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 agora deu certo, nem precisou cobrir o erro com @, mas porque não deu certo antes? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 fgets , so pegar arquivo com 1 byte ++ , você tem que escrever algo de inicio pra ele ler e pegar o conteudo ou seja , seu arquivo antes tava NULL , então botei o contador antes do LOOP como 0 e depois ele vai incrementar 1 quando o cara entrar na pagina ou seja , vai colocar ZERO , Incrementar 1 , se você bota o contador como 1 ele vai pra 2 assim por diante .. ^_^ @Obs: , esse contador ele se incrementa a cada refresh na pagina , uma dica seria você gravar uma SESSION com o IP do cara ou um COOKIE , e verificar se aquela sessão ja tiver valor , se tiver não adiciona +1 na contagem no txt ^_^ session_start(); $_SESSION['alerady_visit'] = $SERVER['REMOTE_ADDR']; if($_SESSION['alerady_visit'] == $_SERVER['REMOTE_ADDR']) { exit(); } No caso eu dei o EXIT para parar o script , isso seria bom se você tivese a pagina do contador inclusa , ai sim so para o contador e não o resto da applicação Abraços Boa Sorte ~ Andrey Knupp Compartilhar este post Link para o post Compartilhar em outros sites
Calmon Ribeiro' 0 Denunciar post Postado Fevereiro 13, 2011 Seguinte, tenha cuidado com o uso do @ ele pode ser uma faca de dois gumes para a sua aplicação. O @ nos comandos servem para hidar, ou esconder o erro padrão da função, assim não mostrando o erro na página. Agora imagine você está criando um sistema gigante e logo se deparar com um erro, você fica doido revirando o código e não consegue encontrar, portanto cuidado! :blink: Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Eu coloco @ em certas funçoes para não deixar o 'visitante' espantado com o erro que possa aparecer . nesse caso eu seto essa funçao numa variavel e faço um if , elaborando minha propia mensagem Abraços Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 Dustandrubber tentei criar uma sessão para bloquear varios refresh's mas não consegui fazer, ou desaprendi PHP ou o teu script ta zuado! Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Tem como você postar o Script Todo ? Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 Tem como você postar o Script Todo ? olha ai: <html> <head> <title>Contador PHP com imagens</title> </head> <body> <?php date_default_timezone_set('America/Sao_Paulo'); $arquivo = "contador.txt"; if (!file_exists($arquivo)) { fopen($arquivo, 'w+'); } $contador = 1; $fp = fopen($arquivo, "r"); fwrite($fp, '0'); $contador = file_get_contents($arquivo); fclose($fp); ++$contador; $fp = fopen($arquivo, "w+"); fwrite($fp, $contador); fclose($fp); ?> <table width="102" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <?php /* Arrumo de 0-9 nome dos arquivos gifs */ $numero[0] = "0.gif"; $numero[1] = "1.gif"; $numero[2] = "2.gif"; $numero[3] = "3.gif"; $numero[4] = "4.gif"; $numero[5] = "5.gif"; $numero[6] = "6.gif"; $numero[7] = "7.gif"; $numero[8] = "8.gif"; $numero[9] = "9.gif"; /* Cria-se variável para que contenha a longitude da cadeia */ /* é a partir daí onde se sabe que mostrará o contador em GIFS */ $longitude = strlen($contador); /* Loops para mostrar os números */ $ate = 6 - $longitude; for ($celula = 1; $celula <= $ate; $celula++) { echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[0]\"></div></td>"; } $ate = $longitude - 1; for ($celula = 0; $celula <= $ate; $celula++) { $num = substr($contador, $celula, 1); echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[$num]\"></div></td>"; } ?> </tr> </table> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Certo , você conta essa 'visita' quando o cara clica em um botão ? Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 Certo , você conta essa 'visita' quando o cara clica em um botão ? não somente quando entra na página. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Bem , então vamos pensar um pouco $ip = $_SERVER['REMOTE_ADDR']; if($_SESSION['visit'] == ""){ $_SESSION['visit'] = $ip; exit(); } if($_SESSION['visit'] != "") { echo 'Você Ja Viu Esse Conteudo'; exit(); } Refiz o codigo .. Em cima do primeiro exit , você vai por toda execução do codigo .. ai sim ele vai executar 1 vez .. e depois que o cara der refresh ele para o script deixando a mensagem , no caso você não vai deixar a mensagem , você não vai contar +1 no txt ... Duvidas ? Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 tá, onde coloco o código? e quando ele chegar no exit(); ele não vai mostrar nada "echo". ??? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Colher de cha pra voce .. <?php $ip = $_SERVER['REMOTE_ADDR']; if($_SESSION['visit'] == ""){ if($_SESSION['visit'] != "") { exit(); } $_SESSION['visit'] = $ip; date_default_timezone_set('America/Sao_Paulo'); $arquivo = "contador.txt"; if (!file_exists($arquivo)) { fopen($arquivo, 'w+'); } $contador = 1; $fp = fopen($arquivo, "r"); fwrite($fp, '0'); $contador = file_get_contents($arquivo); fclose($fp); ++$contador; $fp = fopen($arquivo, "w+"); fwrite($fp, $contador); fclose($fp); exit(); } // mostra contador ou script a ser executado .. ?> Acima no caso , eu so implementei a funçao pra não contar +1 no TXT mais a exibiçao dele tem que ser disponivel , acho que isso você faz ne :P Abraços Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 a parte que você implementou esta dando esse erro: Notice: Undefined variable: _SESSION in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 12 Notice: Undefined variable: _SESSION in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 13 Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 Aqui Rodo na boa , o propio nome ja diz , variavel não definida , você altero os nomes ?? e botou session_start no topo da pagina ? Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Fevereiro 13, 2011 não mudei os nomes, e o session_start(); tinha esquecido realmente, mas ta dizendo que a variavel contador não foi definida Notice: Undefined variable: contador in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 59 Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Fevereiro 13, 2011 posta 10 linhas abaixo da linha do erro , e 10 linhas acima .. Compartilhar este post Link para o post Compartilhar em outros sites