caricamento file

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

ispanic

Utente Attivo
28 Ago 2014
119
0
0
Ciao ragazzi, per un caricamento file, come posso far sì di bloccare tutti i file che non siano immagini?
 
ti posto un esempio funzionante, nella funzione "GestisciFileToUpload" trovi quello che stai cercando,
nota solo che sono commentate le uscite per errore, essendo un esempio
ci sono anche le visualizzazioni di tutti i valori tornati dalla funzione di upload, estrai solo quello che ti serve
che mi sembra si capisca bene
ciao
Marino
PHP:
<?php

# http://localhost/test_site/php/test/_FileUploader.php

if (!empty($_POST['Submitted']))
{
  // estrae e stampa variabili e valori da $_POST
  extract($_POST, EXTR_OVERWRITE);

  print '<table width="800" border="0" cellspacing="5" cellpadding="5">';
  while(list($chiave, $valore)=each($_POST)){
    print "<tr><td>".$chiave." : </td><td>".${$chiave}."</td></tr>";
  }
  if (!GestisciFileToUpload()) exit;
  print "</table>";

  print "<br /><br /><a href='".$_SERVER['PHP_SELF']."'>TRY AGAIN</a>";
}
else
{
?>
<!DOCTYPE html>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
  <table width="500" border="0" cellspacing="5" cellpadding="5">
    <caption>&nbsp;</caption>
    <tr>
      <td colspan="2"><b>FILE UPLOADER</b></td>
    </tr>
    <tr>
      <td><label for="FileToUpload">FileToUpload :</label></td>
      <td><input type="file" name="FileToUpload" id="FileToUpload" /></td>
    </tr>
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="2"><input name="submit" type="submit" id="submit" value="Invia"></td>
    </tr>
  </table>
  <input type="hidden" name="Submitted" value="1" />
</form>
</html>
<?PHP
}

function GestisciFileToUpload() {
  global $FileToUpload, $errormsg;

  $FileToUpload = "";

  if ($_FILES["FileToUpload"]["error"] == 4)
    return true;
  else {
    if ($_FILES["FileToUpload"]["error"] > 0) {
      print "<font color=red>Upload Return Code: ".$_FILES["FileToUpload"]["error"]."</font><br />";
      return false;
  } }

  $FileToUpload_name = $_FILES["FileToUpload"]["name"];
  $FileToUpload_type = $_FILES["FileToUpload"]["type"];
  $FileToUpload_size = $_FILES["FileToUpload"]["size"] / 1024;
  $FileToUpload_temp = $_FILES["FileToUpload"]["tmp_name"];
  $FileToUpload_path = dirname($_FILES["FileToUpload"]["tmp_name"]);
  $FileToUpload      = $FileToUpload_path."/".$FileToUpload_name;


  $allowedExts = array("gif", "jpeg", "jpg", "png");

  $temp = explode(".", $_FILES["FileToUpload"]["name"]);
  $extension = strtolower(end($temp));
  if (!in_array($extension, $allowedExts)) {
    print "<font color=red>file extension not allowed</font><br />";
//    return false;
  }


  $allowedTypes = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png");

  if (!in_array(strtolower($_FILES["FileToUpload"]["type"]), $allowedTypes)) {
    print "<font color=red>file type not allowed</font><br />";
//    return false;
  }


  $maxallowedSize = 2000000;

  if ($_FILES["FileToUpload"]["size"] > $maxallowedSize) {
    print "<font color=red>file size exceeded</font><br />";
//    return false;
  }


  print "<tr><td>Upload : </td><td>".$FileToUpload_name."</td></tr>";
  print "<tr><td>Type : </td><td>".$FileToUpload_type."</td></tr>";
  print "<tr><td>Size (kB) : </td><td>".$FileToUpload_size."</td></tr>";
  print "<tr><td>Stored in : </td><td>".$FileToUpload_temp."</td></tr>";
  print "<tr><td>folder : </td><td>".$FileToUpload_path."</td></tr>";
  print "<tr><td>new file : </td><td>".$FileToUpload."</td></tr>";


  if (file_exists($FileToUpload)) {
    print "<font color=red>".$FileToUpload." a previous copy exists on the server<br />";
    print "it will be replaced by the newone</font><br />";
    unlink($FileToUpload);
  }

// move_uploaded_file($FileToUpload_temp, $UploadPath.$FileToUpload_name); <<-- non gestito

  rename ($FileToUpload_temp, $FileToUpload); 
  if (file_exists($FileToUpload)) {
    print "<font color=green>".$FileToUpload." file successfully uploaded</font><br />";
  }
  return true;
}
?>
 
Grazie mille Marino, mi spiegheresti cosa c'è di sbagliato nel mio script ( non l'ho ciclato con foreach per il semplice motivo che gli utente potrebbero caricare anche solo un'immagine, mentre deve essere obbligatorio caricarne due ).
PHP:
$direzione = "caricamenti/";
$tipi = array ("image/png", "image/jpg", "image/gif", "image/jpeg");

if(!in-array($_FILES['caricare_file']['type'],$tipi))
{

print ('errore');
exit;

}


if(is_uploaded_file($_FILES['caricare_file']['tmp_name']))
{

move_uploaded_file($_FILES['caricare_file']['tmp_name'],$direzione.$_FILES['caricare_file']['name']);
print ('La tua immagine è stata caricata <br>');

}


if(!in-array($_FILES['caricare_file_1']['type'],$tipi))
{

print ('errore');
exit;

}



if(is_uploaded_file($_FILES['caricare_file_1']['tmp_name']))
{

move_uploaded_file($_FILES['caricare_file_1']['tmp_name'],$direzione.$_FILES['caricare_file_1']['name']);
print ('La tua immagine è stata caricata <br>');

}


?>
Il problema che viene fuori pagina bianca, così facendo.. cosa ho sbagliato?
 
"in_array" si scrive con "underscore", la pagina bianca è dovuta a questo errore ( nelle 2 righe di codice )

in più ti suggerisco di sostituire

PHP:
$tipi = array ("image/png", "image/jpg", "image/gif", "image/jpeg");
con
PHP:
$tipi = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png");

e

PHP:
if(!in_array($_FILES['caricare_file']['type'],$tipi))
con
PHP:
if (!in_array(strtolower($_FILES["caricare_file"]["type"]), $tipi))

altrimenti potresti segnalare errore per file validi

per quanto riguarda la "pagina bianca", se sviluppi il tuo codice su un sistema windows,
e nessuno ha cambiato php.ini,
puoi trovare i messaggi di errore nel file phpXX_errors.log che trovi nel folder "C:\Windows\Temp"
XX è la versione di php, 53, 54, 55 ...

questo file esiste anche se lavori con linux, devi cercarlo perchè non so dove viene memorizzato
ciao
Marino
 
PHP Parse error: syntax error, unexpected 'image' (T_STRING), expecting ')' in / (line 4)
l'errore è questo.. ma la sintassi a me sembra corretta
 
PHP:
$tipi = array ( ("image/gif"), ("image/jpeg"), ("image/jpg"), ("image/pjpeg"), (image/x-png), (image/png));

risolto.. non volevo seguire questo consiglio, è proprio brutto da vedere, ma funziona
 
capisco sempre ... poco, ma trovo la seguente scrittura più consona, ed essendo stata provata, priva di errori
PHP:
$tipi = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png");
upload restituisce il tipo scritto sia in minuscolo sia parte in minuscolo e parte in maiuscolo, è più semplice la conversione che non scrivere tutti i casi previsti ...
ciao
Marino
 
o.O avevo scordato degli apici e con le parentesi sembrava funzionare, mentre non calcolava proprio l'array, scusami e grazie per i consigli e l'aiuto!
 
Ultima modifica:
capisco sempre ... poco, ma trovo la seguente scrittura più consona, ed essendo stata provata, priva di errori
PHP:
$tipi = array("image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png");
upload restituisce il tipo scritto sia in minuscolo sia parte in minuscolo e parte in maiuscolo, è più semplice la conversione che non scrivere tutti i casi previsti ...
ciao
Marino

Il problema è che così facendo se la prima è sbagliata, la seconda si può benissimo caricare, mentre io vorrei far sì che se anche una sola immagine è sbagliata lo script si ferma tutto immediatamente..
 

Discussioni simili