Leggere file contenuti in cartella e modificarne il nome

Filippo Perpetua

Nuovo Utente
9 Mag 2015
2
0
0
Gentilissimi, grazie per questo forum.

vorrei sottoporvi una piccola problematica: ho un sistema che mi genera ogni 10 minuti un file con nome random ed estensione JPG trasferendolo su una cartella remota. Il mio obbiettivo è "normalizzare" il file rinominandolo sempre con lo stesso nome per poi poterlo visualizzare.

Dunque mi sono avvalso della seguente script con la quale aggiungendo un echo mi stampa a video il nome del file con relativa estensione (preciso che in cartella c'è un solo file). Il problema è che se uso la funzione copy, o rename, per disporre del file, mi risponde sempre con un

Filename cannot be empty in /home/content/04/5953004/html/webcams/test/legge.php on line 17
come se la variabile $webcam fosse sempre vuota.

Ecco, potreste darmi una mano in questo ? Credo che manchi qualcosa in sintassi ma non riesco a capire cosa.
Molte grazie.

PHP:
<?php
//Imposto la directory da leggere
$directory = "/home/content/04/5953004/html/webcams/test/";
// Apriamo una directory e leggiamone il contenuto.
if (is_dir($directory)) {
    //Apro l'oggetto directory
    if ($directory_handle = opendir($directory)) {
        //Scorro l'oggetto fino a quando non è termnato cioè false
        while (($webcam = readdir($directory_handle)) !== false) {
            //Se l'elemento trovato è diverso da una directory
            //o dagli elementi . e .. lo visualizzo a schermo
            if((!is_dir($webcam))&($webcam!=".")&($webcam!=".."))

$nuovo = $webcam;

copy($nuovo,'file.jpg');
				
				
        }
        //Chiudo la lettura della directory.
        closedir($directory_handle);
    }
}
?>
 
Ciao,
leggendo mi pare di capire che il problema principale derivi proprio dallo script.
Stai scorrendo tutti i files presenti nella cartella invece di operare una selezione casuale.

Ti consiglierei qualcosa di più compatto per adempiere allo scopo:
PHP:
$dir= '/home/content/04/5953004/html/webcams/test/';
$files = glob($dir . '*.jpg');

$random_pick = $files[array_rand($files)];

In ultimo, se devi mostarla immediatamente ha poco senso clonare la risorsa assegnandole un altro nominativo, in quanto hai già il filepath e puoi tranquillamente fare qualcosa del tipo:
PHP:
<img src="/percorso/via/url/della/cartella/<?php echo basename($random_pick); ?>">
 
@flameseeker, ho capito una cosa diversa e siccome l'ho anche provata, la posto

meglio aggiungere la directory dove si trova il file ....
ciao
Marino
PHP:
$directory = "c:/temp/"; 
if (is_dir($directory))
{ 
	if ($directory_handle = opendir($directory))
	{ 
		while (($webcam = readdir($directory_handle)) !== false)
		{ 
			if((!is_dir($webcam))&($webcam!=".")&($webcam!="..")) 
			{ 
				echo $webcam."<br />"; 

				copy($directory.$webcam, $directory.'file.jpg'); 
			}
		}
	}
        closedir($directory_handle); 
}
 
Molte grazie a tutti e due, Marino e @flameseeker.

Tuttavia ho dovuto usare la soluzione di Marino e per spiegare il perchè devo fare una precisazione. L'apparato di ripresa genera un file immagine JPG che non ha un nome fisso, è qualcosa randomizzato tipo 987iuhgljbv.jpg ed ogni upload cambia nome, quindi è impossibile richiamarlo via html perchè il suo nome muta di continuo, peraltro riempendo la cartella di file tutti di nomi diversi.
Di qui la necessità di cercare una soluzione da attivare via cron, che mi generi un file con un nome noto a partire dal randomizzato sorgente. E' essenziale però che quando la script venga eseguita, trovi sempre un solo file randomizzato appena caricato, quindi sarà molto utile aggiungere un

PHP:
$directorydest = "c:/dest/";

per fare in modo che la copia abbia come destinazione una cartella diversa da quella del sorgente

e poi ad ogni fine esecuzione sarà molto utile cancellare il file randomizzato sorgente in modo che alla nuova esecuzione, ci sia sempre un nuovo solo file presente. Ecco a questo proposito quale comando sarebbe utile per cancellare? Ad esempio attendendo 2 o 3 secondi prima di cancellarlo.

Sembra una banalità ma questa soluzione script è molto importante nei sistemi di sorveglianza, peraltro molto diffusi.
Grazie in anticipo.
 

Discussioni simili