2016-12-23 20 views
5

Nie jestem pewien, dlaczego mój kod poniżej nie obsługuje plików większych niż 50kb na moim hostingu, chociaż działa dobrze na localhost.Nie można przesłać plików większych niż 50kb z AJAX

Testowałem wiele różnych rozmiarów plików i jestem prawie pewien, że limit wynosi 50kB. Jeśli plik jest większy niż 50kb, nigdy nie jest przekazywany do process.php. Jeśli plik jest mniejszy niż 50kb, zostanie przekazany do process.php ok.

Czy ktoś może mi pomóc to naprawić. Utknąłem w tym problemie od wielu godzin.

Ustawiłem upload_max_filesize w php.ini na 5M.

$(document).ready(function() { 
    $('#img_uploader').on('change', function() 
    { 
     uploadFiles(this.files); 
    } 
}); 

function uploadFiles(fileList) 
{ 
    var xhr = new XMLHttpRequest(); 
    var formData = new FormData(); 

    for (var i = 0; i < fileList.length; i++) { 
     var file = fileList[i]; 
     if (!file.type.match('image.*')) { 
      continue; 
     } 
     formData.append('photos[]', file); 
     formData.append('request', "uploadImg"); 
    } 

    xhr.open('POST', 'process.php', true); 
    xhr.onload = function() { 
     if (xhr.status === 200) { 
      var data = xhr.responseText; 
      console.log(data); 
      //convert_json_append_HTML(data); 
     } else { 
      alert('An error occurred!'); 
     } 
    }; 
    xhr.send(formData); 
} 

Aktualizacja: Wyniki badań

spędziłem 6 godzin wystarczy, aby zlokalizować problem.

To jest naprawdę zmęczone.

1/4 godziny, aby przejrzeć wszystkie kody JavaScript i PHP, rejestrować każdy krok, aby upewnić się, że kod nie zawierał niczego złego.

  • Testowany na lokalnym hoście ze wszystkimi scenariuszami. Działało idealnie.

2/Zmieniono te trzy elementy, które nie rozwiązały problemu, niezależnie od ustawionego limitu. Więc zmieniłem je na domyślne.

  • upload_max_filesize
  • memory_limit
  • post_max_size Test

3/Przeglądarka:

Utworzony 2 pliki: test_1.php i test_2.php. (Podstawowy HTML, JavaScript nie zaangażowany)

test_1.php

<form action="test2.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" name="fileToUpload" id="fileToUpload"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

test_2.php

<?php 
var_dump($_FILES); 

HTTP:

Chrome:

  • Pliki < 50kb: przeszedł
  • Files> 50kb: przeszedł

Firefox:

  • Pliki < 50kb: przeszedł
  • Files> 50KB: przeszedł

Internet Explorer:

  • Pliki < 50KB: przeszedł
  • Files> 50KB: przeszedł

HTTPS

Chrome:

  • Pliki < 50kb: przeszedł
  • Files> 50kb: udało

Firefox:

  • Pliki < 50KB: przeszedł
  • Files> 50kb: przeszedł

Internet Explorer:

  • Pliki < 50KB: przeszedł
  • Files> 50KB: przepuszczane

Nie jestem pewien, dlaczego plik nie można przekazać większego niż 50 KB z pliku test_1.php do test_2.php na protokół HTTPS w przeglądarce Chrome. Czy ktoś tu zna przyczynę? Lub może spróbować przetestować go na własnym serwerze.

+0

sprawdził pliki dziennika błędów serwera WWW? – Spacedman

+0

Jakieś błędy, które otrzymujesz? Możesz sprawdzić konsolę przeglądarki, dzienniki dostępu do serwera. –

+0

Istnieją 3 zmienne, które należy sprawdzić, upload_max_filesize, memory_limit i post_max_size. W celu przesłania pliku wszystkie 3 pojawiają się na obrazie. – GeekAb

Odpowiedz

1

zorientowali się problem.

Kaspersky Internet Security automatycznie wstrzykuje skrypt na dowolne strony internetowe załadowane Chrome (nie ma to wpływu na IE i FF).

Skrypt blokuje wszystkie pakiety większe niż 50 kB wysyłane na serwer WWW w protokole HTTPS.

enter image description here

  • rozwiązania: Kaspersky Internet Security> Ustawienia> Dodatkowe> Sieć>

    • odznacz "wstrzyknąć skrypt do ruchu internetowego do interakcji ze stronami internetowymi"

enter image description here

+0

Uratowałeś mnie przed zabiciem siebie! Pracowałem przez ostatnie 36 godzin, aby rozwiązać ten problem. Dzięki wielkie! Tylko jedna korekta FF ma również wpływ na to .. Nie wiem o EDGE –

3

trzeba ustawić odpowiednie wartości dla 3 zmiennych Check this tutotial

  • upload_max_filesize
  • memory_limit
  • post_max_size
+0

Te trzy zmienne nie są powodem mojego problemu. Problem jest nadal bez względu na to, jak duży jest limit. Zobacz mój zaktualizowany opis. –

+0

Czy sprawdziłeś dziennik serwera dla HTTPS Chrome: Pliki> 50kb – GeekAb

+0

Tak, zrobiłem. Nie zarejestrowano błędu. –