Allegato controllo dimensioni

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Volevo fare un controllo sul peso massimo che può avere un file nel mio form. Ho fatto così:

PHP:
	$dimensione_massima=1048576; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
	$dimensione_massima_Kb=$dimensione_massima/1048576;	
	if($_FILES['allegato']['size']>$dimensione_massima){
		$ok_ko.="Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
	}

Tuttavia non funziona, che sbaglio? La dimensione massima dovrebbe essere 1Mb (il php.ini non centra nulla poichè è settato a 2 mega)

Credo sia proprio sbagliato
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Nulla di fatto purtroppo....

Ho cambiato così:

PHP:
	if ($_FILES['allegato']['size'] > 524288 ){
		$ok_ko.="Allegato troppo grande, massimo 512 Kb! <br />";
	 }

Se uppo un file di 3 o 4 kb mi compare l'errore, perchè? Dove sbaglio?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
La cosa bella è che se non metto allegati, comunque mi compare il messaggio d'errore :\

Gli allegati vengono gestiti così

PHP:
	for($k=0; $k < count($_FILES['allegato']['name']); $k++){ 
		$mail->AddAttachment($_FILES['allegato']['tmp_name'][$k],$_FILES['allegato']['name'][$k]); 
	}

Non è che è un problema la cartella temporanea?

Ho provato così
PHP:
	$maxSize = 614400;
	if ($_FILES['allegato']['tmp_name']['size'] > $maxSize) {
	$ok_ko.="Allegato troppo grande! <br />";
	}
nemmeno va.. Invia sempre la mail in questo caso
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Certo ecco il file completo d'invio:

PHP:
<?php 

date_default_timezone_set('Europe/Rome');

session_start(); 

if ($_POST['jscheck'] == "yes"){

if(!isset($_SESSION['p']) || $_SESSION['p'] != $_POST['accesso']){
    echo 'Errore: la sessione non esiste o hai tentato l\'accesso diretto a questa pagina.';
	echo '<br />Soluzione: per inviare un nuovo messaggio devi necessariamente tornare indierto e ricaricare la pagina.';
	echo '<br />Stai per essere reindirizzato automaticamente al form.';
	echo "<meta http-equiv='Refresh' content='5; URL= ../index.php'>";
    exit; 
}else{ 
    unset($_SESSION['p']); 
    require_once "connessione.php"; 
    $mumero_massimo=50; 
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate"));
    $id=$dati['id']; 
    $data=$dati['data']; 
    $quante=$dati['numero']; 
	$oggi=date("d-m-Y");   
    if($oggi == $data){  
        $up=mysql_query("UPDATE inviate SET numero=numero+1 WHERE id=$id");  
    }else{  
        $up=mysql_query("UPDATE inviate SET data= '$oggi', numero=0  WHERE id=$id");  
    }  
	
if(isset($_POST['Submit'])){

	$fromemail = $_POST['maildichiinvia'];
	$oggetto = $_POST['oggetto']; 
	$messaggio = $_POST['editor1']; 
	$verif_box = $_POST["verif_box"];
	
	$ok_ko="";
	if(!filter_var($fromemail, FILTER_VALIDATE_EMAIL)){ 
		$ok_ko.="L'indirizzo $fromemail non è valido o vuoto<br />"; 
	}  
	if($oggetto ==""){ 
		$ok_ko.="Non hai scritto l'oggetto della mail.<br />"; 
	} 
	if($messaggio =="" || strlen($messaggio)< 8){
		$ok_ko.="Messaggio vuoto o troppo corto (min 8 caratteri compresi i tag html)<br />"; 
	}  
	if(!filter_var(!empty($verif_box) || is_numeric($verif_box) || md5($verif_box).'a4xn' == $_COOKIE['tntcon'])){
		$ok_ko.="Il codice di verifica non è corretto. Ricorda che non può essere vuoto e può contenere solo numeri.<br />"; 
		}
		
	$tipi_ammessi=array('jpg', 'JPG','gif','png', 'zip','txt');
	if(!in_array($_FILES['allegato']['name'], PATHINFO_EXTENSION), $tipi_ammessi){ 
		$ok_ko.="il tipo di file che vuoi allegare non è ammesso<br />"; 
	} 	

	if($ok_ko !=""){
		echo $ok_ko; 
		echo "<meta http-equiv='Refresh' content='5; URL=../index.php'>";
		exit;
	}else{

	require_once 'class.phpmailer.php';  

	$mail = new PHPMailer();  
	$mail->IsHTML(true);

	$msg = stripslashes($messaggio); 
	 
	  $mail->AddReplyTo("[email protected]");
	  $mail->AddAddress("[email protected]"); 
	  $mail->From = $fromemail;  
	  $mail->Subject = $oggetto;  
	  $mail->AltBody = 'Usa un editor mail compatibile con l\'html per vedere il messaggio!'; 
	  $mail->Body = $msg;
	
	for($k=0; $k < count($_FILES['allegato']['name']); $k++){ 
		$mail->AddAttachment($_FILES['allegato']['tmp_name'][$k],$_FILES['allegato']['name'][$k]); 
	} 
	
	$mail->Send();
	setcookie('tntcon','');
		
	} 
	
} 

	} 

}else{ 
	echo 'Javascript disabilitato. Devi abilitarlo per poter inviare le mail.';
	echo "<meta http-equiv='Refresh' content='5; URL=../index.php'>";
	exit;
	}

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>E-Mail Inviata</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style></head>

<body>
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">

Email inviata. Grazie.<br />
<br />
<a href="http://forum.mrwebmaster.it/index.php">Invia un'altra mail.</a>

</td>
</tr>
</table>
</body>
</html>


Questa è la parte del form che interessa l'allegato:


HTML:
	<script type="text/javascript" src="./js/relCopy.jquery.js"></script>
	<script type="text/javascript">
		$(function(){
		var removeLink = ' <a class="remove" style="color:#8F8F8F;" href="#" onclick="$(this).parent().slideUp(function(){ $(this).remove() }); return false"><input type="button"value="Rimuovi"></a>';
		 
		$('a.add').relCopy({ limit: 0, append: removeLink});
		});
	</script>


PHP:
				<fieldset>
				<p><label for="mex" >Allega file</label></p>
				<p class="clone"><input type="file" name="allegato[]" id="allegato" class='input' /></p>
				<p class="a"><a href="#" class="add" rel=".clone"><input type="button"value="Aggiungi Allegato"></a></p>
				</fieldset>

Sai aiutarmi per caso?
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Scusa, forse è l'ora tarda, ma nel tuo codice il controllo delle dimensioni non lo vedo..
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non capisco perche non debba funziare

PHP:
$dimensione_massima=1048576; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
    $dimensione_massima_Kb=round(($dimensione_massima/1024),1); //se come detto vuoi esprime in kb con una cifra decimale
    if($_FILES['allegato']['size']>$dimensione_massima){
        $ok_ko.="Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
    }

p.s.
per sicurezza io forzo a intero (int)$_FILES['allegato']['size']

ps al p.s
la k di chilo secondo le norme deve essere minuscola
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Giusto per curiosità, prova a effettuare il controllo su un file locale e non su un allegato.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Giusto per curiosità, prova a effettuare il controllo su un file locale e non su un allegato.

Mha sembra tutto ok, comunque la cosa strana è che il codice postato da borgo

PHP:
	$max_ammesso=1048576; 
	if((int)$_FILES['allegato']['size']>$max_ammesso ){  
		$ok_ko.="Grandezza allegato non ammessa, massimo $max_ammesso byte cioè 1 Mb!<br />";  
	}

Invia le mail, però è come se non rispettasse il limite....

Mi sorge un dubbio $max_ammesso=1048576; è espresso in byte no?
Non è che la colpa è dl php.ini? però se nell' ini il massimo è 2Mb se io lo riduco a 1 non dovrebbe funzionare?
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Se elimino (int) non mi fa inviare le mail e mi compare il messaggio d'errore anche se non metto alcun allegato.. Non è che è l'host?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
$_FILES['allegato']['size'] ritorna il valore in bit
per verificare metti il solito var_dump

PHP:
$max_ammesso=1048576; 
var_dump($_FILES['allegato']['size']);//posta cosa ti da
    if((int)$_FILES['allegato']['size']>$max_ammesso ){  
        $ok_ko.="Grandezza allegato non ammessa, massimo $max_ammesso byte cioè 1 Mb!<br />";  
    }
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
ciao
$_FILES['allegato']['size'] ritorna il valore in bit
per verificare metti il solito var_dump

PHP:
$max_ammesso=1048576; 
var_dump($_FILES['allegato']['size']);//posta cosa ti da
    if((int)$_FILES['allegato']['size']>$max_ammesso ){  
        $ok_ko.="Grandezza allegato non ammessa, massimo $max_ammesso byte cioè 1 Mb!<br />";  
    }

array(1) { [0]=> int(6890) } con un file di pochi kb
array(1) { [0]=> int(1622016) } con un file di un mb e mezzo :V, il valore che è uscito è sicuramente più elevato del limite :S

Se il valore è in bit allora 1 Mb è 8388608 giusto? Ho usato questo http://www.matisse.net/bitcalc/?input_amount=1&input_units=megabytes&notation=legacy
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Mha sembra tutto ok, comunque la cosa strana è che il codice postato da borgo ?
Quindi con un file locale il controllo funziona? Giusto per scrupolo ho provato:
PHP:
if ($_FILES['file']['size'] <= 1048576)
{
echo "Tutto bene";
}
else
{
echo "Attenzione! Superato il limite di 1MB";
}
Nessun problema.
 
Discussioni simili
Autore Titolo Forum Risposte Data
L [PHP e FTP upload] controllo file allegato PHP 6
D SALVARE "MASCHERA" + "ALLEGATO PDF" IN UN UNICO PDF MS Access 0
I [PHP] inviare form con allegato tramite una mail PHP 1
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
otto9due Creare immagine dinamica timer (come esempio allegato) jQuery 4
V PHPmailer allegato PHP 0
P Nome del file allegato alla email inviata con CDOSYS Classic ASP 0
A Creare da form un PDF da inviare come allegato. PHP 1
D Email con allegato PHP 2
marino51 non riesco a caricare un allegato percgè non riesco a ridimensionare la finestra Supporto Mr.Webmaster 0
1 Errore di istallazione programma vb2010 con access in allegato MS Access 8
M Mail in html con allegato non coesistono? PHP 6
B Problema form mail per invio doppio allegato PHP 1
A Problema allegato email PHP 2
I scrivere solo il percorso (e nome file) di un file allegato (type="file") PHP 1
L Sviluppare form mail con allegato PHP 6
L come passare il campo allegato dal file html al fiel php per spedirlo con un form PHP 12
V problemi con l'invio di allegato in un form PHP 17
R invio email php con allegato PHP 1
A allegato form PHP 14
Task Mc Allegato in form PHP 3
M email con allegato PHP 3
M form mail con allegato e immagine Classic ASP 4
E Form invio e-mail con allegato PHP 51
E Form invio e-mail con allegato PHP 0
N PhpMailer e salvataggio allegato sul server PHP 11
N Form invio Mail con Allegato PHP 2
S Memorizzare nome file allegato da form registrazione PHP 1
M Form non parte l'allegato.... PHP 5
A Aiuto per form email con allegato PHP 4
metalgemini PHPmailer non arriva allegato PHP 10
piccino PHPMailer: inserire allegato PHP 5
D For invio mail-allegato con smtp PHP 9
M invio email con più di un allegato PHP 1
M [Cerco retribuito] Form info varie con allegato FLASH + PHP Offerte e Richieste di Lavoro e/o Collaborazione 0
A allegato in invio e-mails PHP 2
E aiuto form allegato.con funzione mail PHP 8
E allegato via mail tramite form php PHP 7
A Mail con allegato sul server PHP 3
I problema a mandare allegato pdf con phpmailerl PHP 2
N errore visualizzazione allegato jpg PHP 6
C Inviare mail con allegato PDF non uppato PHP 2
D Problema con allegato tramite form mail PHP 2
rollobix Form Mail con file allegato Presenta il tuo Sito 8
N problema:mail con allegato a piu utenti da db PHP 17
L [CSS] Div e menu sovrapposti, attributi 'absolute', 'relative' (schema in allegato) HTML e CSS 0
K newsletter con allegato e html Classic ASP 5
R PhpMailer inserire Allegato PHP 1
S invio allegato con webmail PHP 0
L PhpMailer - Scrivere su file e spedire come allegato PHP 1

Discussioni simili