Il mio script è diverso ma il problema è questo:
Quando clicco sul pulsante incremento la visita, cosa che non vorrei che accadesse. Vorrei che il numero dentro il file si incrementasse solo quando accedo direttamente alla pagina o faccio un reflesh e non anche quando ci ritorno cliccando sul pulsante "indietro" del browser.Codice PHP:
<?php
class Problema {
public function Leggi($file) {
if (file_exists ( $file )) {
header ( 'Content-Description: File Transfer' );
header ( 'Content-Type: text/plain; charset=UTF-8' );
header ( "Expires: on, 01 Jan 1970 00:00:00 GMT" );
header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
header ( "Cache-Control: no-store, no-cache, must-revalidate" );
header ( "Cache-Control: post-check=0, pre-check=0", false );
header ( "Pragma: no-cache" );
header ( 'Content-Length: ' . filesize ( $file ) );
readfile ( $file );
exit ();
}
}
public function Download($file) {
$this->Leggi ( $file );
}
public function PreparaDownload() {
$variabilePOST = "x";
if (isset ( $_POST [$variabilePOST] )) {
$file = "file.txt";
$this->Download ( $file );
}
}
public function VisiteNonUniche() {
$file = "file.txt";
$v = 1;
if (file_exists ( $file )) {
$v = file_get_contents ( $file ) + 1;
}
file_put_contents ( $file, $v, LOCK_EX );
return $v;
}
}
$Prova = new Problema ();
$VisiteNonUniche = $Prova->VisiteNonUniche ();
$Prova->PreparaDownload ();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Problema</title>
</head>
<body>
<p>Visite: <?php print_r($VisiteNonUniche)?></p>
<form action="" method="post">
<input type="submit" value="Visualizza file" name="x">
</form>
</body>
</html>
Ciao
Ultima modifica di giannino1995; 28-06-2015 a 12:02
Più pratica in futuro...
Ciao, una domanda:
perché i metodi li scrivi tutti con le lettere maiuscole?
Anche quando crei un'istanza di una classe...
$Prova = new Problema ();
$VisiteNonUniche = $Prova->VisiteNonUniche ();
solo un appunto
Nessuna soluzione al mio caso?!?!![]()
Più pratica in futuro...
Abbi pazienza, ma dopo 8 pagine non credi sia meglio chiamare un programmatore?
Più che altro mi chiedo come mai tutti i tuoi 3d, dal semplice consiglio di un manuale di programmazione a quello più specifico riguardante il codice, si riducano a inevitabilmente a chilometrici mattoni di post?!?!![]()
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
Mi auguro che tu non stia pensando che il motivo per cui non hai ricevuto la risposta che cercavi sia perché i ragazzi che hanno partecipato alla discussione non siano abbastanza esperti da fornirtela.
Alla tua domanda iniziale ti hanno risposto immediatamente. Non ti hanno fornito anche il codice funzionante (che mi pare tu stia cercando da tutta la discussione) perché questa sezione non si occupa di scrivere codici su richiesta. Se era questa la tua richiesta iniziale puoi anche dirlo dall'inizio, senza portare tutti ai matti
Perché dalla domanda iniziale, che non dovrebbe richiedere più di un paio di post, si passa a trattare di piccoli problemi secondari che il più delle volte non c'entrano niente con la questione originale e si possono risolvere con la semplice lettura della documentazione o una ricerca su google. In questa discussione ho letto: fread non mi funziona; file_get_contents non funziona come mi aspetto; dovrei usare file_put_contents o fwrite? avete testato questo codice per me? potete fare il debug per conto mio? perché non funziona? perché si usa fopen e non file_get_contents? quale dei due sarà il più prestazionale a vostro avviso? che permessi devo dare alla cartella? vorrei che php potesse leggere il contenuto della cartella e quindi il file visite.txt dove dentro c'è il numero delle visite impedendo però al visitatore di leggere il contenuto della cartella utilizzando l'URL. Cosa c'è di sbagliato in questa funzione? Come faccio a fare il download di un file contenuto in una cartella protetta da un file .htaccess con php? Dentro l'action di form è giusto lasciare il campo vuoto? Non sto dimenticando qualcosa in quel punto? Vorrei capire più nel dettaglio se questo codice che scrivo è corretto/completo e soprattutto cosa fa'. Hai altre idee su come perfezionare questo pezzo sono felice di ascoltarti.? Vorrei che il numero dentro il file si incrementasse solo quando accedo direttamente alla pagina.Più che altro mi chiedo come mai tutti i tuoi 3d, dal semplice consiglio di un manuale di programmazione a quello più specifico riguardante il codice, si riducano a inevitabilmente a chilometrici mattoni di post?
Così scoraggia chiunque voglia aiutarlo. Insomma, qual'è la domanda?
Tra l'altro, pochi giorni fa abbiamo concluso un lavoro su un sito web, abbastanza impegnativo, e che ci ha costretti a scrivere una discussione di quasi 50 pagine. Al contrario, una discussione da 8 pagine per trattare un argomento così già approfondito ovunque, è una perdita di tempo. Non per chi partecipa (in minima parte), ma per l'OP stesso.
kurt, tranquillo il codice del contatore me lo scrivo da me. Chiaramente se nessuno sa rispondere alle mie domande significa che i quesiti che riporto sono troppo complessi oppure che coloro che sanno non vogliono rispondere oppure se ne infischiano non leggendo neppure la discussione, altre soluzioni, perdonami, non ne vedo.
Al problema sopra esposto c'è ne uno ben più grave che è quello riguardante i cookie. Come al solito vi posto solo il problema e non tutte le 600 righe di codice del mio script:
Codice PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Contavisite</title>
</head>
<body>
<?php
$durataCookie = time () + 60 * 60 * 24 * 365 * 1000;
$percorsoFile = $_SERVER ['DOCUMENT_ROOT'] . "/ECLIPSE/Contavisite/";
$tipoVisita = "vtu_cookie";
$nomeFile = $tipoVisita . ".txt";
$file = $percorsoFile . $nomeFile;
$v = 0;
if (file_exists ( $file )) {
$v = intval ( trim ( file_get_contents ( $file ) ) );
}
if (! isset ( $_COOKIE [$tipoVisita] )) {
setcookie ( $tipoVisita, 1, $durataCookie );
$v = $v + 1;
file_put_contents ( $file, $v, LOCK_EX );
}
echo "<p>Visite totali uniche dall'apertura del sito: " . $v . "</p>";
?>
</body>
</html>
Ho riguardato il codice centinaia di volte e sembra perfetto però i cookie che il browser crea sono a scadenza e non "infiniti" come in realtà mi aspetto di vedere. Dico "infiniti" perché ho impostato un periodo di scadenza molto alto (1000 anni). Googlando ho trovato altre persone con lo stesso problema, alcune dicono di aver risolto scegliendo un periodo di scadenza inferiore però se invece di 1000 anni scelgo un arco temporare più ragionevole (100 anni) personalmente non risolvo. Quando chiudo il browser i cookie scadono inesorabilmente. Non sono un programmatore ma questo php mi sembra che faccia acqua da tutte le parte poi ovviamente spero di sbagliarmi e di dovermi ricredere. Se sono costretto ad impostare un arco temporare più piccolo di un anno lo script francamente non ha senso. Sul sito di php, per contro, non leggo che scegliere 1000 anni sia una "cosa illegale".
Detto ciò, questa mi sembra una tipica domanda da forum, non vedo perché tutta questa scontrosità e tirannia nei miei confronti.
![]()
Ultima modifica di giannino1995; 02-07-2015 a 10:07
Più pratica in futuro...