2009-08-27 24 views
5

Pracuję nad aplikacją, która umożliwia przesyłanie i przechowywanie dużych plików na serwerze WWW. Obecnie używam PHP do obsługi plików POSTed przez http. Mam zestaw php.ini z:Duże przesyłanie plików

upload_max_filesize = 100M 
post_max_size = 100M 
memory_limit = 128M 
max_input_time = 6000 
max_execution_time = 6000 

Wygląda na to, że nie ma żadnej dyrektywy apache dla LimitRequestBody. Używam APC do śledzenia postępu przesyłania plików. Z jakiegoś powodu ładowanie plików zawsze zatrzymuje się dokładnie na 50M.

Wiem, że http nie jest najskuteczniejszym rozwiązaniem do przesyłania plików, ale ta aplikacja musi być przyjazna dla użytkownika i rozumiem, że są problemy z firewallem z ftp.

Zastanawiam się, czy ktoś mógłby dać mi jakieś sugestie, co zatrzymuje pobieranie w dokładnie 50M? To musi być jakieś ustawienie konfiguracyjne.

Co więcej, jest jakiś inny sposób, w jaki powinienem rozważyć pracę przy użyciu javascript/PHP i http dla przesyłania plików. Sprawdziłem aplety java i używanie flash. Prawdopodobnie użyjemy swfuploadera, ale jeśli jest to konfiguracja serwera, która powoduje, że mój upload nie działa przez http, nie widzę, jak obejdzie to aplet java lub program do przesyłania plików flash.

Należy zauważyć, że mam nadzieję, że wymyślę rozwiązanie, które pozwoli mi przesłać bardzo duże pliki do 1 GB w pewnym momencie.

używam bardzo uproszczone PHP aby otrzymać plik

$uploaddir = '/'.$_POST['upload_directory'].'/'; 
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 

if (is_uploaded_file($_FILES['file']['tmp_name'])) { 
    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { some success code; } 

Jest oczywiście trochę więcej niż tylko to, ale to jest sedno tego, jak sobie radzić przesyłanie.

+0

W jaki sposób przesyłasz pliki i co robisz z nimi po ich przesłaniu? –

+0

Proste polecenia php is_uploaded_file() i move_uploaded_file() oraz wyciąganie plików z $ _FILES – wallacer

Odpowiedz

4

Po kilku godzinach walić głową mam rozwiązać ten problem. Używam Extjs dla komponentów front end. Widżet do wysyłania, którego używam, miał w nim zakodowane ustawienie, które ustawia właściwość MAX_UPLOAD _FILESIZE żądania POST na 50M, nadpisując wartość ustawioną w innym miejscu. Działa teraz zgodnie z oczekiwaniami. Dzięki za komentarze.

2

Ustaw dyrektywę LimitRequestBody w swoim vhost.

http://www.cyberciti.biz/faq/apache-limiting-upload-size/

+0

Ten artykuł dotyczy ustawiania LimitRequestBody w celu ograniczenia rozmiaru wysyłanego pliku. Jeśli nie mam ustawionego LimitRequestBody, to czy nie jest on już nieograniczony? – wallacer

+1

http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody mówi: "Jeśli żądanie klienta przekroczy ten limit, serwer zwróci odpowiedź błędu zamiast obsługiwać żądanie". Jeśli nie otrzymasz odpowiedzi błędu w przeglądarce, to nie jest problem ... – VolkerK

+0

Ya, nie dostaję błędu, więc wiem, że to nie jest problem. Nie mam wystarczającej "reputacji", aby ująć odpowiedź, ale ta odpowiedź w ogóle nie pomaga – wallacer