2012-07-06 13 views
5

Niedawno zainstalowałem portal pobierania PHP na jednym z naszych serwerów. Wszystko działa dobrze, ale użytkownicy nie mogą przesyłać dużych plików (~ 20 MB).Jak można zapobiec przesyłaniu dużych plików Apache/PHP?

ustawić następujące ustawienia, aby bardzo duże wartości lub nieograniczone:

memory_limit 
upload_max_filesize 
post_max_size 
memory_limit 

Pełna php.ini tutaj: http://pastebin.com/NrqJvMVM

Ale to nadal nie po ponownym uruchomieniu serwera.

Czy brakuje mi ustawienia? Czy muszę aktualizować dowolne wartości w konfiguracji Apache? Czy firmowa zapora sieciowa może w jakiś sposób temu przeszkadzać?

EDYCJA: Sprawdziłem phpinfo(), a konfiguracja główna nadal pokazuje stare wartości. Plik konfiguracyjny C: \ Windows \ php.ini ma jednak nowe wartości. Czy używam niewłaściwego pliku konfiguracyjnego?

Odpowiedz

14

można przetestować params w skrypcie, too. Być może to pomaga:

  1. max_execution_time = ini_set ("max_execution_time", "-1");
  2. post_max_size = ini_set ("post_max_size", "200M");
  3. memory_limit = ini_set ("memory_limit", "200M");
  4. upload_max_filesize = ini_set ("upload_max_filesize", "200M");

W .htaccess:

php_value upload_max_filesize 200M

php_value memory_limit 256M

php_value max_execution_time 18000

Oto ładne artykuły o tym temacie: http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

Czy Suhosin jest zainstalowany na twoim serwerze lub używasz fcgi ;-)?

+0

Nie używam Suhoshin lub fcgi. Próbowałem dodać wartości do pliku .htaccess, ale przesyłanie plików nadal nie działa. Nie otrzymuję teraz komunikatu o błędzie, ale plik nigdy nie pojawia się na serwerze. – xsl

+0

Edytowałem pytanie, może dodatkowe informacje ci pomogą. – xsl

+0

Teraz działa. Z jakiegoś powodu php nie mógł odczytać pliku konfiguracyjnego w katalogu windows. – xsl

2

Napisałeś zmienną post_max_size dwa razy i spośród których pierwsza wartość, jeśli 0 i druga wartość to 9999M, usuń pierwszą i spróbuj.

+0

Wypróbowałem, ale to nie pomogło. – xsl

+0

dlaczego tak bardzo zwiększyłeś wartość tych zmiennych, po prostu ustaw je zgodnie ze swoimi potrzebami, nie więcej. –

+0

Jedyną wartością, która jest naprawdę ogromna, jest rozmiar pliku do przesłania (9999 MB). Potrzebuję nieograniczonego rozmiaru przesyłania, ale wystarcza 9999 MB. – xsl

3

Może, artykuł this może ci pomóc. Możesz dodać params do .htaccess

+0

Dzięki, ale wierzę Mam ustawione wszystkie te ustawienia. – xsl

+0

Kiedy pracowałem nad dużymi uploadami, znalazłem ten aplet http://jumploader.com/ Który może używać php też. Może to może być dobre dla twojego projektu. – Kerberos

1

Może MAX_FILE_SIZE nie jest prawidłowo ustawiony ...

<form enctype="multipart/form-data" action="index.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="filedata" type="file" /> 
<input type="submit" value="Send file" /> 
</form> 
+0

Portal pobierania działa na innych serwerach, więc myślę, że problem nie wynika z samego kodu. – xsl

1

Należy znaleźć właściwy plik php.ini =)

2

używam niewłaściwego pliku konfiguracyjnego.

Cóż, phpinfo() mówi ci, którego używasz. Spójrz na Configuration File (php.ini) Path i Loaded Configuration File tuż przy górnej krawędzi wyjścia.

6

Wszystkie ustawienia konfiguracyjne dla twojej instalacji zawarte są w pliku php.ini . Czasami te ustawienia mogą zostać nadpisane przez dyrektywy w plikach apache .htaccess lub nawet w samych skryptach.

następujących ustawień, musimy zmodyfikować -

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Ustawienia konfiguracji opisane szczegółowo poniżej.

  • upload_max_filesize i post_max_size

    Pliki są zwykle wysłana do serwera WWW w formacie znanym jako 'multipart/form-data'. Parametr post_max_size określa górny limit ilości danych, które skrypt może zaakceptować w ten sposób. Idealnie ta wartość powinna być większa niż wartość ustawiona dla upload_max_filesize.

    Należy pamiętać, że upload_max_filesize to suma rozmiarów wszystkich plików, które przesyłasz. post_max_size to upload_max_filesize plus suma długości wszystkich pozostałych pól w formularzu oraz wszelkie nagłówki mime, które może zawierać enkoder. Ponieważ te pola są zazwyczaj małe, często możesz zbliżyć maksymalny rozmiar wysyłania do maksymalnego rozmiaru posta.

    Zgodnie z dokumentacją PHP można ustawić MAX_UPLOAD_LIMIT w formularzu HTML, aby zasugerować ograniczenie przeglądarki.

  • memory_limit

    Gdy silnik PHP jest obsługa przychodzących POST potrzebuje, aby zachować niektóre z napływających danych w pamięci. Ta dyrektywa ma znaczenie tylko wtedy, gdy użyłeś opcji --enable-memory-limit w czasie konfiguracji. Ustawienie zbyt wysokiej wartości może być bardzo niebezpieczne, ponieważ w przypadku jednoczesnego obsługiwania kilku plików cała dostępna pamięć zostanie wykorzystana, a inne niepowiązane skrypty, które zużywają dużo pamięci, mogą wpłynąć na cały serwer.

  • max_execution_time i max_input_time

    Te ustawienia określają maksymalny czas życia scenariusz i czas, który skrypt powinien wydać przyjmując wejście. Jeśli zostanie przesłanych kilka megabajtów danych, max_input_time powinno być rozsądnie wysokie. Możesz zastąpić ustawienie w pliku ini przez max_input_time, wywołując funkcję set_time_limit() w twoich skryptach.

dodatkową Komentarze

  • Ustawienia Apache

    Apache serwer WWW ma dyrektywy konfiguracji LimitRequestBody która ogranicza wielkość wszystkich danych POST niezależnie od języka skryptowego internetowej w użyciu. Niektóre instalacje RPM ustawiają treść żądania ograniczającego do 512 KB. Będziesz musiał zmienić to na większą wartość lub całkowicie usunąć wpis.

  • Inne opcje

    planujący obsługiwać dużą liczbę jednoczesnych transferów plików na swojej stronie rozważyć użycie komponentu po stronie serwera Perl lub Java. PHP jest także naszym ulubionym językiem programowania, ale perl i Java są tylko nieznacznie lepsze, jeśli chodzi o przesyłanie plików.

Zobacz także:

  1. Upload large File upto 100MB using php
  2. upload large files using php, apache
  3. PHP: Uploading large files fail
+0

Dziękuję za wasze wnikliwe odpowiedzi, mam nadzieję, że dostaną upominkę, na jaką zasługuje. Niestety już kilka dni temu rozwiązałem problem i przyjąłem odpowiedź, która pomogła mi to zrobić. – xsl

+0

Bez problemów. Dokładnie udzieliłem odpowiedzi, ponieważ aktualne odpowiedzi nie dawały wielu informacji. –

1

Byłem w sytuacji w przeszłości i najlepszym rozwiązaniem znalazłem używał osobie trzeciej biblioteka do dzielenia plików na porcje po stronie klienta i odkładania wszystkiego razem r na serwerze. Znalazłem: http://www.plupload.com/

Bardzo przydatny i skuteczny. Działa z wieloma różnymi technologiami, dzięki czemu może pracować na większości komputerów klientów. (flash, silverlight, plik html5 api aso ...) Pozdrawiam!

+0

Świetny przykład jak sobie poradzić z tym + pełnym pobieraniem kodu: http://webdev-blog.com/ajax-upload-script-with-custom-folders/ – m1crdy

Powiązane problemy