2012-03-13 33 views
12

ajax (jQuery) aracılığıyla 2 milyon karakter büyük (ikili olmayan dize) POST verilerini göndermeye çalışıyorum ve PHP tarafında her zaman boş görünüyor. İşte benim kodudur: PHP tarafındaPHP/Apache/AJAX - POST sınırı?

var string = "<data string that is 2M chars long>"; 
$.ajax({ 
    cache: false, 
    type: 'POST', 
    url: 'data.php', 
    data: {'data_string': string} 
}); 

, aşağıdaki hata mesajı alıyorum ($_POST['data_string'] veri almak çalışırken):

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

ben post_max_size php.ini içinde kontrol ettim ve bu, 256M'de yeterli olmalı? Ben

DÜZENLEME ... Yanlış ne yapıyorum emin stumped ve değilim: Ben küçük bir veri miktarı (örn var string = 'test') daha sonra $_POST["data_string"] döner test, beklendiği gibi "string" yaparsanız. Bu yüzden Apache2, PHP veya tarayıcının kendisine ulaştığım bir çeşit veri limiti olup olmadığını merak ediyorum. php.ini içinde memory_limit = 256M

EDIT3: php.ini içindeki max_input_time = -1

EDIT4: Ben 17.0.963.79

EDIT2 Google Chrome'u kullanıyorum var_dump ($ _ POST) Dizi (0)

döndürür

EDIT5: debian sıkışıklığının üzerinde PHP5 en son kararlı sürümünü çalıştıran: PHP Suhosin'dir-Patch (cli) ile 5.3.3-7 + squeeze8 (dahili: Feb 10 2012 14:12:26)

+1

aynı hata tür 'sına olarak önemli ölçüde daha küçük dizeleri ile devam ediyor mu? Tanımsız endeks, yayınlanmadığı gibi görünmesini sağlar. – MetalFrog

+1

no, küçük metin verileriyle hata devam etmiyor. –

+0

'var_dump'u deneyin ($ _ GET); var_dump ($ _ POST); 'bir şey yoksa, apache yapılandırma dosyalarını olası sınırlar için kontrol edin – Robus

cevap

21

Sen ve sunucu arasındaki tüm öğeler üzerinde sınırlar parametrelerini kontrol etmek gerekir. Oldukça sert proxy sunucular varsa ama en azından kontrol edebilirsiniz için:

Apache:

  • LimitRequestBody, 2Gb etrafında 64bits için belki daha büyük varsayılan olarak, ayrıntılar için hata günlüklerini denetleyin.

PHP: post çok uzun sürerse doğrudan emin değilim ilgisi olmayabilir POST büyüklüğü

  • upload_max_filesize,
  • max_input_time ilişkilidir

    varsa 10, ancak alt süreci izin hafıza

  • max_input_vars exceding boyutuna ulaşabilir gibi, bu
  • memory_limit değil oldukça emin, sınırı derlenmiş erişmiş ise Apache için tek çözüm, böyle büyük bir veri parçasının doğrudan POSt'undan kaçınmak, onu parçalara ayırmak zorunda kalacaksınız.

  • +0

    teşekkürler, dizenin çok büyük olduğundan şüpheliyim ve muhtemelen parçaları parçalayacağım. –

    +2

    Bunun için 'max_input_vars' bizim için suçluydu. – Ruben

    0

    Ayrıca isteyebilir set_time_limit(0) veayarlarınızı yapın..

    DÜZENLEME: Ayrıca console.log(string); İsteğiniz doğru bir şekilde ayarlandığını doğrulamak için isteğinizden önce veya console.log(string.length); numaralı telefondan alınabilir ve ayrıca verilerinizin gönderilip gönderilmediğini doğrulamak için isteğinizi firebug veya chromes geliştirici araçlarında da kontrol edebilirsiniz.

    +0

    memory_limit = 256M, set_time_limit (0) hiçbir şey değiştirmedi. –

    +1

    ayrıca bir max_input_time ini ayarı var. Ayrıca, değişikliklerin gerçekte – miki

    +0

    etkisini aldığımı kontrol edin. max_input_time değerini -1 olarak ayarlayın ve sorun hala var. –

    2

    Ayrıca suhosin.ini ayarları, örneğin .:

    suhosin.post.max_value_length = 65000 
    
    -1
    //Adding Respond Box After Selected Field 
    $('[maxlength]').bind('click keyup', function(){ 
        var RespondBox = '<div class="StPgRp" id="UpdateRespond"></div>'; 
        $('#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(); 
    }); 
    

    kontrol edebilir, sayfanızda ve sizin sıralanmış bağladığınız Js dosyaya bu ekleyin!

    0

    Tek tırnak işaretini parametre isminden kesin!

    Gönderen:

    data: {'data_string': string} 
    

    için:

    data: {data_string: string}