Portál AbcLinuxu, 12. května 2024 03:23


Dotaz: Divné chování require

28.4.2012 22:48 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Divné chování require
Přečteno: 253×
Odpovědět | Admin
Dneska jsem narazil na divné chování PHPka. Pokud mám soubor1.php a includuju v něm soubor2.php, tak pokud ten soubor2.php končí nějak takto:
<?php
some_php_code();
if($x==1) {
  do_something();
}
?>
<span class="trida">Some text</span>
tak se nový řádek vygeneruje, pokud ovšem soubor2.php upravím takto:

<?php
some_php_code();
if($x==1) {
  do_something();
}
?>
<span class="trida">Some text</span><?php ?>
tak je najednou po problému a nový řádek se nenageneruje. Nesetkali jste se někdo s podobným problémem?

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.4.2012 23:21 DK
Rozbalit Rozbalit vše Re: Divné chování require
Odpovědět | | Sbalit | Link | Blokovat | Admin
a require, nebo include?
Řešení 1× (filbar (tazatel))
Aleš Janda avatar 28.4.2012 23:45 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: Divné chování require
Odpovědět | | Sbalit | Link | Blokovat | Admin
Znak konce řádku za ?> se sám uřízne. To PHPko dělá, aby bylo možné soubor zakončit novým řádkem bez toho, aniž by se promítnul do výstupu (některé programy berou textové soubory bez koncového odřádkování jako chybu). V prvním případě to na ?> nekončí, takže se nový řádek přidá, v druhém končí, takže se odřízne.
Zahrajte si trojšachy přes internet :-)
Řešení 1× (filbar (tazatel))
28.4.2012 23:52 Kit
Rozbalit Rozbalit vše Re: Divné chování require
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nesetkal. Asi proto, že takové blbosti nedělám a raději použiji Heredoc.

Většina editorů vkládá na konec souboru LF, resp. CR LF. Pokud soubor končí HTML kódem, na výstupu se objeví i zmíněný LF. Pokud končí PHP, negeneruje se nic.

Doporučuje se neukončovat PHP kód značkou ?>, správně by tedy měl konec vypadat takto:
<span class="trida">Some text</span><?php
29.4.2012 11:51 l4m4
Rozbalit Rozbalit vše Re: Divné chování require
Uch, och. Ale proč bychom měli vlastně čekat syntaktickou příčetnost...
29.4.2012 18:58 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Divné chování require
Co to?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
1.5.2012 22:46 l4m4
Rozbalit Rozbalit vše Re: Divné chování require
No, kde přesně končí ten PHP escape (syntaticky odpovídající processing instructions)?

Co je to za nápad ukončovat soubor zanořením do nějaké konstrukce?
*ERROR* end occurred inside a group at level 1!
2.5.2012 08:51 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Divné chování require
No ono je to zamotané z důvodu sloučení „volně“ procházející kódu na výstup a interpretovaného.
Tak jak to Kit napsal, je jediná rozumné možnost, aby se v tomto případě ve výstupu zaručeně nenacházel \n navíc.
PHP script končí značkou ?> nebo koncem souboru (uzavírací značka nemusí být uvedena a je to i velmi vhodné ji neuvádět).
Když to bude „hezké“:
<span class="trida">Some text</span>
<?php
už tam \n je protože jsme ho tam zapsali.
<span class="trida">Some text</span><?php ?>
Nám ničemu nepomůže, protože spousta editorů ten \n tam doplní.
Osobně bych tento okomentoval, proč jsem tak učinil
<span class="trida">Some text</span><?php
/*
 * POZOR: tento soubor nesmí obsahovat žádný znak navíc za tagem:
 * <span class="trida">Some text</span>
 * Značka začátku PHP scriptu se musí nacházet bezprostředně za tím tagem
 * a soubor nesmí být ukončen uzavírací PHP značkou.
 */
nebo respektive, bych se asi k této konstrukci nedostal, protože \n navíc v html obvykle nevadí a kdyby se k tomu schylovalo a měl bych nějaké nároky na tento formát, vypadalo by to asi nějak takto
<?php
…
…
echo '<span class="trida">Some text</span>';
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.