Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Działania na plikach
Forum PHP.pl > Forum > PHP
alkesz1718
Witam, kolega ma taki malutki problem a mianowicie za pomocą pliku php (instalacyjnego) chciał aby w danym pliku (przykładowo pod nazwą: mój_plik.php) odnalazło przykładowo taki kod:
  1. $txt = str_replace( "</code></pre>", '[/code]', $txt );


po czym zmieniło go na taki:
  1. $txt = str_replace( "</codex></prec>", '[/codex]', $txt );


i zapisało plik nie naruszając innych treści jakie są w pliku ale nie wie jakiego kodu użyć do tego.

Ja mu nie mogę pomóc bo sam nwm jak to zrobić więc piszę tutaj
Raito
Można wczytać plik do tablicy, użyć pętli foreach i wyszukać ciąg znaków, po czym go zamienić.
alkesz1718
a można prosić o jakiś wzór takowego kodu??
sadistic_son
Moim zdaniem najprościej będzie tak:
  1. $plik="mój_plik.php";
  2.  
  3. $zawartosc=file_get_contents($plik); //wczytaj zawartosc pliku mój_plik.php do zmiennej $zawartosc jako tekst
  4.  
  5. $co_znalezc='$txt = str_replace( "</code></pre>", '."'[/code]'".', $txt );'; // takie rozdzielenie tego tekstu jest konieczne ze zwgledu na wystepowanie w nim roznych cudzyslowow ( zarówno ' jak i " )
  6.  
  7. $na_co_zamienic='$txt = str_replace( "</codex></prec>", '."'[/codex]'".', $txt );';
  8.  
  9. $nowa_zawartosc=str_replace($co_znalezc,$na_co_zamienic,$zawartosc); //w $zawartosc zamien $co_znalezc na $na_co_zmienic i wczytaj do $nowa_zawartosc
  10.  
  11. file_put_contents($plik,$nowa_zawartosc); //zapisz do pliku $plik to co w zmiennej $nowa_zawartosc
alkesz1718
ok sprawdzę go smile.gif a jeszcze jak zrobić by sprawdzało czy poprawnie zapisano dany plik... tj. podczas instalacji chcę by przy tym zapisywaniu zawartości w nowych plikach potem pokazywało info czy zapisano poprawnie czy nie...

wcześniej miałem taki kod do zmieniania zawartości pliku:
  1. $zodziai4=array(
  2. ' array (
  3. \'name\' => $lang[\'opt_question\'],
  4. \'url\' => "$PHP_SELF?mod=question",
  5. \'mod\' => "question",
  6. \'access\' => "admin"
  7. )
  8. '=>' array (
  9. \'name\' => $lang[\'opt_question\'],
  10. \'url\' => "$PHP_SELF?mod=question",
  11. \'mod\' => "question",
  12. \'access\' => "admin"
  13. ),
  14. array (
  15. \'name\' => $lang[\'sound_conf\'],
  16. \'url\' => "$PHP_SELF?mod=sound",
  17. \'mod\' => "sound",
  18. \'access\' => "admin"
  19. )
  20.  
  21. ');
  22. $fai4='engine/skins/default.skin.php';
  23. foreach ($zodziai4 as $key => $value) {
  24. $redaguoti4 = @file_get_contents($fai4);
  25. $pakeista4=str_replace($key, $value, $redaguoti4);
  26. $failas4 = @fopen($fai4, "w+");
  27. fwrite($failas4, $pakeista4);
  28. fclose($failas4);
  29. }


oraz:

  1. $zodziai2=array(
  2. ' $txt = str_replace( "</code></pre>", \'[/code]\', $txt );
  3. '=>' $txt = str_replace( "</code></pre>", \'[/code]\', $txt );
  4. $txt = preg_replace( "#<!--dle_zs_begin:(.+?)-->(.+?)<!--dle_zs_end-->#is", \'[zs=\\1]\', $txt );
  5. $txt = preg_replace( "#<!--dle_hl_begin:(.+?)-->(.+?)<!--dle_hl_end-->#is", \'[hl=\\1]\', $txt );
  6. ');
  7. $fai2='engine/classes/parse.class.php';
  8. foreach ($zodziai2 as $key => $value) {
  9. $redaguoti2 = @file_get_contents($fai2);
  10. $pakeista2=str_replace($key, $value, $redaguoti2);
  11. $failas2 = @fopen($fai2, "w+");
  12. fwrite($failas2, $pakeista2);
  13. fclose($failas2);
  14. }


ten 1 kod się ładnie zainstalował i zapisało go bez zarzutów ale ten 2 już coś ma problemy i mi nie chce go zmieniać stąd też pytałem o jakiś łatwiejszy i skuteczny sposób na zmienianie zawartości...

Ale powracając do moego pytania to nawiązując do w/w kodów chcę by mi sprawdzało czy zapisały się poprawnie te pliki
salfunglandyare
Jesteś pewien że:
* szukana treść pokrywa się z tym, czego szukasz? np znak końca linii może być inny dla różnych systemów (\n, \r\n, \n\r'), tabulacje mogą być zamieniane na spacje i odwrotnie,
* skrypt ma uprawnienia do otwarcia pliku do zapisu?
Zamiast:
  1. $failas2 = @fopen($fai2, "w+");
  2. fwrite($failas2, $pakeista2);
  3. fclose($failas2);

daj
  1. if(($failas2 = fopen($fai2, "w+"))!==false){
  2. fwrite($failas2, $pakeista4);
  3. fclose($failas2);
  4. } else {
  5. die('Nie udało się zapisać pliku');
  6. }
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.