Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Operacje na plikach w pętli
Kshyhoo
post 30.03.2012, 20:26:49
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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?


--------------------
Go to the top of the page
+Quote Post
lobopol
post 30.03.2012, 20:43:19
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post 30.03.2012, 20:59:37
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Szczerze mówiąc, nie kumam tego.


--------------------
Go to the top of the page
+Quote Post
nospor
post 30.03.2012, 21:14:28
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 30.03.2012, 21:17:14
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Dajmy na to, że chcę odpalić 100 plików po 1MB, więc przekroczy to limit czasu. Nie wiem, jak to obejść.


--------------------
Go to the top of the page
+Quote Post
prowseed
post 30.03.2012, 21:22:04
Post #6





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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

Ten post edytował prowseed 30.03.2012, 21:23:33


--------------------
Go to the top of the page
+Quote Post
nospor
post 30.03.2012, 21:29:21
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
g0ther
post 31.03.2012, 06:55:36
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 2
Dołączył: 25.08.2010

Ostrzeżenie: (0%)
-----


A wrzucenie listy plików do sesji?
Go to the top of the page
+Quote Post
Kshyhoo
post 31.03.2012, 14:50:56
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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');


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 04:49