Autor Zpráva
Dadadada
Profil *
Zdravím, mám script na vytváření souboru a zapisováíní. Problém je, že nyní bych potřeboval aby se mido souboru zapisoval php script...

např nějak takto:
<?php
$text = "
<?php 
$text = "abc";
echo"$text";
";
$soubor = fopen("soubor.txt", "a+");
fwrite($soubor, $text);
fclose($soubor);
?>
Keeehi
Profil
<?php
$text = '<?php 
$text = "abc";
echo"$text";
';
$soubor = fopen("soubor.txt", "a+");
fwrite($soubor, $text);
fclose($soubor);
?>
To že se zapisuje php script je úplně vedlejší. Je to řetězec jako každý jiný.
Dadadada
Profil *
Děkuji, tot funguje, ale když dám script který já potřebuji, tak právě syntax chyba...

<?php
$text = '
<?php 
 echo "<h1>".$_GET['nazev']."</h1>";
$nazev = "".$_GET['nazevdb']."";       
    $sql = MySQL_Query("SELECT * FROM $nazev");
        while ($row = MySQL_Fetch_Array($sql)) {
        echo "".$row['text']."";    
        }            
?>
';
$soubor = fopen("soubor.txt", "a+");
fwrite($soubor, $text);
fclose($soubor);
?>
panther
Profil
Dadadada:
apostrofy uvnitr toho stringu musis escapovat, tedy pridat pred ne zpetne lomitko.
Joker
Profil
Dadadada:
Na toto by bylo nejlepší použít NOWDOC syntaxi:
<?php
$text = <<<'EOD'
<?php 
 echo "<h1>".$_GET['nazev']."</h1>";
$nazev = "".$_GET['nazevdb']."";       
    $sql = MySQL_Query("SELECT * FROM $nazev");
        while ($row = MySQL_Fetch_Array($sql)) {
        echo "".$row['text']."";    
        }            
?>
EOD;
$soubor = fopen("soubor.txt", "a+");
fwrite($soubor, $text);
fclose($soubor);
?>
Viz také PHP manuál (anglicky).
Jen tedy shrnu, že NOWDOC se zapisuje takto: Tři menšítka, apostrof, identifikátor, apostof a odřádkování <<<'cokoliv'
Vše za tím se bere jako řetězec, až do řádku, který obsahuje pouze ten zvolený identifikátor a volitelně středník. Identifikátor musí být úplně na začátku řádku, nesmí před ním být ani mezera nebo jiné odsazení.
Tzn.:
<<<'cokoliv'
všechno zde se bere jako řetězec až do ukončovacího řádku:
cokoliv;
Dadadada
Profil *
děkuji, to byb ylo parádní řešení, ale vypisuje mi to chybu:
Parse error: syntax error, unexpected T_SL in /data/...... on line 25
Ugo
Profil
upozornění - nowdoc je od PHP 5.3 a narozdíl od některých zdejších co mají možnost pracovat vždy s nejnovějšími verzemi, není tomu tak u všech a i tak stará verze jako 5.3 bývá stále problém :) , ovšem nevím, zda s tím souvisí vyhozená chyba
Joker
Profil
Dadadada:
„Parse error: syntax error“ znamená špatně napsaný skript.
Chyba „unexpected T_SL“ (T_SL znamená „<<“) bude způsobená chybou v té NOWDOC syntaxi.
Musí to být zapsané tak jak jsem napsal.
Začátek: Tři menšítka, apostrof, identifikátor*, apostrof, konec řádku
Konec: Začátek řádku, samotný identifikátor (tj. bez apostrofů), volitelně středník, konec řádku.
Nesmí v těch sekvencích být nic navíc, ani mezera, tabulátor a podobně (čili zejména koncový identifikátor nesmí být odsazený).

* Pojmenování identifikátoru má snad stejné konvence jako pojmenování třeba proměnných, takže písmena, čísla, podtržítko a nesmí začínat číslem.

edit:
ad Ugo, dobrá poznámka, jak teď píšu PHP učebnici, kde je všechno dané pro PHP 5.3, vůbec mě nenapadlo to zmínit.
Dadadada
Profil *
zkopíroval sem to přesně jak máte
¨<?php
$text = <<<'EOD'
<?php 
 echo "<h1>".$_GET['nazev']."</h1>";
$nazev = "".$_GET['nazevdb']."";       
    $sql = MySQL_Query("SELECT * FROM $nazev");
        while ($row = MySQL_Fetch_Array($sql)) {
        echo "".$row['text']."";    
        }            
?>
EOD;
$soubor = fopen("soubor.txt", "a+");
fwrite($soubor, $text);
fclose($soubor);
?>

a pořád to píše to samé
Joker
Profil
Dadadada:
Pak to asi opravdu bude starší verzí PHP. Jak správně poznamenal Ugo, funguje to v PHP 5.3 a novějších.

Druhé řešení tedy je si ten kód zkopírovat někam vedle a pustit na něm dvakrát nahrazení: Nejdřív změnit \ na \\ a potom ' na \'.
Výsledný kód pak může být v apostrofech.

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: