File

  • Creatore Discussione Creatore Discussione ispanic
  • Data di inizio Data di inizio

ispanic

Utente Attivo
28 Ago 2014
119
0
0
Ciao ragazzi, c'è un modo tramite php, per prendere dei file, in modo random, da una cartella per metterli poi dentro ad una pagina?
 
Meglio sarebbe se ogni file avesse un corrispettivo in una tabella del database e con una semplice query ORDER BY rand() estrai un numero a scelta di file random.

Inviato con Tapatalk Free da Android
 
SELECT * FROM tabella_file ORDER BY RAND() LIMIT 0,1

l'order by te li ordina casualmente e ne estrae il numero scritto dopo 0, ... se metti 0,1 ne estrae 1 se metti 0,5 ne estrae 5

bisogna vedere che tipo di file sono e come li vuoi estrarre per fare il php.

Inviato con Tapatalk Free da Android
 
Ultima modifica:
ciao
sensa passare da un db
PHP:
<?php
$file=glob("cartella/*.*");//leggi i nomi di tutti i file della cartella
//NOTA: il 2 asterisco può indicare il tipo di file es. glob("cartella/*.txt") per cui glob estrae solo i nomi dei file testo
shuffle($file);//randomizzo l'array
//poi uso es il dato di indice 0
$lines = file($file[0]);//leggo il file estratto casualmente
?>
 
ciao
sensa passare da un db
PHP:
<?php
$file=glob("cartella/*.*");//leggi i nomi di tutti i file della cartella
//NOTA: il 2 asterisco può indicare il tipo di file es. glob("cartella/*.txt") per cui glob estrae solo i nomi dei file testo
shuffle($file);//randomizzo l'array
//poi uso es il dato di indice 0
$lines = file($file[0]);//leggo il file estratto casualmente
?>

Ciao Borgo, grazie mille, però così facendo io randomizzerei tutte le immagini, io invece vorrei prendere sempre due immagini vicine, che si chiameranno sempre in ordine:
1.jpg
2.jpg
eccetera..
E metterle a random (due-due) vicino.. con questo codice si può fare qualcosa?
Inoltre per stamparle poi a video, dovrei usare:
PHP:
echo '<img src="$file[0]"/>';
no? il problema è che non funge
 
ciao
per capirsi:
tu hai una serie di foto chiamate, es., 1.jpg, 2.jpg,... 100.jpg
e vorresti che venissero a due a due così
4.jpg e 5.jpg o 72.jpg e 73.jpg o ecc....
è così?
se sì prova
PHP:
<?php
$file=glob("cartella/*.jpg");//leggi tutti i file immagini
//queste righe poi le togli sevono per vedere se legge
echo "<pre>";
var_dump($file);
echo "</pre>";
//------
//eventualmente se serve riordina l'array con sort($file) o natsort($file)
$n=count($file);//conti quanti sono
$fine=$n-2;//l'array parte da zero e in modo che il massimo sia es 99.jpg
$ran=rand(0,$fine);//estrai un numero casule compreso tra zero e $n-2
echo "<img src=\"".$file[$ran]."\"/><img src=\"".$file[$ran+1]."\"/>";  
//....
?>
 
ciao
per capirsi:
tu hai una serie di foto chiamate, es., 1.jpg, 2.jpg,... 100.jpg
e vorresti che venissero a due a due così
4.jpg e 5.jpg o 72.jpg e 73.jpg o ecc....
è così?
se sì prova
PHP:
<?php
$file=glob("cartella/*.jpg");//leggi tutti i file immagini
//queste righe poi le togli sevono per vedere se legge
echo "<pre>";
var_dump($file);
echo "</pre>";
//------
//eventualmente se serve riordina l'array con sort($file) o natsort($file)
$n=count($file);//conti quanti sono
$fine=$n-2;//l'array parte da zero e in modo che il massimo sia es 99.jpg
$ran=rand(0,$fine);//estrai un numero casule compreso tra zero e $n-2
echo "<img src=\"".$file[$ran]."\"/><img src=\"".$file[$ran+1]."\"/>";  
//....
?>

Sì proprio così, niente da fare però.. mi potresti spiegare a cosa serve questa parte:
PHP:
$fine=$n-2;
comunque non riesco a stampare a video, mi da questo sulla pagina web:
PHP:
< '; ?>
 
ciao
intanto ti spiego cosa è quel
PHP:
$fine=$n-2;
con un esempio
se hai come detto 1.jpg, 2.jpg,... 100.jpg immagini, l'array sarà
$file[0] con valore cartella/1.jpg
$file[1] con valore cartella/2.jpg
.....
$file[99] con valore cartella/100.jpg
ricorda gli indici degli array partono da 0, non da 1

con count($file) ottieni 100
come vedi però gli indici vanno da 0 e 99, ma non solo per avere la equenza consecutiva devi avere
$file[numero_random] e $file[numero_random + 1]
quindi se per caso la funzione rand usata così
$ran=rand(0,valore_del_count - 1)
ti restituisce 99 i valori diventano $file[99] e $file[100], ma l'elemento con indice 100 non esiste, quindi errore
per cui in questo caso impostando il range del random tra 0 e 98 (= count($file)-2), quindi nel caso tu ottenessi 98 hai
$file[98] e $ file[99]
spero di essere stato chiaro, altrimenti chiedi.

per l'altro problema verifica di aver messo giusto gli apici (io uso i doppi)
e prova a mettere tra parentesi $file[($ran+1)]
quindi prova a sciverla così
PHP:
echo "<img src=\"".$file[$ran]."\"/><img src=\"".$file[($ran+1)]."\"/>";
oppure, se usi gli apici singoli
PHP:
echo '<img src="'.$file[$ran].'"/><img src='".$file[($ran+1)].'"/>';
 
ciao
intanto ti spiego cosa è quel
PHP:
$fine=$n-2;
con un esempio
se hai come detto 1.jpg, 2.jpg,... 100.jpg immagini, l'array sarà
$file[0] con valore cartella/1.jpg
$file[1] con valore cartella/2.jpg
.....
$file[99] con valore cartella/100.jpg
ricorda gli indici degli array partono da 0, non da 1

con count($file) ottieni 100
come vedi però gli indici vanno da 0 e 99, ma non solo per avere la equenza consecutiva devi avere
$file[numero_random] e $file[numero_random + 1]
quindi se per caso la funzione rand usata così
$ran=rand(0,valore_del_count - 1)
ti restituisce 99 i valori diventano $file[99] e $file[100], ma l'elemento con indice 100 non esiste, quindi errore
per cui in questo caso impostando il range del random tra 0 e 98 (= count($file)-2), quindi nel caso tu ottenessi 98 hai
$file[98] e $ file[99]
spero di essere stato chiaro, altrimenti chiedi.

per l'altro problema verifica di aver messo giusto gli apici (io uso i doppi)
e prova a mettere tra parentesi $file[($ran+1)]
quindi prova a sciverla così
PHP:
echo "<img src=\"".$file[$ran]."\"/><img src=\"".$file[($ran+1)]."\"/>";
oppure, se usi gli apici singoli
PHP:
echo '<img src="'.$file[$ran].'"/><img src='".$file[($ran+1)].'"/>';

Grazie mille, ho capito perfettamente!
Mi rimane sempre il problema dell'echo.. che non riesce a stampare a video, mi visualizza solo un'immagine corrotta e il codice in php come se non fosse chiuso
 
ciao
li non posso aiutarti, devi verificare il codice, probabilmente da qualche parte hai qualche apice nonb chiuso, un dubbio potrebbe essere nel nome delle immagini, per caso c'è qualche apice nel nome?
hai usato il var_dump? se si cosa ti riporta?
 
PHP:
"; var_dump($file); echo ""; $n=count($glob); $fine=$n-2; $random=rand(0, $fine); echo 'immagine 1 e immagine 2 (solo l'icona del corrotto o della non presenza)'; ?>
Anche se non ho capito a cosa serve il var_dump.. a stampare a video le informazioni delle immagini?
 
ciao
il var_dump dovrebbe darti in output, qualcosa di simile
array(xy) {
[0]=>
string(14) "cartella/1.jpg"
[2]=>
string(14) "cartella/2.jpg"
ecc....
}
dove: xy è il numero di elementi dell'array
e
[0]=> string(14) "cartella/1.jpg"
l'elemento di indice 0 contiene la stringa di 14 caratteri cartella/1.jpg
ecc...

comunque quello che hai postato è l'outpt della tua pagina?
se è quello NON stai usando una pagina php
 
O mio dio che ritardato.. comunque mi stampa
array(2) {
[0]=>
string(17) "caricamenti/1.jpg"
[1]=>
string(17) "caricamenti/2.jpg"
}
 
Ultima modifica:
ciao
il var_dump dovrebbe darti in output, qualcosa di simile

dove: xy è il numero di elementi dell'array
e
[0]=> string(14) "cartella/1.jpg"
l'elemento di indice 0 contiene la stringa di 14 caratteri cartella/1.jpg
ecc...

comunque quello che hai postato è l'outpt della tua pagina?
se è quello NON stai usando una pagina php

Risolto, grazie MILLE!
 
intanto il file PHP che stupidamente non avevo rinominato e poi un errore riguardante gli apici, perchè ho l'abitudine che se anche chiedo, preferisco leggere e imparare il metodo e poi chiudere la pagina e provarci da solo, quindi avevo sbagliato degli apici, sei stato gentilissimo! :)
 
ciao
io farei così
PHP:
<?php
function random_dispari($i,$f){//estrae solo i dispari nell'intervallo $i-$f
	$r=0;
	while($r%2 ==0){//se pari continua, se dispari esce
		$r=rand($i,$f);
	}
	return $r;
}
//--test--
echo random_dispari(0,100);
?>
evidente che devi aggiungere la function al tuo scrip e sosituire ran(x,y) con random_dispari(x,y)
attento però a gestire bene gli indici dell'array
 
Ultima modifica:

Discussioni simili