Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> str_replace, zamiana w plikach, tabulatory i nowe linie
daris
post 3.02.2008, 16:58:03
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


Mam taki sktypt:
  1. <?php
  2. if (strpos($file, $find) != false)
  3.  $file = str_replace($find, $code, $file);
  4. else
  5.  $error = $lang['Text not found'];
  6. ?>

który dokonuje zamiany tekstu ($find) na inny ($code) w otwartym pliku ($file). I teraz wszystko działa dobrze dopóki w tekście do znalezienia ($find) nie znajdą się nowe linie (w sumie to nie wiem czy problemem są nowe linie czy tabulatory). "Wyechowanie" tego tekstu w <pre> pokazuje wszystkie linie i tabulatory normalnie. Do wczytywania pliku używam file_get_contents a do zapisywania file_put_contents.

edit: Dopiero teraz się przyjrzałem i dochodzę do wniosku że to jednak nie str_replace może być powodem a raczej strpos, bo wyrzuca tego errora że tekst nie znaleziony (czyli idzie przez "else" tongue.gif ).

Ten post edytował daris 3.02.2008, 17:01:53


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nowotny
post 3.02.2008, 17:01:44
Post #2





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Cytat(daris @ 3.02.2008, 16:58:03 ) *
który dokonuje zamiany tekstu ($find) na inny ($code) w otwartym pliku ($file). I teraz wszystko działa dobrze dopóki w tekście do znalezienia ($find) nie znajdą się nowe linie (w sumie to nie wiem czy problemem są nowe linie czy tabulatory).

No ale co się wtedy dzieje...? i co do tego mają nowe linie i tabulatory...?
Go to the top of the page
+Quote Post
daris
post 3.02.2008, 17:11:02
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


To że jak pisałem wyżej jeśli $find ma więcej niż jedną linię to zamiast przejść przez if'a to przechodzi przez else biggrin.gif

A tabulatory mogą mieć coś z tym wspólnego bo plikiem ($file) jest skrypt php (z wcięciami)

A i jeszcze zapomniałem dodać że przed zamienieniem trim'uje $find'a (bo ma na początku i na końcu pustą linię)

Ten post edytował daris 3.02.2008, 17:23:11


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
Go to the top of the page
+Quote Post
nowotny
post 3.02.2008, 17:23:34
Post #4





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

Ostrzeżenie: (0%)
-----


Cytat(daris @ 3.02.2008, 17:11:02 ) *
To że jak pisałem wyżej jeśli $find ma więcej niż jedną linię to zamiast przejść przez if'a to przechodzi przez else biggrin.gif

To nie jest odpowiedź na poziomie kodera php, no ale niech będzie... tongue.gif

Tak bez sczegółów trudno powiedzieć... spróbuj użyć '!==' zamiast '!='... zapodaj też wartości zmiennych $file i $find...
Go to the top of the page
+Quote Post
daris
post 3.02.2008, 17:52:06
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


Cytat(nowotny)
zapodaj też wartości zmiennych $file i $find...

Z tym to będzie raczej problem bo to leci przez pętelkę biggrin.gif

To jest fragment pliku:
  1. <?php
  2. #
  3. #---------[ 4. OPEN ]---------------------------------------------------------
  4. #
  5.  
  6. header.php
  7.  
  8.  
  9. #
  10. #---------[ 5. FIND (line: 176) ]---------------------------------------------
  11. #
  12.  
  13. else
  14. $tpl_temp .= "\n\t\t\t".'</ul>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
  15.  
  16. #
  17. #---------[ 6. BEFORE, ADD ]--------------------------------------------------
  18. #
  19.  
  20. // MOD: MARK TOPICS AS READ - 2 LINES NEW CODE FOLLOW
  21. else if (basename($_SERVER['PHP_SELF']) == 'viewforum.php')
  22. $tpl_temp .= '</ul>'."\n\t\t\t".'<p class="conr"><a href="misc.php?action=markforumread&id='.$id.'">'.$lang_common['Mark forum as read'].'</a></p>'."\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
  23.  
  24. #
  25. #---------[ 7. OPEN ]---------------------------------------------------------
  26. #
  27.  
  28. include/functions.php
  29. ?>

który parsuję wyrażeniami regualrnymi po kolei (numerkami), i każda "akcja" zostaje wykonywana. Wszystko działa dobrze dopóki w wykonywanym fragmencie (tylko FIND) nie znajdzie się więcej jak jedna linia (ale jak "wyechuje" fragment w <pre> to tekst zawiera i tabulatory i nowe linie).

edit: W powyższym przykładzie możliwe że te \n\t... też przeszkadzają, ale dalej jak nie ma \n\t też nie działa (tylko wtedy kiedy jest więcej niż jedna linia)


edit2: To wyrażenie regularne nie za każdym razem chce działać (na niektórych plikach działa a na niektórych nie):
  1. <?php
  2. preg_match("/#-*[.$i..([A-Z,s*/]*)..*].*s#s*(([^#].*\n)*)s*#/", $install, $section);
  3. $type = trim($section[1]);
  4. $code = trim($section[2]);
  5. ?>


Ten post edytował daris 3.02.2008, 18:11:37


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:13