Gestire i caricamenti di file di grandi dimensioni in PHP può risultare complicato a causa delle limitazioni predefinite nel linguaggio stesso e nel server web. Tuttavia, ci sono diverse strategie e pratiche che si possono adottare per gestire efficacemente questi caricamenti. Di seguito vengono descritte alcuni dei passaggi chiave e i concetti utilizzati per risolvere questo problema.
- `upload_max_filesize`: Definisce la dimensione massima permessa per un file caricato. Impostandola a un valore elevato si permette il caricamento di file più grandi. Ad esempio, per permettere file fino a 100MB: \`\`\`ini upload_max_filesize = 100M \`\`\`
- `post_max_size`: Definisce la dimensione massima dei dati accettati tramite una richiesta POST. Questo valore deve essere maggiore o uguale a `upload_max_filesize`. \`\`\`ini post_max_size = 110M \`\`\`
- `max_execution_time`: Imposta il tempo massimo (in secondi) che un’operazione di script può durare. Aumentare questo valore può essere necessario per carichi molto grandi. \`\`\`ini max_execution_time = 300 \`\`\`
- `memory_limit`: Definisce la quantità di memoria che uno script PHP può consumare. Anche questo valore potrebbe dover essere aumentato. \`\`\`ini memory\_limit = 256M \`\`\`
Apache:
Nel file `.htaccess` o nel file di configurazione Apache, aggiungere:
```
```
Nginx:
Nel file di configurazione di Nginx (`nginx.conf`), modificare o aggiungere:
```
http {
client_max_body_size 100M;
}
```
Esempio con Dropzone.js:
```
Dropzone.options.myAwesomeDropzone = {
paramName: “file”,
maxFilesize: 100, // MB
init: function() {
this.on(“uploadprogress”, function(file, progress) {
console.log(“File progress”, progress);
});
}
};
```
- Controllo del tipo di file: Usare `mime_content_type()` o estensioni come [Fileinfo](https://www.php.net/manual/en/class.finfo.php) per verificare il MIME type del file. \`\`\`php $finfo = new finfo(FILEINFO_MIME_TYPE); $mime = $finfo->file($_FILES\[‘file’]\[‘tmp_name’]); if($mime != ‘application/pdf’) { die(‘Formato file non supportato.’); } \`\`\`
- Controllo del nome del file: Evitare che gli utenti carichino file con nomi potenzialmente pericolosi. \`\`\`php $filename = basename($\_FILES\[“file”]\[“name”]); if(preg_match(“/^[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9\_-]+)?$/”, $filename) === 0) { die(‘Nome file non supportato.’); } \`\`\`
- Salvataggio sicuro: Usare una directory dedicata ai file caricati, con permessi adeguati per prevenire esecuzioni arbitrarie. \`\`\`php $uploadDir = ‘/var/www/uploads/’; move_uploaded_file($_FILES\[‘file’]\[‘tmp_name’], $uploadDir . $filename); \`\`\`
Questi passaggi combinati contribuiscono a gestire in modo efficace e sicuro i caricamenti di file di grandi dimensioni in PHP.