Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Operacje plikowe - zmiana konkretnej lini w tek¶cie
Forum PHP.pl > Forum > Przedszkole
pitrro131
Witam, a więc posiadam plik php w postaci kilku zmiennych które służ± za konfigurację.
Plik wygl±da mniej więcej tak:
  1. <?php
  2. $dzi= false;
  3. $jutro = false;
  4. ?>


Chodzi mi o to żeby napisać inny prosty skrypcik który by otowrzył ten plik i zamienił warto¶ć przy zmiennej dzi¶ na warto¶ć true.

Znalazłem gdzie¶ co¶ takiego:

  1. $key = '$dzi¶ = false';
  2. $newline = '$dzi¶ = true';
  3.  
  4. //copy file to prevent double entry
  5. $file = "config.php";
  6. $newfile = "filetemp.txt";
  7. copy($file, $newfile) or exit("failed to copy $file");
  8.  
  9. //load file into $lines array
  10. $fc = fopen ($file, "r");
  11. while (!feof ($fc))
  12. {
  13. $buffer = fgets($fc, 4096);
  14. $lines[] = $buffer;
  15. }
  16.  
  17. fclose ($fc);
  18.  
  19. //open same file and use "w" to clear file
  20. $f=fopen($newfile,"w") or die("couldn't open $file");
  21.  
  22.  
  23. // print_r($lines);
  24. // print "<br>\n";
  25.  
  26.  
  27. //loop through array using foreach
  28. foreach($lines as $line)
  29. {
  30. fwrite($f,$line); //place $line back in file
  31. if (strstr($line,$key)){ //look for $key in each line
  32. fputs($f,$newline);
  33. } //place $line back in file
  34. }
  35. fclose($f);
  36.  
  37. copy($newfile, $file) or exit("failed to copy $newfile");


To co podałem działa u mnie słabo.
I przy każdym wywołaniu dodaje w tej drugiej linii kodu tak± sam± linię zamiast zamienić t± pierwsz±.

  1. <?php
  2. $dzi= false;
  3. $dzi= true;$dzi= true;$dzi= true;$dzi= true;$jutro = false;
  4. ?>
mortus
Na pocz±tku:
  1. $key = '$dzi¶ = false;';
  2. $newline = '$dzi¶ = true;';
Od ostatniej pętli foreach
  1. //loop through array using foreach
  2. foreach ($lines as $line) {
  3. if (strstr($line, $key)) { //look for $key in each line
  4. fwrite($f, $newline . "\n");
  5. } else {
  6. //place $line back in file
  7. fwrite($f, $line); //place $line back in file
  8. }
  9. }
  10. fclose($f);
  11.  
  12. copy($newfile, $file) or exit("failed to copy $newfile");
  13. unlink($newfile);
Oczywi¶cie działa dla pocz±tkowej warto¶ci pliku config.php
  1. <?php
  2. $dzi= false;
  3. $jutro = false;
  4. ?>

EDIT:
Nie jest to jedyna metoda, bo po co np. tworzyć nowy plik, równie dobrze można nadpisać istniej±cy config.php.
pitrro131
Spoko działa już ładnie zamienia:)
A no i oczywi¶cie bez kopiowania pliku lepiej by było.
Albo może znacie inn± prostsz± metodę.
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.