Autor Zpráva
Enko
Profil *
Ahoj,
můžete mi prosím někdo poradit proč mi nefunguje PHP_EOL na následujícím příkladu?
<?php
if(!defined('PHP_EOL')){  
  define('PHP_EOL', strtoupper(substr(PHP_OS,0,3) == 'WIN') ? "\r\n" : "\n");  
}


//poslat email o chybe neulozeni do MySQL

$zprava = "Nepodařilo se uložit data do MySQL" .PHP_EOL;
$zprava .= mysql_errno()." - ".mysql_error(). PHP_EOL;
$zprava .= "Pod čarou následuje celý SQL dotaz". PHP_EOL;
$zprava .= "----------------------------------" .PHP_EOL;
$zprava .= $sql;
$mail = "nejak@email.cz";
$predmet = "Nepodařilo se uložit data do MySQL";
cs_mail($mail, $predmet, $zprava, "From: neco@odnekud.cz".PHP_EOL);

?>



Aha, tak vše funguje jak má. Můj emailový klient odstraňuje "nadbytečné" konce řádků. :)
jirka0376
Profil
Ahojky,

potřeboval bych poradit? Používám Microsoft Expression Web 4 a:

- když napíši do kódu PHP_EOL, tak se neodřádkuje a proměnná 2 pokračuje hned za první
echo $promenna1 . PHP_EOL . $promenna2;

- oproti tomu <br/> mi vždy odřádkuje a obě proměnné jsou na samostatných řádcích
echo $promenna1 . '<br/>' . $promenna2;

Nevěděl by někdo, čím by to mohlo být? Chtěl by používat PHP_EOL, abych se vyhnul nefunčnosti na některých platformách.
Tomášeek
Profil
jirka0376:
Ano, to je v pořádku. V HTML se jeden či více bílých interpretuje jako jedna mezera. Doporučuji zkusit nastudovat, jakýže rozdíl mezi PHP_EOL a BR je. Velký.
midlan
Profil
jirka0376:
Emailoví klienti zřejmě interpretují obsah zprávy jako HTML (text/html), ty je musíš přinutít aby na něj pohlíželi jako na prostý text (text/plain). Přidej tedy hlavičku Content-Type: text/plain a příslušné kódování.

Mimo to bych doporučil používat odřádkování stylem DOS (který funguje i pro unix a mac systémy), tedy netisknutelnými znaky CR LF. PHP_EOL, pokud vím, vrací odřádkování podle toho, na jakém systému PHP zrovna běží ikdyž klienti používají různé systémy.
jirka0376
Profil
midlan [#4]:
Nejedná se mi o odřádkování v emailu, ale v rámci webové stránky. Asi jsem to měl napsat. :-) Když jsem si otestoval PHP_EOL na stránce sandbox.onlinephpfunctions.com/code/615a29d3bef2c85d9f9e16f514806efdd34424b2, tak tam funguje, jak má - tedy odřádkuje.

Tomášeek:
Jaký je rozdíl mezi PHP_EOL a BR je mi jasný podle definice:

Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě.
Lonanek
Profil
Jaký je formát souboru (použité pro odřádkování - Windows, Unix, MAC) a na jakém systému to běží, jaká je verze PHP?
Davex
Profil
jirka0376:
Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě.
PHP_EOL obsahuje odřádkování podle toho, na jaké platformě běží PHP, takže toto nemá smysl používat pro webové stránky, jelikož

1) webový prohlížeč může běžet na zcela odlišné platformě než server s PHP
2) webové prohlížeče na různých platformách běžně zvládají více typů standardizovaných odřádkování
jirka0376
Profil
Lonanek [#6]:
Pracuji zatím v programu Microsoft Expression Web 4 pod Windows 7 64bit / na serveru mi to běží pod Linuxem. Verze PHP je 5.6.30.
mckay
Profil
jirka0376:
Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě.
PHP_EOL dle mého porozumění vkládá konec řádku odpovídající používanému znaku konce řádku na platformě (systému), na kterém běží PHP které skript interpretuje. Adresa na které si to zkoušíte vypisuje výstup do <textarea> HTML elementu a proto se Vám text viditelně odřádkuje.

Problém je zřejmě v tom, že všude jinde se znak zalomení řádku zobrazuje - stejně jako jakýkoliv jiný bílý znak v prohlížeči - jako mezera. Jedna mezera. Chcete-li v prohlížeči zobrazovat text na nový řádek, budete místo PHP_EOL muset použít tag <br>.

Nabízí se otázka: K čemu tedy ty konce řádku přes PHP_EOL jsou? No, využití je více, pěkná demonstrace by pro Vás mohlo být vytvoření dvou skriptů s následujícími zdrojovými kódy a zobrazení jejich zdrojového kódu po vykonání na serveru:

Skript 1:
<?php 
echo "Můj dlouhý text <br> pojďme tohle dát na nový řádek <br> a ještě jednou toto také na nový řádek";
?>

Vygenerovaný zdrojový kód:
Můj dlouhý text <br> pojďme tohle dát na nový řádek <br> a ještě jednou toto také na nový řádek


Skript 2:
<?php 
echo "Můj dlouhý text <br>" . PHP_EOL . " pojďme tohle dát na nový řádek <br> " . PHP_EOL . " a ještě jednou toto také na nový řádek";
?>

Vygenerovaný zdrojový kód:
Můj dlouhý text <br>
 pojďme tohle dát na nový řádek <br>
 a ještě jednou toto také na nový řádek

Porovnáte-li zdrojové kódy výstupů těchto dvou skriptů, uvidíte, že druhý zdrojový kód používající PHP_EOL vkládá do zdrojového kódu znak zalomení řádku. A právě tento znak zalomení řádku je zvolen pro platformu, na které běží PHP - samotnou finální podobu zobrazované stránky v prohlížeči to však vůbec neovlivní.

Nevěděl by někdo, čím by to mohlo být? Chtěl by používat PHP_EOL, abych se vyhnul nefunčnosti na některých platformách.
Řešení zkráceně: Chcete-li se vyhnout nefunkčnosti na některých platformách, používejte všude <br> popřípadě <br />, používate-li XHTML.
Keeehi
Profil
PHP_EOL je konstanta. A na každém serveru může mít jinou hodnotu. Pokud půjde o windows server, pak PHP_EOL == "\r\n" a pokud půjde o linuxový stroj, pak PHP_EOL == "\n". K čemu to je dobré? Asi by se to hodilo při tvorbě souborů na serveru, ale to je tak asi vše.

Pro výpis HTML je to úplně k ničemu. Na zobrazení stránky to absolutně nemá vliv (obojí bude vypadat jako mezera). Znak(y) nového řádku budou vidět jen ve zdrojovém kódu a tam všude stačí \n.

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: