Domanda

Ho un modulo PHP per il caricamento dei file e funziona benissimo e visualizza un messaggio di errore se qualcosa è andato storto. Va tutto bene.

Il problema è quando provo con un file molto grande, aggiorna semplicemente la pagina come se non avessi inviato alcun file e nessuna delle variabili $ _POST dal modulo viene persino inviata al server.

Voglio mostrare un errore all'utente, facendo loro sapere che il file è troppo grande. Tuttavia, non posso farlo.

Qualcuno sa cosa sta succedendo?

È stato utile?

Soluzione

Controlla il tuo file ini PHP, che regola la dimensione di un file che PHP consentirà di essere caricato. Queste variabili sono importanti:

  • dimensione massima caricamento file (upload_max_filesize)
  • dimensione massima dei dati post (post_max_size)
  • limite di memoria (memory_limit)

Eventuali caricamenti al di fuori di questi limiti verranno ignorati o eliminati, a seconda delle impostazioni.

Questa sezione della documentazione contiene il miglior riepilogo: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

MODIFICA: nota inoltre che la maggior parte dei browser non invierà caricamenti di dimensioni superiori a 2 GB. Questo link è obsoleto, ma dà un'idea: http://www.motobit.com/help /scptutl/pa98.htm . Qualcuno ha una migliore fonte di informazioni su questo?

Esistono anche limiti che possono essere imposti dal server, come Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Per vedere veramente cosa sta succedendo, dovresti probabilmente controllare i log del tuo server web, controllare il limite di upload del browser (se stai usando Firefox) e provare a vedere se print_r($_FILES) genera numeri di errore utili. Se tutto il resto fallisce, prova il monitor del traffico di rete in firebug. La chiave è determinare se la richiesta sta persino andando al server e se è come appare la richiesta (comprese le intestazioni). Una volta arrivato così lontano nella catena, puoi tornare indietro e vedere come PHP gestisce il caricamento.

Altri suggerimenti

Il tuo $ _POST è probabilmente vuoto perché il caricamento ha superato la direttiva post_max_size :

Dalla pagina delle direttive di PHP :

  

Se la dimensione dei dati post è maggiore   di post_max_size, $ _POST   e i superglobali $ _FILES sono vuoti .   Questo può essere monitorato in vari modi,   per esempio. passando la variabile $ _GET a   lo script che elabora i dati, ad es.   <form action="edit.php?processed=1"> e   quindi verifica se $ _GET ['elaborato']   è impostato.

non puoi conoscere la dimensione del file che viene caricato, fino a quando non viene caricato completamente. quindi se si desidera determinare la dimensione del file e quindi mostrare un errore per file di grandi dimensioni, è necessario prima caricare il file, quindi verificare la dimensione del file. per avere un file di grandi dimensioni caricato, dovresti impostare 2 impostazioni nel tuo file di configurazione php, php.ini. aprilo e cerca " upload_max_filesize " e imposta il valore sul valore massimo desiderato. quindi è necessario impostare il valore massimo per i parametri POST, poiché i file caricati vengono ricevuti tramite il metodo POST HTTP. trova " post_max_size " e impostalo su un valore elevato su.

Vorrei implementare un semplice script che fa regolari chiamate Ajax per sapere quanto del caricamento è stato fatto. È quindi possibile implementare una sorta di barra di avanzamento. Ci sono un paio di esempi in rete:

http://martinjansen.com/ 2007/04/28 / di caricamento file-progress-bar-con-php /

dimensione massima caricamento file (upload_max_filesize) dimensione massima dei dati post (post_max_size) sono le direttive che devi impostare. L'ho testato con più sistemi operativi, browser ecc. E queste sono le uniche due cose di cui devi preoccuparti.

a parte le opzioni come hanno risposto gli ex utenti:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

ce n'è anche uno, quando il file è molto grande, o la linea è occupata, ci vuole molto tempo per eseguire questa operazione, che colpirà al limite del limite di esecuzione dello script.

max_execution_time
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top