Form invio file multipli

Se non riusciamo a zippare i file che l'utente mi invia, dovrei fare diversamente.
Creo 6 campi nella tabella ordine ed carico i file che l'utente mi invia dentro una cartella e salvo il percorso nel db credi che cosi sarà possibile?
 
ciao
sto cercando di fare delle prove, ma ho dei problemi con la classe
mo è comunque venuto un piccolo dubbio, sto cercando di capire se i file sono caricati nella cartella temp
 
allora io ho trovato lo sbaglio. Non trova i file da zippare,
quindi credo che bisogna caricare i file nella cartella uploads con un ciclo for credo...
dopodichè bisogna Creare lo zip e inserire i file che sono stati caricati dentro la cartella uploads,
salvare lo zip, ed eliminare i file. se riesci fammelo sapere io sto facendo delle prove
 
$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name'];

$archivia = new ZipArchive();
$nome_file = time().".zip";
$archivia->open($nome_file, ZIPARCHIVE::CREATE);

foreach ($lista as $nome_immagine) {

$file = basename($nome_immagine);
/*operazioni di upload*/

$primonumeronome = rand(1,9);
$secondonumeronome = rand(1111,9999);
$terzonumeronome = rand(1, 111);
$quartonumeronome = rand (1, 11112);
$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;


move_uploaded_file($nome_immagine, $nomefile);

$info = pathinfo($nome_immagine);

echo "estenzione ".$info['extension'], "\n";


$archivia->addFile('$nomefile');





}

come faccio ad estrapolare il formato del file? cosi non funziona
 
PHP:
<?php


$lista = $_FILES['files']['tmp_name'];
 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  
 
foreach ($lista as $nome) {

   $file = ($nome);
   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   
   move_uploaded_file($file, $nomefile.".txt");
      
   $archivia->addFile($nomefile.".txt");
   




  }

   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");
?>

Questo script che ho creato funziona solo se carichiamo i file .txt come faccio da un file temporaneo a trovare l'estenzione
 
POSTO LO SCRIPT VINCITORE =)


PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<?php


$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name']; 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  

foreach ($bomba as $estenzione) {
$n= 0;


$info = pathinfo($estenzione); 
 $estenzion[$n] = $info['extension'];
 echo $estenzion[$n] ;

$estenzion ++ ;
}

 
foreach ($lista as $nome) {

   $file = ($nome);

   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   $n = 0;
   move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
      
   $archivia->addFile($nomefile.".".$estenzion[$n]);
   $n ++;

//PROVO A ESTRAPOLARE L'ESTEZIONE



   
  }

   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");

 ?>


<form id="" action="" method="post" enctype='multipart/form-data'>
<input id="file" name="files[]" type="file" multiple="multiple">
<input type="submit" value="carica">
</form>
</body>
</body>
</html>
 
ciao
sembrerebbe che finalmente tu sia riuscito.
c'è un però, così ad una prima occhiata ho un dubbio, ma può essere che sbagli.
prova ad archiviare tre file con estenzioni diverse es imm_1.jpg, imm_2.png e imm_3.gif
poi guarda nello zip cosa trovi
 
Ultima modifica:
ciao
secondo me devi correggere i due foreach, da
PHP:
<?php
//.....
foreach ($bomba as $estenzione) {
	$n= 0;//1° giro $n==0, 2° giro $n torna ==0, ecc...
	$info = pathinfo($estenzione); 
	$estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro rimane $estenzion[0]
	echo $estenzion[$n] ;
	//forse qui intendevi $n++ ?
	$n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==0 ->$n==1,ecc...
}
//.....
?>
portando fuori la variabile di incremento, a
PHP:
<?php
//.....
$n=0;
foreach ($bomba as $estenzione) {
	//1° giro $n==0, 2° giro $n==1, ecc...
	$info = pathinfo($estenzione); 
	$estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro $estenzion[1],ecc...
	echo $estenzion[$n] ;
	//forse qui intendevi $n++ ?
	$n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==1 ->$n==2,ecc...
}
//.....
?>
ne ho scritto solo uno, ma l'altro è la stessa cosa
poi se vuoi ritrovarti solo con lo zip e non i file non zippati
PHP:
<?php
//......
	move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
	$archivia->addFile($nomefile.".".$estenzion[$n]);
	unset($nomefile.".".$estenzion[$n]);
	$n ++;
	//PROVO A ESTRAPOLARE L'ESTEZIONE
}
//...........
?>
altro dubbio.
dato che ti fai caricare i file io valuterei la possibilità di caricare solo certi tipi di file (doc,txt,pdf,jpg,png,gif) perche, anche se zippato, non è mai sicuro avere un bel file .exe o altra estenzione eseguibile
prima di fare tutto lo zippaggio
PHP:
<?php
$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name'];
$ammessi=array('doc','txt','pdf','jpg','png','gif');//e altri che ti interessano
foreach($bomba as $ch => $val){
	$est = pathinfo($val);
	 if(!in_array($est,$ammessi)){
	 	unset($lista['files']['tmp_name'][$ch]);//elimino i file non ammessi
		unset($bomba['files']['name'][$ch]);
	 }
}
if(!is_array($bomba){//tutti i file non ammessi
	exit();//e rinnvio al form pulito
}
//....
?>
prova e sappimi dire
 
scusa sono preso un po dall agitazione e non mi sta riuscendo riassemblare il codice mi puoi mandare lo script finito? ti prego
 
Cosi funziona!!
GRAZIE MILLE MA cè un errore quando elimina i file mi dice che cè un carattere inaspettato e quindi lo commentato per adesso.
Dove inserisco lo script per controllare il file?
Ti ringrazio tanto tanto!

PHP:
<?php

$lista = $_FILES['files']['tmp_name'];
$bomba = $_FILES['files']['name']; 
 
 $archivia = new ZipArchive(); 
$nome_file = time().".zip"; 
$archivia->open($nome_file, ZIPARCHIVE::CREATE);  

//PRIMO PASSAGGIO
$n=0; 
foreach ($bomba as $estenzione) { 
    //1° giro $n==0, 2° giro $n==1, ecc... 
    $info = pathinfo($estenzione);  
    $estenzion[$n] = $info['extension'];//1°giro $estenzion[0], 2° giro $estenzion[1],ecc... 
    echo $estenzion[$n] ; 
    //forse qui intendevi $n++ ? 
    $n++;//1° giro se era $n==0 ->$n==1, 2° giro se era $n==1 ->$n==2,ecc... 
} 

 $n=0;
foreach ($lista as $nome) {

   $file = ($nome);

   /*operazioni di upload*/

    $primonumeronome = rand(1,9);
	$secondonumeronome = rand(1111,9999);
	$terzonumeronome = rand(1, 111);
	$quartonumeronome = rand (1, 11112);
	$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
   
   echo $file;
   
   
   
   move_uploaded_file($file, $nomefile.".".$estenzion[$n]); 
    $archivia->addFile($nomefile.".".$estenzion[$n]); 
    //unset($nomefile.".".$estenzion[$n]); 
    $n ++; 
    
} 



   echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
$archivia->close(); 
move_uploaded_file($nome_file, time().".zip");

 
?>
 
ciao
prova a vedere se funzia, come detto ho dei problemi con la classe zip
PHP:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<body>
<?php
if(isset($_POST['carica'])){//altrimenti come fa a sapere php che hai dato il submit?
	$lista = $_FILES['files']['tmp_name'];
	$bomba = $_FILES['files']['name']; 
	//qui il controllo del tipo di file ammessi
	$ammessi=array('doc','txt','pdf','jpg','png','gif');//e altri che ti interessano
	foreach($bomba as $ch => $val){
		$est = pathinfo($val);
	 	if(!in_array($est,$ammessi)){
	 		unset($lista['files']['tmp_name'][$ch]);//elimino i file non ammessi
			unset($bomba['files']['name'][$ch]);
	 	}
	}
	if(!is_array($bomba){//tutti i file erano non ammessi
		//dai un avviso e ritorni al form pulito o dove vuoi tu
		//io metto al form pulito, con un ritorno dopo 3 secondi
		echo "tutti i file eliminati<br />";
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		exit();//e rinnvio al form pulito
	}
	$archivia = new ZipArchive(); 
	$nome_file = time().".zip"; 
	$archivia->open($nome_file, ZIPARCHIVE::CREATE);  
	$n= 0;
	foreach ($bomba as $estenzione) {
		$info = pathinfo($estenzione); 
		$estenzion[$n] = $info['extension'];
		echo $estenzion[$n],"<br />" ;
		$n ++ ;
	}
	$n = 0;
	foreach ($lista as $nome) {
		$file = ($nome);
		/*operazioni di upload*/
		$primonumeronome = rand(1,9);
		$secondonumeronome = rand(1111,9999);
		$terzonumeronome = rand(1, 111);
		$quartonumeronome = rand (1, 11112);
		$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
		echo $file;
		move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
		$archivia->addFile($nomefile.".".$estenzion[$n]);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile.".".$estenzion[$n]);
		$n ++;
		//PROVO A ESTRAPOLARE L'ESTEZIONE
	}
	echo "Sono stati zippati: " . $archivia->numFiles . " file.\n"; 
	$archivia->close(); 
	move_uploaded_file($nome_file, time().".zip");
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}else{
?>
<!-- ti conviene mettere l'avviso -->
tipo file ammessi: .doc, .txt, .pdf, .jpg, .png, .gif<br />
i file non ammessi verranno eliminati<br />
<form id="" action="<?php htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype='multipart/form-data'>
<input id="file" name="files[]" type="file" multiple="multiple">
<input type="submit" name="carica" value="carica">
</form>
<!-- link per uscire -->
<?php
}
?>
</body>
</html>
poi mi sai dire
 
ciao
prova a fare queste correzzione ettendo degli echo (o dei var_dump) per verificare che i vari nomi siano sorretti
PHP:
<?php
//......
		$nomefile = $primonumeronome ."". $secondonumeronome ."". $terzonumeronome ."". $quartonumeronome;
		echo $file;
		move_uploaded_file($file, $nomefile.".".$estenzion[$n]);
		$archivia->addFile($nomefile.".".$estenzion[$n]);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile.".".$estenzion[$n]);
		$n ++;
//.......

?>
correggi in
PHP:
<?php
//......
		$nomefile = $primonumeronome .$secondonumeronome .$terzonumeronome .$quartonumeronome.".".$estenzion[$n];
		echo "sposto $file con nome $nomefile<br />";//così vedi meglio poi puoi anche toglierla
		move_uploaded_file($file, $nomefile);
		$archivia->addFile($nomefile);
		//qui se vuoi eliminare i file originali, altrimenti la togli o la commenti
		unset($nomefile);
		$n ++;
//.......
	$archivia->close();
	$dove_spostare="cartella/";
	$nuovo_nome_zip=$dove_spostare.time().".zip";
	echo "spsosto $nome_file con nome $nome_file<br />";
    move_uploaded_file($nome_file, $nome_file);
//......
?>
 
per spostare il file zip lo devi spostare al momento della sua creazione
PHP:
   $archivia->open("PERCORSOFILE/".$nome_file, ZIPARCHIVE::CREATE);
 

Discussioni simili