AriOps Posted July 7, 2006 at 10:36 PM Report #36959 Posted July 7, 2006 at 10:36 PM É necessário ter um ficheiro contador.txt na mesma pasta, de inicio com um 0. /********************************************* CONTADOR :: Desenvolvido por Daniel Correia *********************************************/ $ficheiro = "contador.txt"; $abrir = fopen($ficheiro, 'r+') or die("O Ficheiro não pode ser aberto."); $contador = fread($abrir, filesize($ficheiro)); $intcontador = (int) $contador; $intcontador++; rewind($abrir); fwrite($abrir, $intcontador); fclose($abrir); print $intcontador; Em Acção: http://www.ptattacks.com/contador_visitas Daniel Correia
skin Posted July 8, 2006 at 09:02 AM Report #37011 Posted July 8, 2006 at 09:02 AM isso ta a funcionar? no meu server nao da! Our lives begin to end the day we become silent about things that matter - Martin Luther King
AriOps Posted July 8, 2006 at 10:28 AM Author Report #37025 Posted July 8, 2006 at 10:28 AM não te esqueças de por lá o ficheiro contador.txt e a a tag PHP (<?php ?>) no código acima. Como podes ver funciona, deixei aí o link. Cumps Daniel Correia
skin Posted July 8, 2006 at 11:12 AM Report #37037 Posted July 8, 2006 at 11:12 AM o link funciona no meu server ca de casa não e eu fiz tudo isso 😉! EDIT http://87.196.63.142/TESTES/ está aqui Our lives begin to end the day we become silent about things that matter - Martin Luther King
AriOps Posted July 8, 2006 at 01:21 PM Author Report #37057 Posted July 8, 2006 at 01:21 PM Pá não me consigo ligar ao teu server, mas diz-me lá o erro que te dá sff. Cumps Daniel Correia
kingless Posted July 8, 2006 at 06:16 PM Report #37103 Posted July 8, 2006 at 06:16 PM Aqui fica outro contador: http://pastebin.com/743225 Gravem o código num arquivo .php depois criem um arquivo .txt e colocam o mode 777. 😉
skin Posted July 8, 2006 at 06:52 PM Report #37112 Posted July 8, 2006 at 06:52 PM Não dá erro! Fica tudo branco :S! EDIT Então ninguem para explicar ?? Our lives begin to end the day we become silent about things that matter - Martin Luther King
AriOps Posted July 12, 2006 at 11:33 AM Author Report #37775 Posted July 12, 2006 at 11:33 AM Isso porque é inexplicável se não se sabe o que se passa... Se fizeste tudo o que eu disse tem de dar... Cumps Daniel Correia
skin Posted July 12, 2006 at 11:41 AM Report #37777 Posted July 12, 2006 at 11:41 AM Ups já vi onde tinha errado! thks and sorry Our lives begin to end the day we become silent about things that matter - Martin Luther King
AriOps Posted July 12, 2006 at 11:44 AM Author Report #37780 Posted July 12, 2006 at 11:44 AM Bem me parecia 😉 Cumps Daniel Correia
skin Posted July 12, 2006 at 11:57 AM Report #37783 Posted July 12, 2006 at 11:57 AM Bem me parecia 😉 Cumps Tipo eu tinha adaptado o teu código e tava a faltar uma entrada. Ele abre a extensão que eu criei .skin Our lives begin to end the day we become silent about things that matter - Martin Luther King
Gurzi Posted July 30, 2006 at 01:19 PM Report #41126 Posted July 30, 2006 at 01:19 PM Este código tem um problema grave ..... Imaginem que tem dois utilizadores a acessar ao mesmo site . Seria algo do género : #Processo 1 1- Abre o Ficheiro contendo o valor #Processo 2 1- Abre o Ficheiro contendo o valor #Processo 1 2- Lê o ficheiro contendo o valor #Processo 2 2-Lê o ficheiro contendo o valor #Processo 1 3-Incrementa o Valor #Processo 2 3-Incrementa o Valor.. Ora como vocês vem.. no processo 2 o ficheiro é lido primeiro que o processo 1 faça as alterações... logo em 2 visitas o contador só vai gravar 1... Para resolver esta situação deve ser usado um acesso exclusivo ao ficheiro através da função flock flock(filehandle,operation); Podem ver mais através de http://php.telepac.pt/manual/pt_BR/function.flock.php Cumps, Gurzi 🙂
kingless Posted July 30, 2006 at 02:30 PM Report #41132 Posted July 30, 2006 at 02:30 PM Ora como vocês vem.. no processo 2 o ficheiro é lido primeiro que o processo 1 faça as alterações... logo em 2 visitas o contador só vai gravar 1... O contador não vai gravar só 1..... 1º porque ele incrementa logo que uma pessoa entra site, 2º é quase impossivel alguém entrar ao mesmo tempo que outra pessoa. Contador visitas 1 Pessoa entra no site -> Contador de Visitas 2 Outra pessoa entra -> Contador de Visitas 3 Não sei se me fiz entender...
Gurzi Posted July 30, 2006 at 06:04 PM Report #41146 Posted July 30, 2006 at 06:04 PM @kingless - se tu tiveres uma perspectiva grande em vez de sites a brincar para os teus amigos, vai chegar uma altura em que vais ter muita gente a entrar no site ao mesmo tempo, imagina o www.google.com, achas que nunca ninguem entrou ao mesmo tempo ? ... Ora... Se tu perceberes bem isto, a verdade é que o 2º utilizador vai ler o ficheiro primeiro que o outro escreva a sua presença logo em duas visitas só é registada uma... Para isso se usa o flock que dá um acesso exclusivo ao ficheiro, é bom porque enquanto o processo de escrita não for completado o outro não acede ao ficheiro, mas como isto se faz em 0,00000000000000000001 milésimas de segundo ninguem nota que está à espera. ------------------------------------------------------------------------------ eis o código correcto ------------------------------------------------------------------------------ $filename = "contador.txt"; $file = @fopen($filename, "r+") OR die("Failed to open the file"); @flock($file, LOCK_EX) OR die("Could not lock the file"); $s = fgets($file,6); $count = (int) $s; $count += 1; rewind($file); if(@fwrite($file,$count)== -1) die("Failed to write to file"); echo $count; @flock($file,LOCK_UN) OR die("Could not unlock the file"); @fclose($file); UM abraço, Gurzi 🙂
AriOps Posted July 30, 2006 at 06:08 PM Author Report #41147 Posted July 30, 2006 at 06:08 PM Gurzi podes postar o código se não meteres a tag <?php ?>. Cumps Daniel Correia
kingless Posted July 30, 2006 at 07:19 PM Report #41157 Posted July 30, 2006 at 07:19 PM @kingless - se tu tiveres uma perspectiva grande em vez de sites a brincar para os teus amigos, vai chegar uma altura em que vais ter muita gente a entrar no site ao mesmo tempo, imagina o www.google.com, achas que nunca ninguem entrou ao mesmo tempo ? ... Ora... Se tu perceberes bem isto, a verdade é que o 2º utilizador vai ler o ficheiro primeiro que o outro escreva a sua presença logo em duas visitas só é registada uma... Para isso se usa o flock que dá um acesso exclusivo ao ficheiro, é bom porque enquanto o processo de escrita não for completado o outro não acede ao ficheiro, mas como isto se faz em 0,00000000000000000001 milésimas de segundo ninguem nota que está à espera. vou deixar o código correcto em anexo porque o Fórum tem umas medidas de segurança um pouco weird, estando a não permitir a inserção do meu código. UM abraço, Gurzi 🙂 Só se utiliza um contador de visitas em .txt em sites que entram poucas pessoas.... Agora em sites grandes como google, hotmail... tem que se criar um contador com base de dados mysql ou outra qualquer. E não é aconselhado utilizar-se esse contador de visitas porque ele conta mesmo que se faça apenas refresh a página.
Gurzi Posted July 30, 2006 at 09:35 PM Report #41166 Posted July 30, 2006 at 09:35 PM Sim, mas este tópico refere-se á existência do método file , só disse que para 2 visitantes ao mesmo tempo não é concreto e real, para grandes sites usa-se o suporte a sql, óbvio
AriOps Posted July 31, 2006 at 09:05 AM Author Report #41206 Posted July 31, 2006 at 09:05 AM Bem como estavam a falar em contadores por SQL, resolvi fazer este pequeno script assim muito rapidamente. qualque coisa que acham que deva mudar digam. $server = "localhost"; $bd = "contador"; $tabela = "visitas"; $user = "root"; $pass = ""; $ligar = mysql_connect("$server", "$user", "$pass"); mysql_select_db($bd); $sql = "SELECT * FROM $tabela ORDER BY ID DESC LIMIT 0 , 1"; $query = mysql_query($sql) or die(mysql_error()); $fetch_query = mysql_fetch_assoc($query); $visita_actual = $fetch_query{'ID'} + 1; $data = date("Y-m-d") ." ". date("H:i:s"); $ip = $_SERVER['REMOTE_ADDR']; $sql_inserir = "INSERT INTO $tabela (`IP`,`Data`) VALUES ('$ip', '$data')"; mysql_query($sql_inserir) or die(mysql_error()); echo $visita_actual; Criar tabela: CREATE TABLE `visitas` ( `ID` int(11) NOT NULL auto_increment, `IP` varchar(20) NOT NULL, `Data` datetime NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Este é para mysql, daqui a bocado deixo um para o Sybase ASE 🙂 Cumps Daniel Correia
karva Posted July 31, 2006 at 09:42 AM Report #41214 Posted July 31, 2006 at 09:42 AM $data = date("Y-m-d") ." ". date("H:i:s"); aqui eu acho que punha a funcao time, que devolve a data e hora em segundos, tudo numa, e dps pra ver usava a funcao date() // $date_auto, e a data em segundos, dps de tirada da base de dados $show_date = date ("H:i:s m/d/Y", $date_auto); Proud LEIC-A@IST student!
AriOps Posted July 31, 2006 at 09:56 AM Author Report #41223 Posted July 31, 2006 at 09:56 AM Bem aqui está a minha versão para o Sybase ASE: <?php $server = "dcserver"; $bd = "contador"; $tabela = "visitas"; $user = "sa"; $pass = ""; $ligar = sybase_connect("$server", "$user", "$pass"); sybase_select_db($bd, $ligar); $sql = "SELECT * FROM $tabela ORDER BY ID DESC SET ROWCOUNT 1"; $query = sybase_query($sql); $fetch_query = sybase_fetch_assoc($query); $visita_actual = $fetch_query{'ID'} + 1; $data = date("Y-m-d") ." ". date("H:i:s"); $ip = $_SERVER['REMOTE_ADDR']; $sql_inserir = "INSERT INTO $tabela (IP,Date) VALUES ('$ip', '$data')"; sybase_query($sql_inserir); echo $visita_actual; ?> Criação da BD e da tabela, mudar o device conforme as necessidades <?php /*********** Criar BD e tabela *********************/ $ligar = sybase_connect("dcserver", "sa", ""); sybase_query("USE master CREATE DATABASE contador ON principal = 3", $ligar) or die("erro1"); $sql2 = "USE contador CREATE TABLE dbo.visitas ( ID numeric(38,0) IDENTITY, IP varchar(20) NOT NULL, Date datetime NOT NULL, )"; sybase_query($sql2, $ligar) or die("erro2"); echo "Criados com sucesso"; ?> karva vou ver se faço isso 🙂 Cumps Daniel Correia
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now