catturare e rinominare jpg

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Ciao a tutti.
avrei bisogno di un aiuto per realizzare uno slideshow, il problema è che sul mio sito carico ogni 5 minuti una fotografia che ha sempre lo stesso nome (webcam.jpg) ed al momento non posso fare diversamente.
Quindi avrei bisogno di catturare automaticamente ogni 30 minuti la fotografia webcam.jpg, rinominarla in maniera sequenziale (es. 1.jpg, 2.jpg ecc) e salvarla in una cartella chiamata "oggi".
Inoltre alle 00.01 di ogni giorno il contenuto della cartella "oggi" dovrebbe essere spostata in una cartella chiamata "ieri" sovvrascrivendo le foto esistenti.
Spero di non chiedere troppo :angel:
 
ciao
potresti fare così
carichi in una cartella es. chiamata temporanea la foto webcam.jpg
PHP:
<?php
//.....
$adesso=time();
$nuovo_nome="oggi/".$adesso.".jpg";//non so i tuoi percorsi come sono
//sposti nella cartella oggi
if(move_uploaded_file("temporanea/webcam.jpg",$nuovo_nome)){
	echo "foto caricata con successo";
}else{
	echo "errore";
}
$mezzanotte=date("h:i");//ritorna a mezzanotte 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
	//leggi le immagini nelle due cartelle oggi e ieri
	$ieri=glob("ieri/*.jpg");
	$oggi=glob("oggi/*.jpg");
	//elimini le vecchie in ieri vuotando la cartella
	foreach($ieri as $valore){
		unlink("ieri/$valore");
	}
	//e sposti da oggi a ieri
	foreach($oggi as $valore){
		move_uploaded_file("oggi/$valore","ieri/$valore");
	}
}
//.........
?>
guarda che però:
- è solo un'idea comunque da provare e perfezionare
- devi lanciare ogni volta lo script, altrimenti devi ricorre a qualche croonjobs
 
Ultima modifica:
Grazie per la risposta velocissima.
Penso sia la strada giusta ;)
Il percorso della foto è: webcamwrt160/wrt160.jpg
Se non ho capito male il tuo script rinomina la foto con l'ora e va bene lo stesso.
Ho fatto un paio di prove ma non riesco a copiare wrt160.jpg rinominata in "oggi", dove sbaglio?

PHP:
<?php
//.....
$adesso=time();
$nuovo_nome="webcamwrt160/".$adesso.".jpg";//non so i tuoi percorsi come sono
//sposti nella cartella oggi
if(move_uploaded_file("webcamwrt160/wrt160.jpg",$nuovo_nome)){
echo "foto caricata con successo";
}else{
echo "errore";
}
$mezzanotte=date("h:i");//ritorna a mezzanotte 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
//leggi le immagini nelle due cartelle oggi e ieri
$ieri=glob("webcamwrt160/ieri/*.jpg");
$oggi=glob("webcamwrt160/oggi/*.jpg");
//elimini le vecchie in ieri vuotando la cartella
foreach($ieri as $valore){
unlink("ieri/$valore");
}
//e sposti da oggi a ieri
foreach($oggi as $valore){
move_uploaded_file("oggi/$valore","ieri/$valore");
}
}
//.........
?>

Inoltre non capisco a cosa serve una cartella "temporanea" infatti la foto è già caricata nel percorso che ti ho detto prima (webcamwrt160/wrt160.jpg), non è sufficente spostarla in "oggi" rinominandola?
 
Ultima modifica di un moderatore:
ciao
l'ho chiamata temporanea perchè non sapevo dove veniva caricata l'immagine wrt160.jpg
comunque da quello che ho capito
1. l'immagine wrt160.jpg si carica nella cartella webcamwrt160
2. da qui la devi spstare (rinominata) nella cartella oggi. la cartella oggi è una sottocartella di webcamwrt160 (giusto?)
3. anche la cartella ieri è una sottocartella di webcamwrt160?
se è cosi ti rimetto a posto lo script

dimenticavo:
lo script che deve rinominare dove risiede, dentro webcamwrt160? o al suo esterno? perche i percorsi devono essere fatti in base a dove risiede lo script
 
Ultima modifica:
Gentilissimo !!!
1 - l'immagine wrt160.jpg si carica nella cartella webcamwrt160, e la utilizzo già per pubblicare la webcam.
2 - Si, la dovrei catturarla ogni 30 minuti, rinominarla (1.jpg, 2.jpg......48.jpg) e mettere la foto rinominata in webcamwrt160/oggi lasciando invariata la wrt160.jpg originale.
3 - Si, anche la cartella "ieri" è dove dici te: webcamwrt160/ieri
4 - Lo script posso metterlo tranquillamente in: webcamwrt160/

Grazie
 
ciao
per numerarle come vuoi tu (1.jpg, 2.jpg) può diventare più difficilem ma usabdo time il valere di $adesso cambia ogni secondo quindi se lanci lo script ogni 30 minuti
il valore di time (è un numero intero di 12 cifre) si incrementa di 1800 (30 min * 6a sec) quindi non va a sovrascriverti le foto in oggi.
e per quello poi in ieri le elimino, perchè non ci sarà mai una foto che abbia lo stesso nome.
si puo fare anche come dici tu però quando carichi la prima foto devi
1. verificare che sia la prima (cioe oggi senza foto) dargli il nome 1.jpg e caricarla
2. quando carichi la/le successiva/e devi verificare quante foto ci sono di gia in oggi e incrementare il numero di uno
PHP:
<?php
//.....
/*
se lo script risiede nella cartella webcamwrt160 i percorsi sono quelli dello script sotto
se è esterno i percorsi diventano
"webcamwrt160/wrt160.jpg"
"webcamwrt160/oggi/".$adesso.".jpg";
"webcamwrt160/ieri/*.jpg"
"webcamwrt160/oggi/*.jpg"
ecc...
se e esterno ma in una sua cartella
"../webcamwrt160/wrt160.jpg"
"../webcamwrt160/oggi/".$adesso.".jpg";
ecc....
*/
$adesso=time();
$nuovo_nome="oggi/".$adesso.".jpg";
//sposti nella cartella oggi
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 123456789333.jpg
	echo "foto caricata con successo";
}else{
	echo "errore";// qui sta a te decidere cosa fare
}
$mezzanotte=date("h:i");//ritorna a mezzanotte, 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
	//leggi le immagini nelle due cartelle oggi e ieri
	$ieri=glob("ieri/*.jpg");//glob crea un array con il nome delle immagini
	$oggi=glob("oggi/*.jpg");//come puoi notare glob accetta le whilcard *
	//elimini le vecchie in ieri vuotando la cartella
	//anche qui sarebbe opportuno verificare per impedire eventuali errori con blocco dello script
	if(is_array($ieri)){//se non è un array vuol dire che la cartella ieri era vuota
		foreach($ieri as $valore){
			unlink("ieri/$valore");
		}
	}
	//e sposti da oggi a ieri
	//stesso controllo
	if(is_array($oggi)){
		foreach($oggi as $valore){
			move_uploaded_file("oggi/$valore","ieri/$valore");
		}
	}
}
//.........
?>
come gia detto pero ogni mezz'ora devi lanciare lo scrip manualmente
potresti risolvere lascando la pag sempre collegata e tramite js farla ricaricare ogni mezzora, oppure come detto usare un cron, ma per questo, risiedendo nel server, devi chidere al tuo provider
poi mi è venuto un dubbio sulla verifica di mezzanotte, appena l'ho risolto eventualmente te lo posto
 
ciao
ecco qua il dubbio ho fatto un "marchiano" errore di logica
se carichi una foto alle ore 00.00
$mezzanotte diventa 00:00
se a mezzazotte e mezzo ne carichi un'altra
$mezzanotte cambia il suo valore da 00:00 a 00:30
quindi la condizione $mezzanotte == 00:01 non è mai soddisfatta
devo riguardare il tutto
scusa, un po' di pazienza e riposto
 
Scusa ma forse mi sono spiegato male.
L'indicazione mezzanotte è indicativa.
il wrt160.jpg originale viene aggiornato automaticamente ogni 5 minuti (upload via ftp da router collegado a webcam).
il php che stai creando deve catturare, rinominare e salvare questa foto ogni 30 minuti (vediamo dopo come per l'automatismo di partenza del php).
Supponiamo che io faccia partire il php ad indervalli di 30 minuti a partire dalle 00.15 otterrei quanto segue:
00.15 cattura immagine e salvataggio in "oggi" con nome 0.jpg
00.45 cattura immagine e salvataggio in "oggi" con nome 1.jpg
01.15 cattura immagine e salvataggio in "oggi" con nome 2.jpg ecc.
Se alle 00.05 di ogni giorno sposti e cancelli il contenuto di "oggi" in "ieri" non dovrebbero esserci problemi (almeno credo), infatti alle 00.15 verrebbe scritta la prima foto in "oggi con nome 0.jpg ed io per fare lo slide show punterei le immagini contenute in "oggi" ed "ieri"
Spero di essermi spiegato meglio, comunque rimango a disposizione ;)
 
ciao
ecco questo dovrebbe funzionare indipendentemente da quando carichi le immagini
ogni volta che carichi
1 prima muove l'imm rinominata in oggi
2 contenporaneamente verifica se ci sono in oggi immagini di ieri e se si le sposta in ieri
3 veifica in ieri e se ci sono imm vecchie le elimina
PHP:
<?php
//.....
$oggi=time();//legge il tempo in timestamp nel momento in cui carichi la foto
$ieri=$oggi-(24*60*60);
$ieri_altro=$oggi-(2*24*60*60);
//trasformo il timestamp
$oggi=date("d_his,$oggi");//$oggi diventa es. 24_194327 (giorno 24, ore 19, 43 min, 23 sec)
$nuovo_nome="oggi/".$oggi.".jpg";
//sposti nella cartella oggi
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 123456789333.jpg
	echo "foto caricata con successo";
}else{
	echo "errore";// qui sta a te decidere cosa fare
}
//leggi le immagini nelle due cartelle oggi e ieri
$imm_di_oggi=glob("oggi/*.jpg");//glob crea un array con il nome delle immagini
$imm_di_ieri=glob("ieri/*.jpg");
//trasformo anche il valore di $ieri ma solo il numero del giorno
$ieri=date("d",$ieri);
//verifichiamo che ci siano immagini in oggi
if(is_array($imm_di_oggi)){// se non è un array non ci sono immagini
	foreach($imm_di_oggi as $valore){
		//guardo che giorno o stata caricata l'immagine
		$gg=explode("_", $valore);
		if($gg[0]==$ieri){//l'immagine è stata caricata il giorno prima quindi devo spostarla
			move_uploaded_file("oggi/$valore","ieri/$valore");
		}
	}
}
//trasformo anche il valore di $ieri_altro ma solo il numero del giorno
$ieri_altro=date("d",$ieri_altro);
//verifichiamo che ci siano immagini in ieri
if(is_array($imm_di_ieri)){// se non è un array non ci sono immagini
	foreach($imm_di_ieri as $valore){
	//guardo che giorno o stata caricata l'immagine
	$gg=explode("_", $valore);
	if($gg[0]==$ieri_altro){
		unlink("ieri/$valore");
	}
}
?>
provalo e sappimi dire
 
Grazie, purtroppo ora devo uscire ma provo domani mattina provo e ti faccio sapere.
A domani
 
contrordine, non devo uscire:)
Ho caricato lo script con nome new1.php in webcamwrt160/new1.php (stessa cartlella dove viene oggiornata wrt160.jpg).
Ho aspettato che la foto fosse caricata via ftp per un paio di volte ma la cartella webcamwrt160/oggi rimane vuota :( (logicamente rimane vuota anche webcamwrt160/ieri).
Ho provato anche a lanciare un paio di vote il php con explorer ma non cambia niente........
Per sicurezza ho anche verificato che lo script abbia i permessi a 777.
Comunque, se riusciamo a farlo funzionare, hai avuto un'ottima idea, io non avevo pensato ad usare l'ora di upload della foto per fare la cattura :fonzie:
 
ciao
se il l'immagine wrt160.jpg viene caricata in webcamwrt160 e ooi non viene rinominata e spostata in oggi i casi possono essere due
o il move-upload non funzia (problemi di permessi?) e allora dovrebbe darti l'avviso "errore"
o c'è qualcosa che non va nei percorsi e te la salva chissa dove
dai un occhio all'ultimo post del 3d http://forum.mrwebmaster.it/php/30334-file-upload-ridimensionamento.html, c'era un problema simile
comunque prova una cosa, metti var_dump e commenta provvisoriamente le righe dell'if-else
se non carica in oggi logicamente non puo caricare in ieri
PHP:
<?php
//.........
$nuovo_nome="oggi/".$oggi.".jpg";
var_dump($nuovo_nome);//dovrebbe restituirti string(xx) "oggi/25_090845.jpg" o simile
//sposti nella cartella oggi
var_dump(move_uploaded_file("wrt160.jpg",$nuovo_nome); //dovrebbe darti se non funzia bool (FALSE)
/*
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi
    echo "foto caricata con successo";
}else{
    echo "errore";// qui sta a te decidere cosa fare
} 
*/
//.........
?>
poi dimmi cosa riportano

dimenticavo non lo script deve avere i permessi ma le cartelle
 
Ultima modifica:
Scusa per il ritardo della risposta ma oggi il lavoro mi ha tenuto occupato.
Premetto che la cartella webcamwrt160 ha utti i permessi come del resto anche le sottocartelle "oggi" ed "ieri".
Lanciando il php (webcamwrt160/new1.php) con explorer ottengo il seguente errore:
Parse error: syntax error, unexpected $end in /var/www/miosito/webcamwrt160/new1.php on line 41
Sembra quasi manchi un pezzo di script, dove ho sbagliato ?
 
Ho paura di non aver capito qualcosa.
Io ho copiato (paripari) lo script che hai creato in una nuova pagina di notepad++ e l'ho salvato come new1.php sul sito nella cartella webcamwrt160/ dove c'è la wrt160.jpg , ho creato anche webcamwrt160/oggi e webcamwrt160/ieri dando i permessi a cartelle e files (tutti a 777)
Ho provato a controllare la sintassi ma, visto la mia scarsa conoscenza di php, non ho torvato ninte di strano.
Potresti cortesemente ricontrollarmelo? Già che hai fatto tanto sarebbe bello vederlo funzionare ;).
Ciao
 
ciao
ecco funzia, testato
mi ero dimenticato (il caldo) che glob restituisce come valore caretella/immagine.jpg, mentre a noi, per le verifiche, serve immagine.jpg
quindi ho aggiunto dove serve la funzione basename e fatto altre piccole modifiche (leggi i commenti)
e messo un paio di echo per seguire lo script (che se non ti servono) puoi togliere
PHP:
<?php
//.....
$oggi=time();//legge il tempo in timestamp nel momento in cui carichi la foto
$ieri=$oggi-(24*60*60);
$ieri_altro=$oggi-(2*24*60*60);
//trasformo il timestamp
$oggi=date("ymd_his",$oggi);//$oggi diventa es. 24_194327 (giorno 24, ore 19, 43 min, 23 sec)
$nuovo_nome="oggi/".$oggi.".jpg";
//sposti nella cartella oggi
if(file_exists("wrt160.jpg")){//messo perche se lanci lo script e non c'è wrt160.jpg da errore e si blocca al rename
	if(rename("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 120625_082424.jpg
    	echo "foto spostata con successo";
	}else{
    	echo "errore";// qui sta a te decidere cosa fare
	}
}
//leggi le immagini nelle due cartelle oggi e ieri
$imm_di_oggi=glob("oggi/*.jpg");//glob crea un array con il nome delle immagini
$imm_di_ieri=glob("ieri/*.jpg");
//trasformo anche il valore di $ieri ma solo il numero del giorno
$ie=date("ymd",$ieri);
//verifichiamo che ci siano immagini in oggi
if(is_array($imm_di_oggi)){// se non è un array non ci sono immagini
	foreach($imm_di_oggi as $valore){
        $valore=basename($valore);//$valore era es. oggi/120625_082424.jpg con basename diventa 120625_082424.jpg
		//guardo che giorno o stata caricata l'immagine
        $gg=explode("_", $valore);
        if($gg[0] <= $ie){//l'immagine è stata caricata il giorno prima quindi devo spostarla
			rename("oggi/$valore","ieri/$valore");
			echo "spostato $valore da oggi a ieri";
        }
    }
}
//trasformo anche il valore di $ieri_altro ma solo il numero del giorno
$ieri_altro=date("ymd",$ieri_altro);
//verifichiamo che ci siano immagini in ieri
if(is_array($imm_di_ieri)){// se non è un array non ci sono immagini
    foreach($imm_di_ieri as $valore){
    	$valore=basename($valore);//vedi nota precedente
		//guardo che giorno o stata caricata l'immagine
    	$gg=explode("_", $valore);
    	if($gg[0]<=$ieri_altro){
        	unlink("ieri/$valore");
			echo "eliminato $valore da ieri";
    	}
	}
}
?>

ho caricato (dun paio di volte) un file wrt160.jpg
e ottenuto in oggi 120627_105046.jpg e 120627_111509.jpg
rinominato (per accelerare) 120627_111509.jpg in 120626_111509.jpg
e l'immagine 120626_111509.jpg si è spostata in ieri
rinominata 120626_111509.jpg in 120625_111509.jpg
e la 120625_111509.jpg è stata eliminata
poi ti spiego perchè ho aggiunto alle date ym
 
Ultima modifica:
Semplicemente P E R F E T T O !!!
Ti ringrazio tantissimo, è proprio quello che mi serviva.
Testato da ieri e funziona perfettamente.
Ora posso procedere con lo slideshow :)
Ciao e grazie ancora
 
Sono semlicemente delle fotografie panoramiche fatte da una webcam.
Mi piaceva l'idea di creare anche uno slideshow ed ora posso farlo ;)
Ciao
 

Discussioni simili