Aiuto per immagini via FTP

  • Creatore Discussione Creatore Discussione filminci
  • Data di inizio Data di inizio

filminci

Nuovo Utente
6 Ott 2009
19
0
0
Ciao a tutti, sono nuovo del forum.

Non so se questa è la sezione giusta per chiedere aiuto ma ci provo.... purtroppo non sono programmatore per cui ho bisogno di aiuto per una questione.

Il mio problema è il seguente:

Ho delle immagini che finiscono via ftp in una cartella sul server; avrei bisogno di una pagina che mi presenta le anteprime di tutte le immagini nella cartella con la possibilità di "checkarle" (quindi selezionare quali vanno bene e quali no) e con un pulsante di invio mi dia la possibilità di spostare i file con il check in un'altra cartella e contemporaneamente cancellare quelli senza check...

Grazie
 
Ribadisco che non sono un programmatore ma cercando un pò in rete ed andando a tentativi sono riuscito a metter su questo codice...

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);


$file_ary = isset($_POST['rfile']) ? $_POST['rfile'] : array();

/**
* At first visit, show the file list
*/
if (empty($file_ary))
{
//$image_path = 'path';
$image_path = dirname(__FILE__) . '/';
$dir_handle = null;

if (!($dir_handle = opendir($image_path)))
{
//trigger_error('error, path not found');
return;
}
$html = '<html><form method="post">';
$file = readdir($dir_handle);

while ($file)
{
$html .= "<img src=\"{$file}\" width=\"150\" /><br />{$file}<input type=\"checkbox\" name=\"rfile[]\" value=\"{$file}\" /><br /><br />\r\n";
$file = readdir($dir_handle);
}
closedir($dir_handle);

$html .= '<input type="submit" name="submit" value="INVIA" />';
$html .= "</form></html>";
echo $html;
}

/**
* Now, we have list..
*/

if (!empty($file_ary))
{
echo (int) empty($file_ary);
echo '<pre>';
$path = $_POST['rfile'];
for ($i=0; $i<count($path); $i++) {
if(@unlink("./".$path[$i])) {echo "Immagine cancellata ".$path[$i]; }
else{echo "Immagine non cancellata";} }
$cartella = opendir('.');
while ($file2 = readdir($cartella)) {
$file_array2[] = $file2;
}
$dir_path = './gallery';
copy($file2, $dir_path);
echo '</pre>';

}

?>


Praticamente mi esce la lista delle immagini con le anteprima, metto il check a quelle che voglio cancellare e lascio senza check quelle che voglio spostare e clicco su "INVIA": la cancellazione è ok ma non c'è spostamento in quanto mi da il seguente errore..

Warning: copy() [function.copy]: Unable to access in /percorso.../check.php on line 61

check.php è il nome del file in cui c'è il codice in alto....
 
ciao
dovrei guardare tutto lo script, ma ad una prima occhiata sembra che ci sia un errore di percorso
prova a mettere un punto in più

$dir_path = '../gallery';
 
Mi da lo stesso errore...

gallery è il nome della cartella che si trova all'interno di quella dove si trovano le foto che devono essere controllate
 
ciao
se gallery è una cartella dentro la cartella in cui ci sono le foto da controllare prova allora a togliere
$dir_path = 'gallery';

dove hai la pagina con lo script?
 
ciao
prova una cosa
1. commenta la riga
//copy($file2, $dir_path);
2.
subito prima della riga sopra inserisci questo codice
var_dump($file2);
var_dump($dir_path);

quando chiami la pagina dovrebbe restituirti es.
string(9) foto.jpg
string(22) gallery/foto.jpg
o qualcosa di simile

fammi sapere cosa ti restituisce
 
Dunque, innanzitutto ti ringrazio per il tempo che stai perdendo :fonzie:

Ho fatto così:
1) Ho applicato le modifiche;
2) Ho richiamato la pagina e selezionato una delle foto per cancellarla;
3) Ho cliccato su "INVIA";

E' uscita fuori la seguente stringa:

Immagine cancellata 1248515633-001A89BF533A-25072009077.jpgbool(false)
string(8) "/gallery"
 
ciao
mi sembra che tu avessi detto che la cancellazione era ok, era lo spostamento che non funzionava, giusto?
prova a spostare una foto togliendo il commento al copy, ma lascia i var_dump (li toglierai quando tutto[spero]funzi)
e dimmi cosa ottieni
 
Infatti la cancellazione è ok.

Cmq esce questo mettendo prima copy e poi le 2 righe

Warning: copy() [function.copy]: Unable to access in /home/consolep/public_html/images/negozio/img/check.php on line 61

bool(false)
string(8) "/gallery"

Ma non è che dipende dal fatto che cerca di copiare se stesso (cioè il file check.php)???
Come potrei fare per selezionare solo i file immagine da copiare??
 
Mhmm non so che dire, io ho semplicemente adattato un codice trovato in rete per cui non escludo che vi sia un errore....
 
Ciao, non ho tempo adesso di leggere il tuo script, ma te ne faccio uno io. Se vuoi adattalo a quello che hai oppure usa semplicemente questo. Eccolo qui, testato e funzionante:
PHP:
<?php
// DEVI MODIFICARE QUESTE IMPOSTAZIONI
$gallery = 'gallery'; // percorso delle immagini
$move = 'moved_gallery'; // percorso delle immagini spostate
// FINE DELLE IMPOSTAZIONI - TI CONSIGLIO DI USARE PERCORSI ASSOLUTI

if(isset($_POST['submit']))
{
	foreach($_POST['box'] as $img)
		copy("{$gallery}/{$img}", "{$move}/{$img}");
	
	$op = opendir($gallery);
	while(false !== ($read = readdir($op)))
	{
		if($read != '.' && $read != '..' && $read != '.htaccess')
			unlink("{$gallery}/{$read}");
	}
	closedir($op);
}
?>
<html>
	<head>
		<title>Images Manager v1.0</title>
		<style type="text/css">
		body, table, td { font-family:Verdana; font-size:11px; }
		td { padding:5px; }
		a img { border:none; }
		</style>
	</head>
	<body>
		<div align="center">
			<h1>Images Manager</h1>
			<form name="delete" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
				<input type="submit" name="submit" value="Invia" /> <br /> <br />
				
				<table border="1">
					<tr>
						<td><b>Anteprima</b></td>
						<td><b>Marca</b></td>
						<td><b>Anteprima</b></td>
						<td><b>Marca</b></td>
						<td><b>Anteprima</b></td>
						<td><b>Marca</b></td>
					</tr>
					<?php
					$counter = 0;
					
					$op = opendir($gallery);
					while(false !== ($read = readdir($op)))
					{
						if($read != '.' && $read != '..' && $read != '.htaccess')
						{
							if($counter %3 == 0)
								echo '</tr> <tr>';
							
							echo '<td><a href="'. $gallery .'/'. $read .'"><img src="'. $gallery .'/'. $read .'" width="320" height="240" alt="Ingrandisci" /></a></td>';
							echo '<td><input type="checkbox" name="box[]" value="'. $read .'" /></td>';
							
							$counter++;
						}
					}
					?>
				</table>
				
				<br /> <input type="submit" name="submit" value="Invia" />
			</form>
		</div>
	</body>
</html>

Devi personalizzarlo (variabili all'inizio del file). Ti consiglio di usare i percorsi assoluti, ad esempio, nel mio caso sarebbero stati:
PHP:
<?php
// DEVI MODIFICARE QUESTE IMPOSTAZIONI
$gallery = '/var/www/images/gallery'; // percorso delle immagini
$move = '/var/www/images/moved_gallery'; // percorso delle immagini spostate
// FINE DELLE IMPOSTAZIONI - TI CONSIGLIO DI USARE PERCORSI ASSOLUTI
?>
In questo modo non puoi sbagliare il percorso delle cartelle! Ti ricordo che per funzionare lo script deve avere permessi 0777. Inoltre, per sicurezza, ti consiglio di provare prima con delle immagini di esempio per vedere se è quello che fa al caso tuo. Ma se ho capito bene non dovrebbero esserci problemi di sorta.
 
Ciao, non ho tempo adesso di leggere il tuo script, ma te ne faccio uno io. Se vuoi adattalo a quello che hai oppure usa semplicemente questo....

FUNZIONA!!!!!!!!!!
:beer::beer::beer:

Grazie mille, è proprio quello che mi serviva, GRAZIE MILLE!!!

Cmq ho provato con i percorsi relativi e funziona benissimo lo stesso.

:fonzie:



EDIT: scusa se ti rompo ancora, ma non si potrebbe aggiungere un pulsante "seleziona tutti"??? ... ehm... grazie....
 
Ultima modifica:
Mhmmmm....

Visto che quelle da cancellare sono di solito poche, sarebbe meglio se il sistema di default le "checkasse" tutte (e quindi bisognerebbe deselezionare solo quelle da cancellare), oppure, al contrario, che si devono checkare solo quelle da cancellare
 
Dunque, prova ad impostare una checkbox che all'evento onchange fa scattare una funzione che imposta il parametro checked di tutte le checkbox recuperate con getElementsByName a true. Così:
Codice:
function checkAll()
{
  var boxes = document.getElementsByName('box');
  for(i = 0; i <= boxes.length; i++)
  {
    var elem = document.delete.box[i];
    if(elem.checked)
      elem.checked = false;
    else
      elem.checked = true;
  }
}

Non sono sicuro che funzioni, ma non dovrebbe dare particolari problemi. Se hai problemi dì pure :-)
 

Discussioni simili