2012-07-06 8 views
5

Recentemente ho installato un portale di download PHP su uno dei nostri server. Tutto funziona correttamente, ma gli utenti non possono caricare file di grandi dimensioni (~ 20 MB).Come posso impedire il mancato caricamento di file Apache/PHP di grandi dimensioni?

ho impostare le seguenti impostazioni ai valori estremamente grandi o illimitata:

memory_limit 
upload_max_filesize 
post_max_size 
memory_limit 

completa php.ini qui: http://pastebin.com/NrqJvMVM

ma non riesce ancora dopo il riavvio del server.

Mi manca un'impostazione? Devo aggiornare qualche valore nella configurazione di Apache? Potrebbe un firewall aziendale interferire in qualche modo con quello?

MODIFICA: ho controllato phpinfo() e la configurazione principale mostra ancora i vecchi valori. Il file di configurazione C: \ Windows \ php.ini tuttavia ha i nuovi valori. Sto usando il file di configurazione sbagliato.

risposta

14

È possibile verificare i parametri in uno script, anche. Forse questo aiuta:

  1. max_execution_time = ini_set ("max_execution_time", "-1");
  2. post_max_size = ini_set ("post_max_size", "200M");
  3. memory_limit = ini_set ("memory_limit", "200M");
  4. upload_max_filesize = ini_set ("upload_max_filesize", "200M");

In .htaccess:

php_value upload_max_filesize 200M

php_value memory_limit 256M

php_value max_execution_time 18000

Qui ci sono belle articoli su questo argomento: http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

Suhosin è installato sul server o si utilizza fcgi ;-)?

+0

Non uso Suhoshin o Fcgi. Ho provato ad aggiungere i valori a .htaccess, ma il caricamento del file continua a non funzionare. Non ricevo un messaggio di errore ora, ma il file non appare mai sul server. – xsl

+0

Ho modificato la domanda, forse le informazioni aggiuntive ti aiuteranno. – xsl

+0

Funziona ora. Per qualche ragione, php non ha potuto leggere il file di configurazione nella directory di Windows. – xsl

2

È stata scritta la variabile post_max_size due volte e fuori dal valore di first se 0 e il valore di second è 9999M, rimuovere il primo e provarlo.

+0

Provato, ma non è stato d'aiuto. – xsl

+0

perché hai aumentato così tanto il valore di queste variabili, semplicemente impostale in base alle tue esigenze, non di più. –

+0

L'unico valore veramente enorme è la dimensione di caricamento del file (9999 MB). Ho bisogno di una dimensione di upload illimitata, ma 9999 MB sono sufficienti. – xsl

3

Forse, l'articolo this può aiutarti. È possibile aggiungere params di .htaccess

+0

Grazie, ma credo Ho impostato tutte queste impostazioni. – xsl

+0

Quando stavo lavorando su enormi caricamenti, ho trovato questa applet http://jumploader.com/ che può usare anche php. Forse questo può essere buono per il tuo progetto. – Kerberos

1

Forse MAX_FILE_SIZE non è correttamente impostato ...

<form enctype="multipart/form-data" action="index.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="filedata" type="file" /> 
<input type="submit" value="Send file" /> 
</form> 
+0

Il portale di download ha funzionato su altri server, quindi penso che il problema non sia causato dal codice stesso. – xsl

1

Si dovrebbe trovare corretta file php.ini =)

2

sto utilizzando il file di configurazione sbagliato.

Bene, phpinfo() indica quale si sta utilizzando. Guarda Configuration File (php.ini) Path e Loaded Configuration File proprio vicino alla parte superiore dell'output.

6

Tutte le impostazioni di configurazione per l'installazione sono contenute nel file php.ini . A volte queste impostazioni potrebbero essere sovrascritte dalle direttive apache .htaccess files o anche con gli script stessi.

seguenti impostazioni che abbiamo bisogno di modificare -

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Le impostazioni di configurazione in dettaglio di seguito.

  • upload_max_filesize e post_max_size

    I file vengono inviati solitamente al server web in un formato noto come 'multipart/form-data'. Post_max_size imposta il limite superiore sulla quantità di dati che uno script può accettare in questo modo. Idealmente, questo valore dovrebbe essere maggiore del valore impostato per upload_max_filesize.

    È importante rendersi conto che upload_max_filesize è la somma delle dimensioni di tutti i file che si stanno caricando. post_max_size è upload_max_filesize più la somma delle lunghezze di tutti gli altri campi nel modulo più eventuali intestazioni mime che il codificatore potrebbe includere. Poiché questi campi sono in genere di piccole dimensioni, è spesso possibile approssimare la dimensione massima del caricamento alla dimensione massima del post.

    In base alla documentazione di PHP è possibile impostare un MAX_UPLOAD_LIMIT nel modulo HTML per suggerire un limite al browser.

  • memory_limit

    Quando il motore PHP gestisce un POST in entrata è necessario mantenere alcuni dei dati ricevuti in memoria. Questa direttiva ha effetto solo se è stata utilizzata l'opzione --enable-memory-limit al momento della configurazione. L'impostazione di un valore troppo elevato può essere molto pericolosa perché se vengono caricati più caricamenti contemporaneamente tutta la memoria disponibile verrà utilizzata e altri script non correlati che consumano molta memoria potrebbero influire sull'intero server.

  • max_execution_time e max_input_time

    Queste impostazioni definiscono la durata massima dello script e il tempo che lo script dovrebbe passare ad accettare in ingresso. Se vengono trasferiti più mega byte di dati, max_input_time dovrebbe essere ragionevolmente alto. Puoi sovrascrivere l'impostazione nel file ini per max_input_time chiamando la funzione set_time_limit() negli script.

Commenti Additonal

  • Impostazioni di Apache

    il web server Apache ha una direttiva di configurazione LimitRequestBody che limita le dimensioni di tutti i dati POST a prescindere dal linguaggio di scripting web in uso. Alcune installazioni RPM impostano il corpo della richiesta limite a 512 KB. Sarà necessario modificare questo valore per un valore maggiore o rimuovere completamente la voce.

  • Altre opzioni

    Se si prevede di gestire un gran numero di trasferimenti di file simultanei sul tuo sito web considerare l'utilizzo di un componente lato server Perl o Java. PHP sembra essere il nostro linguaggio di programmazione web preferito, ma perl e Java sono leggermente più avanti quando si tratta di caricare file.

Consulta anche:

  1. Upload large File upto 100MB using php
  2. upload large files using php, apache
  3. PHP: Uploading large files fail
+0

Grazie per le vostre risposte perspicaci, spero che ottenga i voti che merita. Purtroppo ho già risolto il problema qualche giorno fa e ho accettato una risposta che mi ha aiutato a farlo. – xsl

+0

Nessun problema. Ho dato una risposta esauriente perché le risposte attuali non davano molte informazioni. –

1

sono stato nella tua situazione in passato e la soluzione migliore che ho trovato è stato con terze parti libreria per dividere i file in blocchi sul lato client e rimetterli tutti insieme r sul server. Ho trovato questo: http://www.plupload.com/

Molto maneggevole ed efficace. Funziona con una varietà di tecnologie diverse in modo che possa funzionare su una vasta maggioranza di macchine client. (flash, silverlight, html5 file api aso ...) Cheers!

+0

Grande esempio di come gestire questo download di codice completo +: http://webdev-blog.com/ajax-upload-script-with-custom-folders/ – m1crdy

Problemi correlati