Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kasowanie ostatniej linijki z pliku
Forum PHP.pl > Forum > Przedszkole
gsmphone
Witam,

Od pewnego już czasu szukam w manualu php(niestety nie skutecznie) komendy która kasuje ostatnią linijkę w pliku txt który jest na serwerze. Jeżeli ktoś wie to bardzo proszę o pomoc.

Dzięki
pyro
  1. <?php
  2.  
  3. $plik = 'cos.txt'; // nazwa pliku z ktorego ma byc usunieta ostatnia linijka
  4. $a = file($plik);
  5. $tresc = implode(PHP_EOL, $a);
  6. file_put_contents($plik, $tresc);
  7.  
  8. ?>
gsmphone
Wyskakuje mi coś takiego:

Fatal error: Call to undefined function: file_put_contents()
pyro
a to bardzo dziwne, file_put_contents jest wbudowaną funkcją php, ale skoro nie dziala to sprobuj tak:

  1. <?php
  2.  
  3. $plik = 'cos.txt'; // nazwa pliku z ktorego ma byc usunieta ostatnia linijka
  4. $a = file($plik);
  5. $tresc = implode(PHP_EOL, $a);
  6. $uchwyt = fopen($plik, 'wb');
  7. fwrite($uchwyt, $tresc);
  8. fclose($uchwyt);
  9.  
  10. ?>
gsmphone
No to już działa tylko do pliku txt dopisuje mi znaczki(takie kwadratowe).
pyro
tzn dokladnie gdzie ci te kwadraciki dodaje?
gsmphone
No tam gdzie ma być przejście do następnej linijki(tzn ENTER)
pyro
pewnie otwierasz edytorem dziadowym, ja mam tak w notatniku czasem, ale w innych edytorach jest ok, dla testu mozesz se wrzucic taki skrypcik:

  1. <?php
  2.  
  3. $plik = 'aaaa.txt';
  4. $a = file_get_contents($plik);
  5. echo nl2br($a);
  6.  
  7. ?>


a jak ci file_get_contents nie bedzie dzialalo tak samo jak file_put_contents to uzyj funkcji z serii fopen fread fclose
Maxik
Cytat
a to bardzo dziwne, file_put_contents jest wbudowaną funkcją php



Darmowe serwery mają często poblokowane wysokopoziomowe funkcje, wiem, że na yoyo jest wyłączona.
gsmphone
Cytat(pyro @ 22.08.2008, 21:00:49 ) *
pewnie otwierasz edytorem dziadowym, ja mam tak w notatniku czasem, ale w innych edytorach jest ok, dla testu mozesz se wrzucic taki skrypcik:

  1. <?php
  2.  
  3. $plik = 'aaaa.txt';
  4. $a = file_get_contents($plik);
  5. echo nl2br($a);
  6.  
  7. ?>


a jak ci file_get_contents nie bedzie dzialalo tak samo jak file_put_contents to uzyj funkcji z serii fopen fread fclose



No ten skrypt pokazuje co w pliku txt sie znajduje. I jest tak że przed usuwaniem ostatniej linijki mam w txt takie cos:

Linijka 1
Linijka 2
Linijka 3
Linijka 4
Linijka 5
Linijka 6

A już po usuwaniu ostatniej linijki:
Linijka 1

Linijka 2

Linijka 3

Linijka 4

Linijka 5


Czyli usuwa ostatnią ale robi tak jakby 2x enter. I własnie gdy się otworzy ten txt w notatniku po usunięciu ostatniej linijki pokazują się te kwadraciki, coś w stylu:
Linijka 1□□□
Linijka 2□□□
Linijka 3□□□
Linijka 4□□□
Linijka 5
Dodam też że serwer mój nie jest darmowy.
webdice
  1. <?php
  2.  
  3. $fileContent = file ('file.txt');
  4.  
  5. array_pop ($fileContent);
  6.  
  7. $fp = fopen ('file.txt', 'w');
  8.  
  9. fwrite ($fp, implode ("", $fileContent)); 
  10. fclose ($fp);
  11.  
  12. ?>


Pisane z palca, nie sprawdzałem.

EDIT: ~pyro, przepraszam nie czytałem wszystkich postów, a mój kod wygląda jak plagiat winksmiley.jpg.
gsmphone
Cytat(webdicepl @ 22.08.2008, 23:19:08 ) *
  1. <?php
  2.  
  3. $fileContent = file ('file.txt');
  4.  
  5. array_pop ($fileContent);
  6.  
  7. $fp = fopen ('file.txt', 'w');
  8.  
  9. fwrite ($fp, implode ("", $fileContent)); 
  10. fclose ($fp);
  11.  
  12. ?>


Pisane z palca, nie sprawdzałem.



To mi kasuje wszystko z pliku.

Ale dzieki wszystkim za pomoc. Te kwadraciki poprostu sobie usunę tym:

  1. <?php
  2. $correct=array('□'=>'');
  3. $txt_correct = strtr($tresc, $correct);
  4. ?>
golaod
To jest akurat niemożliwe.
Jedyne co to możesz zmienić na;
  1. <?php
  2. fwrite($fp,implode("r\n",$fileContent));
  3. //Lub jak nie chcesz korzystać z implode to:
  4. foreach($fileContent as $val)
  5.  fwrite($fp,$val."r\n");
  6. ?>
elemek
osobiscie jestem za tym rozwiazaniem:
jedyny feler to, ze elementy tablicy zawieraja juz znaki konca lini exclamation.gif dlatego PHP_EOL powoduje powstanie pustych linii, trzeba to zastapic ''.

Cytat(pyro @ 22.08.2008, 18:37:23 ) *
  1. <?php
  2. $plik = 'cos.txt'; // nazwa pliku z ktorego ma byc usunieta ostatnia linijka
  3. $a = file($plik);
  4. $tresc = implode('', $a); // TU MOJA ZMIANA
  5. file_put_contents($plik, $tresc);
  6.  
  7. ?>


EDIT: @pyro: czytalem i autor tematu napisal ze kod kasuje mu wszystko z pliku, a moj (tzn twoj po poprawce) kod dziala dobrze - sprawdzalem.
pyro
elemek, radze przeczytac wyzsze posty, w tym webdicepl

@webdicepl, spoko

@elemek, chodzilo mi o to ze zrobiles to samo co @webdicepl
golaod
Jak dalej nie działa to polecam jeszcze trim tongue.gif
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.