Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Otwarcie pliku i dokonanie w nim zmian
Forum PHP.pl > Forum > Przedszkole
Majkelo23
Mam instrukcję (update) i zawarte w niej informacje typu:

znajdź:
xx

zmień na:

xxx

Potrzebuję zrobić automat, który sam będzie tego dokonywał. Jak tego najprościej dokonać? Dałoby się otworzyć plik i za pomocą preg_replace znaleźć fragment i go podmienić? Jakiś przykład?

Pozdr.
Van Pytel
A jaki format pliku?
Majkelo23
.php, .css oraz .tpl.
Kshyhoo
Może tak:
  1. $sciezka = "katalog/";
  2. $f = opendir($sciezka);
  3. while (false !== ($plik = readdir($f))) {
  4. if (!is_dir($plik)) {
  5. $tresc = file_get_contents("$sciezka$plik");
  6. $tresc = preg_replace("/stara treść/si", "nowa treść", $tresc);
  7. $fi = fopen("$sciezka$plik", "w");
  8. fputs($fi, $tresc);
  9. fclose($fi);
  10. echo "Gotowe: $sciezka$plik<br />";
  11. }
  12. }

Skrypt przeszuka wszystkie pliki w katalogu i podmieni tekst na inny...
Majkelo23
Tak, tylko właśnie muszę każdy plik z osobna zedytować i teraz nie bardzo mogę to przekształcić na otwarcie PLIKU (a nie wszystkiego z katalogu).
Kshyhoo
No nie żartuj. Zakomentuj pętlę while a jeszcze lepiej, dodaj warunek na nazwę pliku i po kłopocie... Ewentualnie tak (pętla, linia po linii):
  1. $uchwyt = @fopen('plik.txt', 'r');
  2. if ($uchwyt) {
  3. while (($data = fgets($uchwyt, 4096)) !== false) {
  4. // tu operacje na pliku
  5. }
  6. if (!feof($uchwyt)) {
  7. echo "Błąd: niespodziewany błąd fgets()\n";
  8. }
  9. fclose($uchwyt);
  10. }
Majkelo23
  1. <?php
  2.  
  3. $plik = 'plik.php';
  4. $uchwyt = @fopen($plik, 'r');
  5. if ($uchwyt) {
  6. while (($data = fgets($uchwyt, 4096)) !== false) {
  7. $tresc = file_get_contents("$plik");
  8. $zamien = str_replace("to jest", "jestjest", $tresc);
  9. fputs($uchwyt, $zamien);
  10. }
  11. if (!feof($uchwyt)) {
  12. echo "Błąd: niespodziewany błąd fgets()\n";
  13. }
  14. fclose($uchwyt);
  15. echo "gotowe";
  16. }
  17.  
  18. ?>


Wszystko jest ok do fputs() - nie zapisuje zmian w pliku. A przy echo $tresc, a później echo $zamien wszystko jest OK - działa.

Działa, thanks wink.gif
Kshyhoo
Proponowałbym Ci zapisywać plik jako kopię (dla bezpieczeństwa):
  1. $uchwyt = @fopen('plik.txt', 'r');
  2. if ($uchwyt) {
  3. while (($data = fgets($uchwyt, 4096)) !== false) {
  4. // tu operacje na pliku
  5. $f = fopen('plik_kopia.txt', 'a');
  6. fputs($f, $data);
  7. fclose($f);
  8. continue;
  9. }
  10. if (!feof($uchwyt)) {
  11. echo "Błąd: niespodziewany błąd fgets()\n";
  12. }
  13. fclose($uchwyt);
  14. }
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.