Portál AbcLinuxu, 12. května 2025 21:15

Dotaz: Informace o PHP

9.11.2014 22:28 PHP
Informace o PHP
Přečteno: 427×
Odpovědět | Admin
Ahoj, nevíte prosím někdo, zda vyžaduje soubor s php kódem odřádkování ? (prázdný řádek na konci jako třeba Bash, Shell). Děkuji

Řešení dotazu:


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

Odpovědi

9.11.2014 22:56 Sten
Rozbalit Rozbalit vše Re: Informace o PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevyžadují to ani shell ani PHP
10.11.2014 00:31 PHP
Rozbalit Rozbalit vše Re: Informace o PHP
Díky, tak shell teď nevím na 100% ale bash na 100% ano....
10.11.2014 00:35 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Bash také ne.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 10.11.2014 02:03 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Informace o PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jen tak pro úplnost: Je vhodné vynechávat poslední uzavírací ?>, aby do výstupu nevlezl náhodou nějaký zbytečný prázdný řádek na konci souboru.
Hello world ! Segmentation fault (core dumped)
10.11.2014 02:52 PHP
Rozbalit Rozbalit vše Re: Informace o PHP
Jen tak pro úplnost: Je vhodné vynechávat poslední uzavírací ?>, aby do výstupu nevlezl náhodou nějaký zbytečný prázdný řádek na konci souboru.
Co to ? To nedává smysl...
Jendа avatar 10.11.2014 03:27 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Informace o PHP
Dává. Představ si, že máš index.php, který dělá něco jako:
<?php
10 include("config.php");
20 include("knihovna.php");
30 include("nette.php");
40 
50 header('Content-Type: text/html; charset=utf-8');
60 
70 vypiš_hlavičku();
80 vypiš_články();
90 vypiš_patičku();
?>
Pokud ty includované soubory obsahovaly na konci nový řádek, zahlásí to chybu (Headers already sent!) na řádku 50, protože to poslalo nový řádek ještě před hlavičkami.
AraxoN avatar 10.11.2014 10:49 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Informace o PHP
Jeden nový riadok za ?> to ešte nespôsobí, musí tam byť nových riadkov viac, alebo nejaké medzery, taby, či iné znaky. Možno to spustí "nový riadok" z windows, ktorý je v skutočnosti dvoma znakmi (CR+LF), alebo nový riadok z Mac (CR), ale linuxový nový riadok (LF) je na linuxovom serveri v poriadku.
10.11.2014 12:15 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
V každém případě je poslední řádek obsahující jen "?>" zcela zbytečný a je tedy i zbytečné ho do skriptu dávat. Ve svých skriptech takový řádek nemám na konci ani uprostřed a nechybí mi.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10.11.2014 12:44 PHP
Rozbalit Rozbalit vše Re: Informace o PHP
Hm, tak to dokonce píšou i v manuálu, že se to nedoporučuje používat, akorát nevím jak bych napsal třeba tohle.
<div><?php echo $var; ?></div>
takto? :-D
<div><?php echo $var;</div>
10.11.2014 13:02 chrono
Rozbalit Rozbalit vše Re: Informace o PHP
Práve na tom mieste to ?> zmysel má (a ako už bolo napísané, na konci súboru je to zbytočné).
AraxoN avatar 10.11.2014 13:12 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Informace o PHP
Z mojej skúsenosti je lepšie oddeliť HTML a PHP kód do osobitných súborov a nemiešať ich v jednom PHP skripte. Potom naozaj človek nepotrebuje ukončovaciu značku ?>.
10.11.2014 13:31 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Ten tvůj příklad bych zapsal takto:
<?php
echo "<div>$var</div>";
Do PHP však už nedávám ani kousek HTML, ani jednu HTML značku. Vše mám ve výstupní šabloně.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10.11.2014 17:25 PHP
Rozbalit Rozbalit vše Re: Informace o PHP
To je nemožné... a jak třeba generuješ položky li ? Píšeš je ručně bez php ?
AraxoN avatar 10.11.2014 17:39 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Informace o PHP
Niektoré šablónovacie systémy vedia robiť aj opakovanie a prechádzanie zoznamu. Tie, ktoré nevedia sa stále dajú použiť s cyklom foreach - spravíš foreach a vyparsuješ pre každú položku šablónu kde je <li>{POLOZKA}</li> a potom to celé zasadíš do ďalšej šablóny kde je <ul>{POLOZKY}</ul>. Tzn. máš 2 súbory so šablónami, kde je len HTML a potom jeden súbor kde je len PHP, ktorý to dá dohromady cez foreach.
10.11.2014 17:49 PHP
Rozbalit Rozbalit vše Re: Informace o PHP
Čili oba dva budou ve finále stejně obsahovat html soubory, nebo co bude ten foreach plnit/vypisovat když ne "li" ?
AraxoN avatar 10.11.2014 18:14 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Informace o PHP
HTML kód samozrejme potrebuješ niekde napísať, ak má výstupom byť HTML zobraziteľný v prehliadači. Tu ide len o to, aby sa v jednom súbore nemiešali naraz HTML a PHP kód.

Btw, sú javascriptové frameworky, ktoré môžeš kŕmiť zo servera priamo "surovými" dátami (napr. JSON), ktoré sa potom v prehliadači menia na zobraziteľné UI prvky. Potom už naozaj nepotrebuješ ani riadok HTML kódu. Príde mi ale jednoduchšie a rýchlejšie tvoriť HTML na serveri.
10.11.2014 22:56 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Položky menu mohu třeba vytáhnout z databáze, ale pro jednoduchost jsem si udělal seznam $odkazy:
<?php
$doc = new DOMDocument();
$menu = $doc->createElement('menu');
$odkazy = array(
    array("První položka", "http://prvni"),
    array("Druhá položka", "http://druhy"),
    array("Třetí položka", "http://treti"),
);
foreach ($odkazy as $odkaz) {
    $item = $doc->createElement('item', $odkaz[0]);
    $item->setAttribute('href', $odkaz[1]);
    $menu->appendChild($item);
}
$doc->appendChild($menu);

$sablona = new DOMDocument();
$sablona->load('menu.xsl');
$xsl = new XSLTProcessor();
$xsl->importStyleSheet($sablona);

echo $xsl->transformToXML($doc);
Trasformaci DOMu na webstránku už dělá šablona.

Možná to vypadá složitě, ale když je to správně zapouzdřené ve vieweru, tak to vůbec složité není ani pro hodně komplexní stránku. Navíc je to velmi rychlé.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 10.11.2014 23:40 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Informace o PHP
Ono navíc <?php ?> je výrazně pomalejší než prosté echo. A také se pak pletou dvě úrovně odsazování. Takže píšu jen PHP s echo "<html>". Odsazování pak je jasné a generované HTML neodsazuju, jen vhodně zalamuju (čitelné je to dost, pokud to je vůbec potřeba).
Hello world ! Segmentation fault (core dumped)
11.11.2014 00:14 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Dobře se dá vyblbnout i se syntaxí Heredoc, protože uvozovky se uvnitř nemusí backslashovat, ale proměnné se expandují. Na výstup celé stránky pak stačí jedno echo.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 11.11.2014 00:49 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Informace o PHP
Ale těžko se to kombinuje s cykly, které jsou docela časté.
Hello world ! Segmentation fault (core dumped)
11.11.2014 01:22 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Cykly strčíš do metod __toString() patřičných objektů.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 11.11.2014 03:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Informace o PHP
A nejsou pak takové šablony příliš rozdrobené?
Hello world ! Segmentation fault (core dumped)
11.11.2014 07:22 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Proč by měly být? Pokud v určitém místě vložím objekt $menu, v jiném $clanek a v dalsim $reklama, tak to jsou separátní části, které se samostatně starají o svou validitu. Pokud je v hlavní šabloně chci přemístit, tak prostě jen přesunu objekt $reklama na jiné místo a nemusím se bát, že si něco rozbiju.

Kromě toho mám vše objektově a nějak se do těch 65 řádek na třídu vejít musím. Tohle stejně používám jen u drobností, u kterých rozdělení na několik komponent nevadí.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Josef Kufner avatar 11.11.2014 13:36 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Informace o PHP
Takže v $menu už heredoc nepoužíváš, aby se ti tam dobře zapisoval foreach přes položky menu?
Hello world ! Segmentation fault (core dumped)
11.11.2014 13:43 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Informace o PHP
Místo foreach zpravidla používám implode() a tam už Heredoc většinou uplatnění nenajde.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

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.