Pagina 1 di 2

[PHP] contatore: cosa ne pensate?

MessaggioInviato: sab nov 22, 2003 7:04 pm
da sonep
che ne dite??? può andare come contatore??? posso alleggerirlo ulteriormente???
o come posso migliorarlo?? (è il mio primo programma in php!)
(chiedo scusa in anticipo per la lunghezza del messaggio)
<?php
$conta = 0;
$fd = fopen("percorso file contatore", "r+");
$fp = fopen("percorso file data", "r+");
$ft = fopen("percorso file ip", "r+");
$dt = fgets ($fp);
$numip = fgets ($ft);
$datog = qui il codice per prendere la data(che ancora non conosco);
$inr = $REMOTE_ADDR;
$tot = fgets ($fd);
rewind ($fd);
if (($dt <> $datog and $numip == $inr) or ($dt == $datog and $numip <> $inr))
{
$tot++;
fputs ($fd, $tot);
rewind ($fd);
rewind ($fp);
rewind ($ft);
fputs ($fp, $dt);
fputs ($ft, $inr);
fclose ($fp);
fclose ($ft);
}
while (!feof ($fd))
{
$conta ++;
$nome[$conta] = fgetc($fd) + ".gif"; /* chiaro che ho salvato in una cartella
dei file che ho chiamato 0.gif;
1.gif; ecc.. */
}
if ($conta<6)
{
for ($conta=$conta; $conta<=6; $conta++)
{
$nome[$conta]="0.gif";
}
}
if ($tot<10)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[3];
$nomg = $nome[2];
$nomf = $nome[1];
}
elseif ($tot<100)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[3];
$nomg = $nome[1];
$nomf = $nome[2];
}
elseif ($tot<1000)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[1];
$nomg = $nome[2];
$nomf = $nome[3];
}
elseif ($tot<10000)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[1];
$nomd = $nome[2];
$nomg = $nome[3];
$nomf = $nome[4];
}
elseif ($tot<100000)
{
$noma = $nome[6];
$nomb = $nome[1];
$nomc = $nome[2];
$nomd = $nome[3];
$nomg = $nome[4];
$nomf = $nome[5];
}
else
{
$noma = $nome[1];
$nomb = $nome[2];
$nomc = $nome[3];
$nomd = $nome[4];
$nomg = $nome[5];
$nomf = $nome[6];
}
fclose ($fd);
?>

e infine dovrei inserire questo codice nel punto nel quale
vorrei visualizzare il contatore (chiaramente all'interno della stessa pagina): "
<img src="immagini<?=$noma?>"><img src="immagini<?=$nomb?>"><img src="immagini<?=$nomc?>">
<img src="immagini<?=$nomd?>"><img src="immagini<?=$nomg?>"><img src="immagini<?=$nomf?>"> "
e questo in tutte le altre pagine: "
<?php
$fd = fopen("percorso file contatore", "r+");
$fp = fopen("percorso file data", "r+");
$ft = fopen("percorso file ip", "r+");
$dt = fgets ($fp);
$numip = fgets ($ft);
$datog = qui ci devo mettere il codice per la data(che ancora non conosco);
$inr = $REMOTE_ADDR;
$tot = fgets ($fd);
rewind ($fd);
if (($dt <> $datog and $numip == $inr) or ($dt == $datog and $numip <> $inr))
{
$tot++;
fputs ($fd, $tot);
rewind ($fd);
rewind ($fp);
rewind ($ft);
fputs ($fp, $dt);
fputs ($ft, $inr);
fclose ($fp);
fclose ($ft);
}
?>

[PHP] contatore: cosa ne pensate?

MessaggioInviato: sab nov 22, 2003 7:04 pm
da sonep
che ne dite??? può andare come contatore??? posso alleggerirlo ulteriormente???
o come posso migliorarlo?? (è il mio primo programma in php!)
(chiedo scusa in anticipo per la lunghezza del messaggio)
<?php
$conta = 0;
$fd = fopen("percorso file contatore", "r+");
$fp = fopen("percorso file data", "r+");
$ft = fopen("percorso file ip", "r+");
$dt = fgets ($fp);
$numip = fgets ($ft);
$datog = qui il codice per prendere la data(che ancora non conosco);
$inr = $REMOTE_ADDR;
$tot = fgets ($fd);
rewind ($fd);
if (($dt <> $datog and $numip == $inr) or ($dt == $datog and $numip <> $inr))
{
$tot++;
fputs ($fd, $tot);
rewind ($fd);
rewind ($fp);
rewind ($ft);
fputs ($fp, $dt);
fputs ($ft, $inr);
fclose ($fp);
fclose ($ft);
}
while (!feof ($fd))
{
$conta ++;
$nome[$conta] = fgetc($fd) + ".gif"; /* chiaro che ho salvato in una cartella
dei file che ho chiamato 0.gif;
1.gif; ecc.. */
}
if ($conta<6)
{
for ($conta=$conta; $conta<=6; $conta++)
{
$nome[$conta]="0.gif";
}
}
if ($tot<10)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[3];
$nomg = $nome[2];
$nomf = $nome[1];
}
elseif ($tot<100)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[3];
$nomg = $nome[1];
$nomf = $nome[2];
}
elseif ($tot<1000)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[4];
$nomd = $nome[1];
$nomg = $nome[2];
$nomf = $nome[3];
}
elseif ($tot<10000)
{
$noma = $nome[6];
$nomb = $nome[5];
$nomc = $nome[1];
$nomd = $nome[2];
$nomg = $nome[3];
$nomf = $nome[4];
}
elseif ($tot<100000)
{
$noma = $nome[6];
$nomb = $nome[1];
$nomc = $nome[2];
$nomd = $nome[3];
$nomg = $nome[4];
$nomf = $nome[5];
}
else
{
$noma = $nome[1];
$nomb = $nome[2];
$nomc = $nome[3];
$nomd = $nome[4];
$nomg = $nome[5];
$nomf = $nome[6];
}
fclose ($fd);
?>

e infine dovrei inserire questo codice nel punto nel quale
vorrei visualizzare il contatore (chiaramente all'interno della stessa pagina): "
<img src="immagini<?=$noma?>"><img src="immagini<?=$nomb?>"><img src="immagini<?=$nomc?>">
<img src="immagini<?=$nomd?>"><img src="immagini<?=$nomg?>"><img src="immagini<?=$nomf?>"> "
e questo in tutte le altre pagine: "
<?php
$fd = fopen("percorso file contatore", "r+");
$fp = fopen("percorso file data", "r+");
$ft = fopen("percorso file ip", "r+");
$dt = fgets ($fp);
$numip = fgets ($ft);
$datog = qui ci devo mettere il codice per la data(che ancora non conosco);
$inr = $REMOTE_ADDR;
$tot = fgets ($fd);
rewind ($fd);
if (($dt <> $datog and $numip == $inr) or ($dt == $datog and $numip <> $inr))
{
$tot++;
fputs ($fd, $tot);
rewind ($fd);
rewind ($fp);
rewind ($ft);
fputs ($fp, $dt);
fputs ($ft, $inr);
fclose ($fp);
fclose ($ft);
}
?>

MessaggioInviato: sab nov 22, 2003 7:42 pm
da Baltak
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />$inr = $REMOTE_ADDR;
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
questo lo devi cambiare in $_SERVER["REMOTE_ADDR];
$REMOTE_ADDR; è ancora supportato da PHP 4 ma non lo sarà più dalla versione 5.0
($_SERVER["REMOTE_ADDR]; non è supportato da PHP3 quindi dovrai usare la "vecchia" forma, ma è meglio se ti abitui al futuro)
non ho letto tutto lo script
è un contatore di click o di visite?
cioè tiene conto dei refresh?
poi
salva gli ip in un log?
dammi qualche info dettagliata perché se ho ben capito quel che vuoi fare si può fare con 20 - 30 righe

MessaggioInviato: dom nov 23, 2003 7:35 pm
da sonep
i refresh non li dovrebbe salvare, come non dovrebbe incrementare se uno fa due visite lo stesso giorno!!!
incrementa solo le visite....e ho deciso di non salvare gli ip perché comunque non mi sarebbe servito a nulla!!!(secondo me!)
(anche perché non so far andare a capo il cursore nel file!!!)

MessaggioInviato: dom nov 23, 2003 7:40 pm
da Baltak
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />ho deciso di non salvare gli ip perché comunque non mi sarebbe servito a nulla!!!(secondo me!)
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
l'unica utilità è vedere da dove si collegano i tuoi visitatori (intendo la nazionalità)
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />(anche perché non so far andare a capo il cursore nel file!!!)
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

(backslash n)

MessaggioInviato: lun nov 24, 2003 7:54 pm
da sonep
ah! grazie! (pensavo che servisse solo per la formattazione dell'output..boh!)
comunque, se ci fai caso, il codice del contatore è scritto solo nelle prime 20/30 righe! il restante codice è per non visualizzare il totalizzatore con caratteri alfanumerici, ma bensì con delle immagini!

MessaggioInviato: mar nov 25, 2003 12:51 am
da Baltak
in tutta quella sequenza di noma, nomb ecc.. non potresti usare un array?

MessaggioInviato: ven nov 28, 2003 6:01 pm
da sonep
e si, non c'avevo pensato, comunque ho già corretto....
solo che c'è un problema..quando apro la pagina in locale, mi esegue il codice senza problemi...ma quando ho provato ad aprirla dal web mi dice che il tempo massimo per l'esecuzione è finito (15 secondi) e si è fermato ad una determinata riga di codice che a volte è la 35 altre la 40 ....!
allora ci ho pensato un po' su e ho migliorato il codice riducendolo a sole 49 righe, ma ancora nulla, sempre lo stesso problema!
devo chiedere ad altervista di aumentarmi il tempo massimo di esecuzione o devo lasciare stare il contatore in alfanumerio??!
boh!
ps se vuoi posso stampartelo il contatore!(dico se vuoi non perché tu voglia possederlo, ma se vuoi controllarlo)

MessaggioInviato: ven nov 28, 2003 8:01 pm
da Baltak
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />devo chiedere ad altervista di aumentarmi il tempo massimo di esecuzione
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
non lo farebbero mai
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />se vuoi posso stampartelo il contatore!(dico se vuoi non perché tu voglia possederlo, ma se vuoi controllarlo)
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
non ho capito che intendi

MessaggioInviato: dom nov 30, 2003 6:00 pm
da sonep
è vero, è un po' incasinato il senso, ma volevo dire che il tuo interesse per il post(amento) del mio contatore di sicuro non è dovuto alla tua incapacità di crearne uno ma alla correzione del mio!
credo di essere stato più chiaro!

MessaggioInviato: dom nov 30, 2003 6:17 pm
da Baltak
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da sonep</i>
<br />credo di essere stato più chiaro!
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
sì credo di sì
ti ringrazio ma non ne ho bisogno, integro i contatori con un sistema di statistiche [;)]

MessaggioInviato: lun feb 16, 2004 7:11 pm
da tritemio
anch'io mi sono perso nella sequela di noma nomb nometc...
il problema qual è vuoi vedere sempre il contatore a 6 cifre con gli zeri in testa???
non puoi fare

str_pad($tot, 6 ,"0",STR_PAD_LEFT);

MessaggioInviato: mar feb 17, 2004 5:05 pm
da tritemio
E va bhè [std] sono troppo buono ti posto un codice che in sole 16 righe crea un contatore come il tuo .Naturalmente ti rimando alla pagina del manuale che spiega l'uso delle Session
http://www.php.net/manual/it/ref.session.php
Codice: Seleziona tutto
<?php
session_start();
$contername="counter.txt";
$fdr = fopen($contername, "r");
$contents = fread ($fdr, filesize ($contername));
fclose ($fdr);
if (!isset($_SESSION['count'])) {
   $_SESSION['count'] = 1;
   $fdw = fopen($contername, "w");
   fwrite($fdw,$contents+$_SESSION['count']);
   fclose ($fdw);
}
$paddedcount=str_pad($contents,6,"0",STR_PAD_LEFT);
for($i=0;$i<6 ;$i++) {
echo '<IMG SRC="immagini/'.$paddedcount{$i}.'.GIF" BORDER=0>';
}
echo " Visitatori";
?>

MessaggioInviato: gio mar 27, 2008 6:47 pm
da giovix84
Salve Tritemio sei davvero Geniale,
senti a me servirebbe che incrementi solo le visite ad ogni volta che si faccia aggiorna.

Ho notato che il codice è particolarmente ottimale, io so farlo solo in formato testo e mi va bene, ora vorrei che i numeri appaiono in GRAFICO cioè immagini già create del tipo 0 1 2 3...9.gif o 9.jpg quindi cosa posso fare?
Tieni utilizza questo mio codice e spiegami come posso agiungere il comando per far apparire i numeri in grafica.

CODICE:

<?
$var=@fopen("contatore.txt",'r');
$leggi=@fread($var,filesize("contatore.txt"));
@fclose($var);
if ($leggi==null){
$leggi=1;
}
else{
$leggi=$leggi+1;
}
$var=@fopen("contatore.txt",'w');
@fwrite($var,$leggi);
@fclose($var);
echo "Sei il Visistatore ",$leggi,"
";
?>

FINE CODICE

Questo è il codice php per un contatore di pagine semplice in formato testo.

Grazie per l'aiuto e ancora complimentoni! [^]

MessaggioInviato: gio mar 27, 2008 7:06 pm
da M@ttia
Beh ti serve avere il numero da visualizzare (nel tuo caso $leggi), dopodiché con operazioni matematiche puoi ricostruire le varie cifre (esempio 135 = 100 + 30 + 5 -> 1 3 5), salvandole ad esempio come variabili a1,a2, ..., ak e in seguito anziché fare echo "sei il visitatore $leggi" scrivi una cosa del tipo:

Codice: Seleziona tutto
echo '<img src=' . a1 . '.jpg>........<img src =' . ak . '>';

MessaggioInviato: ven mar 28, 2008 1:53 pm
da giovix84
M@ttia ha scritto:Beh ti serve avere il numero da visualizzare (nel tuo caso $leggi), dopodiché con operazioni matematiche puoi ricostruire le varie cifre (esempio 135 = 100 + 30 + 5 -> 1 3 5), salvandole ad esempio come variabili a1,a2, ..., ak e in seguito anziché fare echo "sei il visitatore $leggi" scrivi una cosa del tipo:

Codice: Seleziona tutto
echo '<img src=' . a1 . '.jpg>........<img src =' . ak . '>';


Scusami ma non sono un genio
perché non potrei semplicemente visualizzare i numeri in immagine ?

anche perché non so fare quella cosa matematica che dici tu... mi faresti il codice completo?

MessaggioInviato: ven mar 28, 2008 2:19 pm
da M@ttia
Beh se tu vuoi stampare ad esempio 135, non hai sicuramente l'immagine 135.gif (o fai forse conto di salvarti 10 miliardi di immagini per ogni numero possibile?), quindi devi "spezzarlo" nelle cifre che lo compongono (1,3,5 nell'esempio) e stampare questi 3 numeri in successione, così che come immagine complessiva riformi il 135.

La divisione del numero in cifre, come puoi vedere dall'esempio sopra, la si ottiene dividendo per 10,100,1000,... (divisione intera, e si continua a dividere il resto). Basta trovare quale sia il più grande numero per quale dividere (es. 135 si inizia a dividere per 100), e poi giù giù fino al 10.

[per scoprire da quale numero iniziare il modo più semplice è il logaritmo in base 10 del numero iniziale, arrotondato verso il basso, cioè togliendo tutto quello dopo la virgola).

MessaggioInviato: ven mar 28, 2008 2:38 pm
da giovix84
beh teoricamente ho capito, ma non basta mettere da 0 a 9 le immagini in una cartella e poi chiamarle del tipo 0.gif , 1.gif ,2.gif ecc...? in base al numero si mette l'immagine corrispondente!
mi scriveresti il codice php completando quello che ho creato io?

MessaggioInviato: ven mar 28, 2008 3:21 pm
da M@ttia
giovix84 ha scritto:beh teoricamente ho capito, ma non basta mettere da 0 a 9 le immagini in una cartella e poi chiamarle del tipo 0.gif , 1.gif ,2.gif ecc...? in base al numero si mette l'immagine corrispondente!

Beh se sono il visitatore 80456987 significa che tu in quella cartella avresti 80456987 immagini di numeri? Spero tu riesca a comprendere che la cosa oltre a non avere senso è anche praticamente irrealizzabile...

Quello che tu devi avere è 0.gif, 1.gif, ... ,9.gif e null'altro, dopodiché sostituisci

echo "Sei il Visistatore $leggi";

con

Codice: Seleziona tutto
$max = pow(10, floor(log10($leggi)));

while($max !=0)
{
$current = floor($leggi / $max);
echo '<img src="' . $current . '.gif" alt="">';
$leggi = $leggi % $max;
$max= floor($max/10);
}

MessaggioInviato: ven mar 28, 2008 3:57 pm
da giovix84
M@ttia ha scritto:
giovix84 ha scritto:beh teoricamente ho capito, ma non basta mettere da 0 a 9 le immagini in una cartella e poi chiamarle del tipo 0.gif , 1.gif ,2.gif ecc...? in base al numero si mette l'immagine corrispondente!

Beh se sono il visitatore 80456987 significa che tu in quella cartella avresti 80456987 immagini di numeri? Spero tu riesca a comprendere che la cosa oltre a non avere senso è anche praticamente irrealizzabile...

Quello che tu devi avere è 0.gif, 1.gif, ... ,9.gif e null'altro, dopodiché sostituisci

echo "Sei il Visistatore $leggi";

con

Codice: Seleziona tutto
$max = pow(10, floor(log10($leggi)));

while($max !=0)
{
$current = floor($leggi / $max);
echo '<img src="' . $current . '.gif" alt="">';
$leggi = $leggi % $max;
$max= floor($max/10);
}




GRAZIE [applauso+] [auguri] [rotolo]

era quello che cercavo! Mi serviva solo quello, ho capito che dovevo avere i numeri all'infinito io volevo solo quello che i numeri in testo cambiavano in grafica ogni numero era associato all'immagine corrispondente. ora una piccola cosa per ingrandire i numeri mi consigli di crearli grandi quanto mi servono oppure conosci un trucchetto per aumentarli? comunque sei davvero un grande nn puoi immaginare da quanto tempo sto impazzendo! GRAZIE oggi è anche il mio compleanno non immagini che regalone!