Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automat do zamiany fragmentów kodów plikach
Forum PHP.pl > Forum > PHP
Michael2318
Chcę zrobić sobie automat, który zamieni mi w wybranych plikach, wskazane fragmenty na nowe. Napisałem sobie 'coś', lecz niestety to w ogóle nie chce zamieniać podanych przeze mnie kodów.

Część odpowiedzialna za zamiane:

  1. $path = 'plik.tpl';
  2.  
  3. $find[1] = '<td class="catHead" colspan="7" height="28"><span class="cattitle">&nbsp;test</span></td>';
  4. $replacement[1] = 'test';
  5. $find[2] = '<td nowrap class="row1" align="left" valign="middle">';
  6. $replacement[2] = '<div id="costam">';
  7.  
  8.  
  9. $fp = fopen($path, "r");
  10. $old_data = fread($fp, filesize($path));
  11. fclose($fp);
  12. $not_replace = '';
  13. for($i = 1; $i <= 2; $i++)
  14. {
  15. $new_data = str_replace($find[$i], $replacement[$i], $old_data, $count);
  16. if ( $count == 0 )
  17. {
  18. $not_replace .= '<br><span style="color: red;">Nie zamieniono:<br><b>'.$find[$i].'</b> na:<br><b>'.$replacement[$i].'</b>';
  19. }
  20. }
  21. $fp = fopen($path.'index_body.tpl', "w");
  22. fputs($fp, $new_data);
  23. fclose($fp);
  24.  
  25. if ( $not_replace == '' )
  26. {
  27. echo 'Zamieniono poprawnie!';
  28. }
  29. else
  30. {
  31. echo $not_replace;
  32. }


Ktoś mi powie czemu to nie łapie? Rozumiem, gdyby były jakieś odstępy czy coś, ale póki co, to są pojedyncze linie kodów, więc nie rozumiem czemu to nie chce załapać.

EDIT:

Jak echuję strlen($old_data) przed i po zamianie to niby jest jakieś 100 znaków różnicy, ale te wskazane fragmenty nie są nadal zamienione.
nospor
Po pierwsze i najważniejsze:
nie:
$new_data = str_replace($find[$i], $replacement[$i], $old_data, $count);
a:
$old_data = str_replace($find[$i], $replacement[$i], $old_data, $count);

Przecież robisz to w petli, wiec musisz zawsze operować na tym samym zbiorze danych. Później do pliku też masz zapisać $old_data.


No i drugie najważniejsze: jesteś pewien na 100% ze szukane ciągi znajduję się w tym pliku? Dokładnie takie? Nie ma tam białych znaków, których nie widzisz? Daj nam lepiej do ściągnięcia ten plik
lukaskolista
Jezeli ma to byc narzedzie do edycji kodu aplikacji, to nie lepiej skorzystac w gotowego oprogramowania do tego celu? Juz prosty notepad++ ma opcje zamiany fraz w plikach z uwzglednieniem wyrazen regularnych
Michael2318
Owszem, są tam białe znaki, ale to chyba nie robi różnicy? Białe znaki są przed szukanymi fragmentami.
nospor
Pytam się o białe znaki w szukanych rzeczach a nie przed czy po.
Skoro ci nie znajduje, to ciągi się różnią.

Proszę udestępnij nam swój plik, to szybciej sprawdzę co jest nie tak. ALe Twoja sprawa. TY masz problem nie ja.
Michael2318
Pewnie, już daję.
Tutaj jest cały plik: http://www.wklej.org/id/937494/
A szukane fragmenty:

  1. $find[1] = '<td class="catHead" colspan="7" height="28"><span class="cattitle">&nbsp;{L_REGIST_TITLE}</span></td>';
  2. $replacement[1] = '<td class="catHead" colspan="9" height="28"><span class="cattitle">&nbsp;{L_REGIST_TITLE}</span></td>';
  3. $find[2] = '<td nowrap class="row1" align="left" valign="middle">';
  4. $replacement[2] = '<td nowrap class="row1" align="left" valign="middle" colspan="3">';
  5. $find[3] = '<td class="row1" align="left" valign="middle"><input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:120px" name="email" size="25" maxlength="255" value=""></td>';
  6. $replacement[3] = '<td class="row1"><input type="text" class="post" style="width:120px" name="email1" size="25" maxlength="200" value="" /></td>'."\n".'<td class="row1"><span class="genmed">@</span></td>'."\n".'<td class="row1"><input type="text" class="post" style="width:120px" name="email2" size="25" maxlength="200" value="" /></td>';


Trzeci find i replace się zamieniają, 1 i 2 już nie. Podmieniłem wszędzie na $old_data.

EDIT:

Działa ! Dzięki exclamation.gif

I jeszcze tak na przyszłość - co jeśli będę chciał znaleźć np ten fragment:

Kod
  <tr>
   <td class="row1"><span class="gen">{BOARD_MSG}</span></td>
  </tr>


Tam są białe znaki wcześniej, odstępy (\n) i inne wianki :/
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.