Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Czyszczenie pliku, najlepsza opcja?
Forum PHP.pl > Forum > Przedszkole
KsaR
Potrzebuje czyścić wielokrotnie mały plik. ( w pętli, Zależnie od warunku ...)
Waży jakieś 0.22-0.30kB i zawiera cookie.

Na początku gdy to robiłem nie przemyślałem i użyłem odrazu:

file_put_contents('./plik.txt', '');

Jednak w pętli to się okazuje wolniejsze.
Jak wiadomo to wrapper, i ma w sobie fopen(), fwrite(), fclose(); + samo w sobie jest czwartą funkcją


I tu pytanie.
Samo...
fopen('./plik.txt', 'w');
Robi dokładnie to samo.
Czy jest jakiś konkretny cel żeby użyć w moim wypadku fclose(), czy nie muszę?
Jak przypominam, plik waży niecałe ⅓kB.

Pytam bo zawsze file_put_contents() uzywalem jako ze latwiejsze do zapamietania.
com
no skoro otwierasz plik to wypadało by zamknąć nie?
KsaR
Cytat(com @ 20.03.2016, 16:57:33 ) *
no skoro otwierasz plik to wypadało by zamknąć nie?

Wlasnie nie wiem jak w moim wypadku.
Gdy petla skończy kilkanaście tysięcy okrążeń skrypt jest praktycznie zatrzymywany bo zrobił co trzeba.
I prawie co każde okrążenie jest czyszczony plik (zależy od warunku).
+ tak jak pisalem plik wazy mniej niz 1kB więc czy jest sens go zamykac co chwile skoro glownie jest czyszczony? (Jedynie Curl tam dodaje dane).

Oczywiście widze sens gdyby to ważyło 1mB albo 1+gB ale ?kB??
--

EDIT, Inaczej:
W petli jest czyszczony co chwile plik, przez:
fopen('./plik.txt', 'w');

wedlug dokumentacji 'w' oznacza tylko do zapisu(NIE ODCZYTU) oraz ucinanie pliku do 0b. I tak sie dzieje.
Plik mimo wszystko gdy cos zawiera to poniżej 1kB.

Czy jest tu logiczny sens zamykania niego w trybie 'w', prawie co każde okrążenie a jest ich kilkanaście tysięcy?
Pyton_000
kurna... Co oznacza czyszczenie? Powiedz/pokaż lepiej co się dzieje z tym plikiem. Czy jest to tylko jakaś flaga w postaci pliku, czy zapisujesz coś tam...

Z Twojego pytania nie wynika nic co chcesz zrobić...
KsaR
Cytat(Pyton_000 @ 20.03.2016, 18:00:04 ) *
kurna... Co oznacza czyszczenie? Powiedz/pokaż lepiej co się dzieje z tym plikiem. Czy jest to tylko jakaś flaga w postaci pliku, czy zapisujesz coś tam...

Z Twojego pytania nie wynika nic co chcesz zrobić...

To wszystko jest.

A więc trzeci raz:

Mam sobie "plik.txt"
Leci sobie petla foreach ktora ma ponad 10,000 elementów i czasem dochodzi do jej(ilosc elementow/obiegów pętli).

Za kazdym przelotem jest wysylane rzadanie cURL;
I za kazdym razem zapisuje ono do pliku "plik.txt" cookie.

JEDNAK, co kilka kroków muszę robić "plik.txt" pusty, coś jak np.:
$plik = '';
...
I wczesniej robilem tak:

file_put_contents('./plik.txt', '');
Jednak to jest nie oplacalne w pętli, co innego dla pojedynczego wywolania.

A wiec robie:

fopen('./plik.txt', 'w');
Ktore mi czysci ten plik...
(Ten plik odczytuje tylko cURL oraz tam zapisuje)
Tak więc plik wazy okolo 0.22kB

Czy jest tu sens uzywania prawie co kazde okrazenie petli fclose(...); ? W trybie 'w' dla pliku <1kB??

Pyton_000
fopen przed pętlą,
fclose za pętlą.

Tylko musisz czyścić w odpowiednich momentach co tam chcesz

W pętli co tam sobie chcesz.
com
Dokładnie tak jak napisał Pyton_000, logiczne jest przecież, że bez sensu otwierać n razy plik i tworzyć uchwyt do niego skoro robisz cały czas operację na tym samym pliku. A jak nie użyjesz fclose, to na rożnych systemach czasem występuje problem np na Windows biggrin.gif
KsaR
Będę szczery, nikt nie był nawet blisko... (Więc chyba nadal nikt nie zrozumiał o co mi chodzi)...

Ten skrypt jednolinijowy:
  1. fopen('./plik.txt', 'w');

Czyści zawartość plik.txt (zostawia go pustym)
I działa to mniej więcej jak:
  1. file_put_contents('./plik.txt', "");


Dodatkowo dodam,
Plik ten zawiera cookie(jak pisałem na początku), z sesją dla cURL-a.
Jednak tę sesję muszę kasowac (wraz z cookie) co kilka obiegów pętli. I tworzyć na nowo...
Więc nie ma czegoś takiego jak fopen przed petla... (Bo by raz kasowalo) ani fclose za jako że jest otwierany trybem do zapisu oraz waży 0.22kB więc nic nie zrobi i tak...
Pytanie zadałem bo nie miałem pewności czy zawsze trzeba zamykać (lub i za każdym obiegiem)
Ale po przemyśleniu i testach nie trzeba jednak.
com
bo robisz to źle, w pętli masz kasować zawartość pliku, a nie otwierać n razy czyli ftruncate($fp, 0); wink.gif

My zrozumieliśmy, a Ty nie wink.gif

fclose zamyka uchwyt do pliku a nie plik, tryb nie ma znaczenia. To są podstawy kolego.
KsaR
Cytat(com @ 21.03.2016, 22:48:34 ) *
bo robisz to źle, w pętli masz kasować zawartość pliku, a nie otwierać n razy czyli ftruncate($fp, 0); wink.gif

My zrozumieliśmy, a Ty nie wink.gif

fclose zamyka uchwyt do pliku a nie plik, tryb nie ma znaczenia. To są podstawy kolego.

Zauwaz ze ta funkcja pierwszy raz padla wiec dopiero chyba zrozumiales,

Btw.
Cytat
If you want to empty a file of it's contents bare in mind that opening a file in w mode truncates the file automatically, so instead of doing...

  1. <?php
  2. $fp = fopen("/tmp/file.txt", "r+");
  3. ftruncate($fp, 0);
  4. fclose($fp);
  5. ?>


You can just do...

  1. <?php
  2. $fp = fopen("/tmp/file.txt", "w");
  3. fclose($fp);
  4. ?>

http://php.net/manual/pl/function.ftruncate.php
^ 1szy komentarz...

Czyli ten komentarz + twoja wypowiedz ze zamykac niejako rozwiązuje moje pytanie.
com
przecież Pyton_000 napisał

Cytat
Tylko musisz czyścić w odpowiednich momentach co tam chcesz
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.