PHP / Apache / AJAX – limite POST?

Sto cercando di inviare dati POST di 2 milioni di caratteri (stringa non binario) tramite ajax (jQuery) e viene sempre visualizzato come vuoto sul lato PHP. Ecco il mio codice:

var string = ""; $.ajax({ cache: false, type: 'POST', url: 'data.php', data: {'data_string': string} }); 

Dal lato PHP, ottengo il seguente messaggio di errore (quando $_POST['data_string'] a recuperare i dati da $_POST['data_string'] ):

 Notice: Undefined index: data_string in data.php on line ... 

Ho controllato post_max_size in php.ini, ed è impostato su 256M che dovrebbe essere più che sufficiente? Sono perplesso e non sono sicuro di cosa sto facendo male …

EDIT: Se faccio "string" una piccola quantità di dati (ad esempio var string = 'test' ), $_POST["data_string"] restituisce test , come previsto. Quindi mi chiedo se c’è qualche tipo di limite di dati che sto raggiungendo in Apache2, in PHP o nel browser stesso? Sto utilizzando Google Chrome 17.0.963.79

EDIT2: memory_limit = 256M in php.ini

EDIT3: max_input_time = -1 in php.ini

EDIT4: var_dump ($ _ POST) restituisce matrice (0)

EDIT5: esecuzione dell’ultima versione stabile di PHP5 su debian squeeze: PHP 5.3.3-7 + squeeze8 con Suhosin-Patch (cli) (compilato: 10 febbraio 2012 14:12:26)

Dovrai controllare i parametri dei limiti su tutti gli elementi tra te e il server. Abbastanza difficile per i server proxy, se necessario, ma almeno è ansible controllare:

Apache:

  • LimitRequestBody , circa 2 GB per impostazione predefinita, forse maggiore per 64 bit, controlla i log degli errori per i dettagli.

PHP:

  • post_max_size che è direttamente correlato alla dimensione del POST
  • upload_max_filesize che potrebbe non essere correlato, non è sicuro
  • max_input_time , se il POSt impiega troppo tempo
  • max_input_nesting_level se i tuoi dati sono un array con molti sottolivelli
  • max_execution_time , ma sono sicuro che non è così
  • memory_limit , poiché potresti raggiungere una dimensione che supera la memoria consentita per i processi secondari
  • max_input_vars , se l’array di dati ha molti elementi

Se hai raggiunto il limite compilato per Apache, la tua unica soluzione è evitare il POS diretto di una grossa fetta di dati, dovrai romperlo in pezzi.

Puoi anche controllare le impostazioni di suhosin.ini, ad es .:

 suhosin.post.max_value_length = 65000 

Si potrebbe anche voler impostare set_time_limit (0) e il limite di memoria .

EDIT: potresti anche voler console.log(string) ; o console.log(string.length); prima della tua richiesta di verificare che sia impostata correttamente, e controlla anche la tua richiesta negli strumenti di sviluppo firebug o chromes per verificare che i tuoi dati siano stati inviati.

Basta togliere le virgolette singole dal nome del parametro!

A partire dal:

 data: {'data_string': string} 

A:

 data: {data_string: string} 
 //Adding Respond Box After Selected Field $( '[maxlength]' ).bind('click keyup', function(){ var RespondBox = '
'; $('#UpdateRespond').remove(); $(this).after(RespondBox); }); //Counting Maximum Characters Allowed In Selected Field $( '[maxlength]' ).bind('click keyup', function(){ var MaxLength = $(this).attr('maxlength'); var CurrentLength = $(this).val().length; var Remainder = MaxLength - CurrentLength; $('#UpdateRespond').html('You have ' + Remainder + ' characters remaining.'); }); //Checking the PHP Function if YES then send message to user $( '.Check' ).bind('click keyup', function(){ var Check = $(this).parent().children('.Check').val(); });

Aggiungi questo al tuo file .js collegato alla tua pagina e ordinato!