Autor Zpráva
pmasarik
Profil
Zdravím potrebujem urobiť aby som v určitých PHP súboroch zmenil premennú $nieco na $preklad['nieco']
Súborov je veľa a premenných tiež, tak si to chcem zautomatizovať len mi to nejako nejde, nevie niekto ako nato?
Ide mi o fyzickú zmenu textu v súbore, len aby nedošlo k omylu.
Týmto kódom som si myslel že to pôjde ale výsledný súbor je bez zmeny.

require_once ('mysql.php'); //len pripojenie k DB
$jazyk = 'sk';
  $file = 'search.php'; // tu neskor urobím aby sa mi nasli všetky súbory v adresári
  $contents = file_get_contents($file); // načítam súbor
    $resultpomtext = mysql_query("SELECT nazov  FROM kom_pomocne_texty WHERE lang='".$jazyk."'");
        while ($i = mysql_fetch_assoc($resultpomtext)) { // z databáze vyberiem názvy premenných
               $co = '$'.$i['nazov']; // premenná ktorá sa nachádza v súbore
               $zaco = '$preklad[\''.$i['nazov'].'\']'; // za toto ju chcem nahradiť
               echo $co.'<br>'; // vypise napr. - $cena_bez_dph
               echo $zaco.'<br>'; // vypise napr. - $preklad['cena_bez_dph']
               $new_contents = str_replace($co, $zaco, $contents); // tu by sa to malo vymeniť
        }
    // tu by sa mal urobiť nový zmenený súbor
    $file2 = 'search2.php';
    $fh = fopen($file2, 'r+');
    fwrite($fh, $new_contents);
    fclose($fh);
mikul
Profil
No tak jestli chceš prostě něco přepsat na něco jiného, tak v editoru použij "vyhledat a nahradit" nebo to bude pod jiným podobným názvem. Zadáš jaký text chceš vyhledat a jakým ho nahradit. Snad jsem tě správně pochopil.
pmasarik
Profil
Pochopil si to správne, ale tých súborov je hrozne moc a premenných je tiež hrozne moc, to by som robil 3 dni takto ručne :(

Zistil som že funkcie v PHP majú problém asi s tým znakom $. Skúšam ďalej ak by niekoho niečo napadlo tak dajte vedieť.
mikul
Profil
No tak například některé editory nabízí možnost i nahradit text ve všech otevřených souborech najednou. Takže by jsi je musel jen pootevírat a už by se ti to udělalo. Jinak ti bohužel nepomůžu.
TSD
Profil *
co je "hrozně moc"? Je rozumné, že se snažíš nechat "práci strojům", ale když se to brání, tak bych na to šel jinak. PSPad má funkci "Nahradit text v souborech". Jak asi tušíš, zadáš co se má nahradit čím a zadáš složku (na lokálu) a máš jedno "hrozne moc" vyřešeno.

Druhé "hrozne moc" je počet těch záměn. To je kolik, 10? 50? 10 zvládneš ručně, Jestli jich je víc, tak se ozvi, kdysi jsem dělal něco, co v zadaných *.doc souborech dělalo libovolný počet záměn, který se zadával jako tabulka v excelu. Zkusíme se nějak domluvit.
pmasarik
Profil
Takže lenivosť ručnej práce nakoniec priniesla úspech a automatika funguje :)
Problém bol v tom $ PHP ho nebralo ako súčasť reťazca, ale považovala ho za premennú (tipujem)...

require_once ('mysql_spojit.php');
$jazyk = 'sk';
  $file = 'search.php';
  $contents = file_get_contents($file);
        $resultpomtext = mysql_query("SELECT nazov FROM kom_pomocne_texty WHERE lang='".$jazyk."' ORDER BY LENGTH(nazov) DESC");
         $co = array();
         $zaco = array();
           while ($i = mysql_fetch_assoc($resultpomtext)) {
               $co[] = "\$".$i['nazov'];
               $zaco[] = "\$preklad['".$i['nazov']."']";
           }
        $new_contents = str_replace($co, $zaco, $contents);
    $fh = fopen($file, 'r+');
    fwrite($fh, $new_contents);
    fclose($fh);
pmasarik
Profil
Ešte som to vylepšil, lebo tam bol problém že keď sa zamieňalo $bal za $preklad['bal'] a bolo tam aj $balenie tak to sa nesprávne zamenilo za $preklad['bal']enie

To len ak by niekto potreboval niečo podobné :)
<?php
require_once ('mysql_spojit.php');
$jazyk = 'sk';
foreach (glob("*.php") as $file) {
    $contents = file_get_contents($file);
    $resultpomtext = mysql_query("SELECT nazov FROM kom_pomocne_texty WHERE lang='".$jazyk."' ORDER BY LENGTH(nazov) DESC");
       while ($i = mysql_fetch_assoc($resultpomtext)) {
           $contents = preg_replace( '~\$(\b'.$i['nazov'].'\b)~', "\$preklad['\\1']", $contents );
       }
    $fh = fopen($file, 'r+');
    fwrite($fh, $contents);
    fclose($fh);
}
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: