Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis dużych plików
Forum PHP.pl > Forum > PHP
Demoneos
Napisałem taki skrypt:
  1. <?php
  2. $from = fopen("plik_wejsciowy", "rb");
  3. while ( ! feof( $from ) ) {
  4. $content_from .= fread($from, 8192);
  5. }
  6.  
  7. $to = fopen("plik_wyjsciowy", "wb");
  8. fwrite($to, $content_from);
  9. fclose($from);
  10. fclose($to);
  11. ?>

który dzieli plik wejściowy na małe części i łączy je z powrotem w pliku wyjściowym. Dla pliku o wielkości 12 MB działo prawidłowo, niestety gdy plik wejściowy miał 350 MB, skrypt podziałał kilkadziesiąt sekund i się zatrzymał nawet nie tworząc pliku wyjściowego. Podejrzewam więc, że po prostu zmienna $content_from miała zbyt duży rozmiar i skrypt się zawiesił. Spróbowałem więc napisać to w ten sposób, że skrypt pobierał po małym segmencie z pliku wejściowego i od razu zapisywał do pliku wyjściowego:
  1. <?php
  2. $from = fopen("plik_wejsciowy", "rb");
  3. $to = fopen("plik_wyjsciowy", "wb");
  4. while ( ! feof( $from ) ) {
  5. $content_from = fread($from, 8192);
  6. fwrite($to, $content_from);
  7. }
  8.  
  9. fclose($from);
  10. fclose($to);
  11. ?>


ale to nie działa nawet dla małych plików - tworzony jest plik wyjściowy, ale ciągle ma rozmiar 0 MB. Co więc robię źle? Jak powinno się zapisywać duże pliki?
Fifi209
set_time_limit ustaw na 0 i będzie śmigał, po prostu kończył się czas wykonywania skryptu jak dla mnie
Demoneos
Tak, tak - teraz działa dobrze smile.gif Wcześniej był jeszcze taki problem, bo podałem skryptowi jakiś uszkodzony plik wejściowy. Teraz działa dobrze, nawet z plikami o wielkości kilka giga smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.