Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Operacje na plikach w pętli
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Mam listę X plików:
plik001.txt
plik002.txt
plik003.txt
plik004.txt
plik005.txt
plik00n.txt
Chciałbym otworzyć plik, wykonać na nim jakąś operację, zapisać. Problem w tym, że pliki są duże. Jak wykonać pętlę, żeby po obróbce jednego pliku, skrypt uruchamiał się ponownie?
lobopol
zrób sobie funkcje w stylu:
  1. function dzialanie($plik, $jeszcze = false) {
  2. działanie na pliku
  3. if($jeszcze) {
  4. return dzialanie($nastepnyplik, czyostatni)
  5. } else {
  6. return true;
  7. }
  8. }


czyli prostą rekurencje, skończy wszystkie pliki
Kshyhoo
Szczerze mówiąc, nie kumam tego.
nospor
@lobopol a po co tu rekurencja? Nie dość ze pliki duze to ty chcesz to w rekurencje wrzucac. Toż zwykła pętla wystarczy.

@Ksyhoo a czemu skrypt chcesz odpalać ponownie? Wykonuj operacje w petli i już. A petla będzie po plikach twoich.
Kshyhoo
Dajmy na to, że chcę odpalić 100 plików po 1MB, więc przekroczy to limit czasu. Nie wiem, jak to obejść.
prowseed
  1. header('Location: example.com/?f=plik001.txt');

moze po prostu tak prymitywnie?
Robisz tylko na koncu skryptu podstawienie n+1 dla lokalizacji jesli plik istnieje
nospor
Trzeba bylo od razu ze w tym problem
Albo zwieksz limit czasu set_time_limit()
Albo .... no tu właśnie będzie ciut trudniej. Zapisz np. w bazie listę plików które masz obsłużyć. No i teraz odpalaj plik cyklicznie np. cron i analizuj po jednym pliku z bazy. Po skonczeniu kasuj dany plik z bazy.

Ewentualni to co zaproponował prowseed
g0ther
A wrzucenie listy plików do sesji?
Kshyhoo
Zrobiłem tak:
  1. header('Refresh: 0; Location: totoKas.php?plik=toto'.($plik+1).'txt');
  2.  
  3. if (isSet($_GET['plik'])) {
  4. $plik = $_GET['plik'];
  5. } else {
  6. $plik = '001';
  7. }
  8.  
  9. $uchwyt = @fopen('toto'.$plik.'.txt', 'r');


Refresh: 0 < bo wywalało, że za dużo odwołań.
Wykonało się raz i stanęło ;(
$plik pokazuje 001
print_r($_GET); pokazuje 1

Chyba się udało:
  1. if (isSet($_GET['plik'])) {
  2. $plik = $lvl1 = substr($_GET['plik'], -7, 3);
  3. $plik++;
  4. $plik = sprintf('%03d', $plik);
  5. } else {
  6. $plik = '001';
  7. }
  8.  
  9. function redirect($location, $script = false) {
  10. if (!$script) {
  11. echo "<script type='text/javascript'>
  12. document.location.href='".str_replace("&amp;", "&", $location)."'
  13. </script>\n";
  14. } else {
  15. //echo "";
  16. header("Location: ".str_replace("&amp;", "&", $location));
  17. }
  18. }
  19.  
  20. $uchwyt = @fopen('toto'.$plik.'.txt', 'r');
  21. // tu jedziemy z plikiem
  22.  
  23. ++$plik;
  24. $plik = sprintf("%03d", $plik);
  25. redirect('totoKas.php?plik=toto'.$plik.'.txt');
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.