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.
sprawdził pliki dziennika błędów serwera WWW? – Spacedman
Jakieś błędy, które otrzymujesz? Możesz sprawdzić konsolę przeglądarki, dzienniki dostępu do serwera. –
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