-
aggiornamento immagine
In una pagina (foto.htm) ho un form che invia un immagina ad una cartella tramite un file php (upload.php),che oltre a uplodare l'immagine gli assegna sempre lo stesso nome e poi rimanda alla pagina htm dove l'immagina (allenat.pgn) viene visualizzata.Il problema nasce dal fatto che la pagina htm viene visualizzata con l'immagine vecchia finche non faccio il refresh manuale della stessa.
Il problema credo stia nei cookie,ho provato diverse soluzioni ma nessuna buona.Consigli?
Posto il form nella pagina foto.htm
Codice HTML:
<form ENCTYPE="multipart/form-data" action="upload.php"
method="POST">
<input type="file" name="file1">
<input type="submit" value="upload"></form>
e la pagina upload.php
Codice PHP:
<?
$dimensione_massima=5120000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
$dimensione_massima_Kb=$dimensione_massima/1024;
$cartella_upload="public/"; //cartella in cui eseguire l'upload (controllare permessi scrittura)
// percorso cartella relativo $cartella_upload="../public/";
$filtrare=1; //filtrare x estensioni ammesse? 1=si 0=no
$array_estensioni_ammesse=array('','.jpeg','.jpg',''); //estensioni ammesse
if(!isset($_FILES['file1']) || $_FILES['file1']['size']==0){
echo "Nessun file selezionato per l'upload";
}elseif($_FILES['file1']['size']>$dimensione_massima){
echo "Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
}else{
$nome_file=$_FILES['file1']['name'];
$errore="";
if($filtrare==1){
$estensione = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, ".")));
if(!in_array($estensione,$array_estensioni_ammesse)){
$errore.="Upload file non ammesso. Estensioni ammesse: ".implode(", ",$array_estensioni_ammesse)."<br/>"; }
}
if(!file_exists($cartella_upload)){
$errore.="La cartella di destinazione non esiste</br>";
}
if($errore==""){
if(move_uploaded_file($_FILES['file1']['tmp_name'], $cartella_upload."allenat.jpeg")){
chmod($cartella_upload.$_FILES['file1']['name'],0777); //permessi per poterci sovrascrivere/scaricare
echo "<script>window.location='foto.htm';</script>";
}else{
echo "Impossibile effettuare l'upload del file";
}
}else{
echo $errore;
}
}
?>
-
Nell'header della pagina html metti questi tag
Codice PHP:
<META HTTP-EQUIV="Expires" CONTENT="0">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
Servono per non memorizzare i dati nella cache del browser.
Dovresti risolvere.
Prima di provare però svuota la tu cache.
-
Ho gia'provato in questo modo,e funziona,ma solo la prima volta che si carica un immagine,se ne carico subito dopo un altra sono punto e a capo probabilmente perchè la nuova immagine ha creato nuove cache.
Come si potrebbe risolvere?
-
La cache la crea il browser e se tu gli dici di non salvare nulla non dovrebbe restarci nulla in cache, anche cambiando 100 volte
-
Ti garantisco che funziona solo la prima volta,ho riprovato adesso diverse volte.
Stavo pensando a un meta refresh il problema è che se lo metto ogni pochi secondi finisco in un loop infinito,avrei bisogno che mi facesse UN solo refresh ogni volta che entro nella pagina foto.htm
-
Una curiosità, ma dopo l'upload, come ci torni alla pagina html?
-
Con:
echo"<script>window.location='foto.htm';</script>";
nel file php quando la foto viene caricata con successo.
Ma è lo stesso con 'header'.
Il sito è tra i preferiti...non so se puo'influire...
-
Puoi fornire una url dove provare quello che hai fatto?
-
Mmm..veramente no,sto provando tutto tramite la gestione dei file..ma il file php è completamente quello che ho postato e l'htm è un semplice htm con il form postato piu e un <img scr=...>che prende la foto dalla cartella in cui viene salvata sempre con lo stesso nome...
-
Non capisco come stai facendo le prove, ma per avere una misura coerente su quello che sarà, prova con le pagine così come le userai tu o i tuoi utenti.
-
ok...ho fatto un collegamento alla pagina incriminata
www.fantacalciojarno.altervista.org
basta cliccare sulla scritta 'fantacalciojarno' e verrai indirizzato alla pagina foto.htm
-
Potresti provare a sostituire
Codice PHP:
<meta http-equiv="Expires" content="0">
con
Codice PHP:
<meta http-equiv="Expires" content="Tue, 01 Jan 2000 12:12:12 GMT">
-
niente da fare....ne ho provate diverse anch io ma l'unica che mi sa che è valida è trovare il modo di fare un unico refresh come ti dicevo prima...se sai come si puo'fare.....cmq grazie per l aiuto
-
Mi viene in mente una prova che si può fare:
1) cambia l'estenzione del file foto.htm in foto.php
2) al posto di
Codice PHP:
<img border="2" src="public/allenat.jpeg" width="75" height="100">
metti
Codice PHP:
<img border="2" src="allenat.php?t=<?php echo date('YmdHis') ?>" width="75" height="100">
(in pratica aggiungo un attributo legato alla data e all'ora in modo che la pagina richiesta sia sempre diversa e quindi non sia in cache)
3) nella stessa cartella di foto.php crei il file allenat.php così:
Codice PHP:
<?php
/* FILE NAME: allenat.php */
function LoadJpeg($imgname)
{
/* Attempt to open */
$im = @imagecreatefromjpeg($imgname);
/* See if it failed */
if(!$im)
{
/* Create a black image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
return $im;
}
header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Content-Type: image/jpeg');
$img = LoadJpeg('public/allenat.jpeg');
imagejpeg($img);
imagedestroy($img);
?>
Il file non fa altro che mostrare l'immagine.
Fai sapere
-
Ho provato molto velocemente ma credo ci sia un piccolo problema perchè continua a caricare ma non visualizza e sembra che non carichi nulla anche se poi quando faccio il refresh manuale appare la nuova foto.
Ho fatto copia incolla senza controllare nemmeno un po il codice perchè adesso sto andando poi controllo meglio e ti faccio sapere
-
Ho fatto una prova ed ho visto che dopo l'upload torni alla pagina foto.htm.
Prova a tornare alla pagina foto.php, magari con lo stesso espediente dell'aggiunta del parametro data/ora
Codice PHP:
$t = date('YmdHis');
header('Location: foto.php?t='.$t);
-
Ciao Simpleticket,
internet mi aveva abbandonato e poi ho avuto un po di noie,con l'ultima modifica cmq funziona perfettamente,ti ringrazio tanto x l'aiuto,sei stato prezioso.