Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Czyszczenie pliku, najlepsza opcja?, Oraz czy używać fclose();?
KsaR
post 20.03.2016, 16:55:37
Post #1





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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.

Ten post edytował KsaR 20.03.2016, 16:56:03


--------------------
Go to the top of the page
+Quote Post
com
post 20.03.2016, 16:57:33
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no skoro otwierasz plik to wypadało by zamknąć nie?
Go to the top of the page
+Quote Post
KsaR
post 20.03.2016, 17:02:51
Post #3





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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?

Ten post edytował KsaR 20.03.2016, 17:21:39


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 20.03.2016, 18:00:04
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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ć...
Go to the top of the page
+Quote Post
KsaR
post 20.03.2016, 18:31:47
Post #5





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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??



--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 20.03.2016, 20:34:26
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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.

Ten post edytował Pyton_000 20.03.2016, 20:34:53
Go to the top of the page
+Quote Post
com
post 21.03.2016, 14:05:05
Post #7





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


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
Go to the top of the page
+Quote Post
KsaR
post 21.03.2016, 18:37:46
Post #8





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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.

Ten post edytował KsaR 21.03.2016, 18:53:37


--------------------
Go to the top of the page
+Quote Post
com
post 21.03.2016, 22:48:34
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


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.
Go to the top of the page
+Quote Post
KsaR
post 21.03.2016, 23:12:44
Post #10





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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.


--------------------
Go to the top of the page
+Quote Post
com
post 24.03.2016, 19:28:41
Post #11





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


przecież Pyton_000 napisał

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