php salvare file in campo blob mysql: massimo 4MB

  • Creatore Discussione Creatore Discussione Giulo77
  • Data di inizio Data di inizio

Giulo77

Utente Attivo
15 Mar 2018
30
0
6
47
Ciao a tutti sto utilizzando la libreria dropzone.js con tema bootstrap per salvare dei file con qualsiasi estensione in un db mysql questo il mio codice html:

HTML:
            <div id="container1" class="container" style="width:1270px; border: 4px ridge rgb(93,123,146); border-radius: 10px 10px 10px 10px;">
             <form action="uploadFile.php"  id="dropzone1">   
               <h3 style="margin-top: 8px">Capitolati tecnici</h3>         
               <div class="table table-striped files" id="previews1">
                 <div id="template1" class="file-row dz-image-preview">
                   <div>
                     <span class="preview"><img data-dz-thumbnail></span>
                   </div>
                   <div>
                     <p class="name" data-dz-name style="margin-top:2px !important; margin-bottom:2px !important"></p>
                     <strong class="error text-danger" data-dz-errormessage></strong>
                   </div>
                   <div>
                     <p class="size" data-dz-size style="margin-top:2px !important; margin-bottom:2px !important"></p>
                     <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0" style="margin-bottom:3px">
                       <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
                     </div>
                   </div>
                   <div>
                     <button data-dz-remove class="btn btn-danger delete">
                       <i class="glyphicon glyphicon-trash"></i>
                       <span>Cancella</span>
                     </button>
                    </div>
                 </div>
               </div>         
               <div id="actions1" class="row">
                 <div class="col-lg-7" style="margin-bottom:8px">
                   <span class="btn btn-success fileinput-button1 dz-clickable">
                       <i class="glyphicon glyphicon-plus"></i>
                       <span>Aggiungi file</span>
                   </span>
                 </div>     
               </div>
             </form>               
             </div>

Leggendo la documentazione ho implementato il seguente script:

HTML:
               var previewNode1 = document.querySelector("#template1");
               previewNode1.id = "";
               var previewTemplate1 = previewNode1.parentNode.innerHTML;
               previewNode1.parentNode.removeChild(previewNode1);

               var myDropzone1 = new Dropzone("#container1", {url: "uploadFile.php",
                                                              maxFilesize: 50,
                                                              thumbnailWidth: 40,
                                                              thumbnailHeight: 40,
                                                              parallelUploads: 20,
                                                              previewTemplate: previewTemplate1,
                                                              autoQueue: true,
                                                              previewsContainer: "#previews1",
                                                              clickable: ".fileinput-button1"
                                                             });

Posto che non ho capito perchè necessata del parametro url visto che poi è l'action della form che chiama uploadFile.php comunque sia che seleziono un file che molti il php viene chiamato per tutti:

PHP:
include('session.php');

$nome = $_FILES['file']['name'];
$tipo = pathinfo($nome, PATHINFO_EXTENSION);
$dati = addslashes(file_get_contents($_FILES['file']['tmp_name']));
$insuser = mysqli_real_escape_string($connection, $_SESSION['login_name']);
$insdate = date('Y-m-d H:i:s');
 
$sql = "insert into documenti (nome, tipo, dati, insuser, insdate) values ('$nome', '$tipo', '{$dati}', '$insuser', '$insdate')";
if (!mysqli_query($connection, $sql)) {die('Errore inserimento documento: ' . mysqli_error($connection));}
 
mysqli_close($connection);

In ogni caso non sto trattando un "upload" ma sto direttamente salvando il content del file nel db...inizialmente potevo farlo per un max di 2MB, poi vedendo la configurazione del file php.ini ho provato ad aumentare un po' di tutto dove parlava di MB o di byte portando tutto da 64 a 512MB ogni voce e il massimo risultato che ho ottenuto è un file di max 4MB. E comunque dubito che servano parametri di upload, penso più a buffer o post

Ne approfitto per capire il funzionamento: se trascino 3 file vengono salvati direttamente nel DB quindi la post esegue 3 distinte chiamate al mio php?
Per sapere se ha funzionato posso solo fare una query sul db, il die viene bellamente ignorato, mentre se lo uso nelle chiamate ajax funziona sempre e con la stessa sintassi. Dove sbaglio?
In genere con le chiamate ajax posso pilotare un ritorno ma in questo caso non saprei proprio come fare per ad esempio visualizzare un errore con una modal, certo il die basta e avanza perchè è comunque un errore grave quindi accettabile che l'applicazione abortisca.

Dimenticavo sto utilizzando EasyPHP Devserver con php 5
 
Ciao, prova ad aumentare max_allowed_packet di mysql e vedi che in php,ini MB e' riportato anche come M quindi controlla anche post_max_size
 
Ultima modifica:

Discussioni simili