Jump to content
Sign in to follow this  
Mar

[php] zapis do pliku w pętli

Recommended Posts

Mam plik stat.txt oraz kod:

$file2="stat.txt";
$fp=fopen("$file2", "w");
fwrite($fp, ''); 
flock($fp, 3); 
fclose($fp); 
while ()
 { 
$i++; 
$dane=$i; 
$file2="stat.txt"; 
$fp=fopen("$file2", "r+"); 
$dane=$dane.fread($fp, 
filesize($file2)); 
rewind($fp); 
flock($fp, 2); 
fwrite($fp, $dane); 
flock($fp, 3);  
fclose($fp);  
}

 

przed pętlą czyszczę plik, niestety nie otrzymuję w pliku to co chciałbym, tz chcę by w pliku było:
 
"...54321"
 
natomiast w pliku mam tylko wartość ostatniego $i.
 
Gdzie popełniam błąd?
 
 
M.
 
Edited by Mar

Polecam katalog SeoPark.pl, katalog AK47 (5 lata w sieci) ...oraz Wirtualne-miasta.eu
"Dopóki nie skorzystałem z Internetu, nie wiedziałem, że na świecie jest tylu idiotów" - Stanisław Lem

Share this post


Link to post
Share on other sites

Zamiast filesize, który zwraca cały czas początkowy rozmiar pliku, użyj fstat:

$fstat = fstat($fp);
$fstat['size']; //aktualny rozmiar pliku

nihil fit sine causa

Share this post


Link to post
Share on other sites

Gdzie popełniam błąd?

Może w pętli w której ciągle "mieszasz" w pliku? Zapisz w pętli wszytko co potrzebne do zmiennej a następnie po pętli zapisz zawartość zmiennej do pliku.
  • Like 1

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.
dymna.jpg

Share this post


Link to post
Share on other sites

@Trotyl, niestety dalej to samo.

 

@Irek, chodzi o to, że chcę obrócić pętle...

 

chyba, ze da się w PHP zapis do zmiennej z przodu, czyli utworzyć zmienną, która będzie miała wartość $d='54321'

 

zamiast 12345, niestety kod nie pozwala by odwróć już zapytanie wcześniej.

 

 

M.

 

 


Polecam katalog SeoPark.pl, katalog AK47 (5 lata w sieci) ...oraz Wirtualne-miasta.eu
"Dopóki nie skorzystałem z Internetu, nie wiedziałem, że na świecie jest tylu idiotów" - Stanisław Lem

Share this post


Link to post
Share on other sites

for($i=5; $i>0; $i--){
    echo $i;
}


Portal rolniczy NowoczesnaFarma.pl -  zawsze najświeższe wiadomości, porady oraz nowinki techniczne dot. traktorów, maszyn i urządzeń rolniczych;

Ogloszenia-Rolnicze.com - serwis z darmowymi ogłoszeniami rolniczymi w kategoriach: maszyny rolnicze, traktory, hodowla, uprawy, nieruchomości, praca;
Portal ekologiczny Eco-News.pl - aktualne wiadomości, porady i informacje  na temat odnawialnych źródeł energii OZE .

Share this post


Link to post
Share on other sites

Masz włączone pełne raportowanie błędów razem z warningami i notice? Włącz jeśli nie, ponieważ na tę chwilę kod zgłasza:

Warning: fread(): Length parameter must be greater than 0 in

Dalej będzie pewnie jakieś błądzenie kodu związane właśnie z tym ostrzeżeniem.

 

Edycja:

a filesize zwraca 0, ponieważ dane dotyczące wielkości pliku są zcachowane podczas pętli while (pierwsze filesize zwraca 0, bo plik jest pusty na początku i wartość ta trafia do cache i tak już zostaje do końca).

Trzeba użyć dodatkowo clearstatcache w pętli.

 

Edited by ttah

Tani hosting z darmowym certyfikatem SSL HEXCORE

Share this post


Link to post
Share on other sites

@KrissTex, dzięki ale to musi być pętla while, tak samo nie mogę wcześniej posortować.

 

@ttah dzięki za podpowiedź, faktycznie tam coś było nie tak, zrobiłem tak:

$tekst = @file_get_contents($file2); 

Dzięki.


Polecam katalog SeoPark.pl, katalog AK47 (5 lata w sieci) ...oraz Wirtualne-miasta.eu
"Dopóki nie skorzystałem z Internetu, nie wiedziałem, że na świecie jest tylu idiotów" - Stanisław Lem

Share this post


Link to post
Share on other sites

@Trotyl, niestety dalej to samo.

 

Dziwne, u mnie działa. Pacnąłem to:

<?
$file2="stat.txt";
$fp=fopen("$file2", "w");
fwrite($fp, ''); 
flock($fp, 3); 
fclose($fp); 
while ($i<30)
 { 
$i++; 
$dane=$i; 
$file2="stat.txt"; 
$fp=fopen("$file2", "r+"); 
$fstat = fstat($fp);
$dane=$dane.fread($fp, $fstat['size']); 
rewind($fp); 
flock($fp, 2); 
fwrite($fp, $dane); 
flock($fp, 3);  
fclose($fp);  
}

I wypluł w stat.txt to:

302928272625242322212019181716151413121110987654321

chyba, ze da się w PHP zapis do zmiennej z przodu, czyli utworzyć zmienną, która będzie miała wartość $d='54321'
$zmienna=strrev($zmienna); //odwracanie ciągu
$zmienna=$zmienna1.$zmienna2 //łączenie ciągów
$zmienna=$zmienna2.$zmienna1 //łączenie ciągów

Tak jak pisał @Irek, coś przekombinowujesz. 


nihil fit sine causa

Share this post


Link to post
Share on other sites

OT zamiast "męczyć" się z używaniem plików IMHO znacznie prościej jest zastosować bazę danych nie koniecznie MySQL, ale SQLite <SQLite3> dostępną w chyba każdej współczesnej wersji PHP na hostingu.

 

Do obsługi plików jest też funkcja moim zdaniem wyższego poziomu:

http://php.net/manual/en/function.file-get-contents.php

http://php.net/manual/en/function.file-put-contents.php

  • Like 1

HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL
- Full Stack Developer - :chatownik:

+ Ciekawy VLOG o Dubaju 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Terms of Use Privacy Policy