PHP - 7. díl – include a spol.

Diskuze čtenářů k článku

Ritchie  |  25. 03. 2004 08:50  | 

Autor měl zmínit konfigurační direktivu include_path. V ní totiž nemusí být zahrnut aktuální adresář '.', a tak se spoustu kodérů bude divit, že jim include 'soubor.php' nefunguje. Místo toho by měli použít include './soubor.php'.

Používat non-ASCII znaky ve jménech proměnných apod. je prasárna (obzvláště v non-UNICODE prostředí). Jak se asi na takovou proměnnou bude tvářit člověk s jiných charsetem?

Definovat proměnnou $pocet mimo includovaný soubor rovněž není programátorsky čisté. Mnohem lepší je mít v includovaném souboru něco jako if(empty($pocet)) $pocet = 0;

Čtenářům mohu doporučit českou verzi oficiálního PHP manuálu. Dozví se zde o něco více než v článku. Přitom manuál je psán velice srozumitelně. http://cz.php.net/manual/cs/function.require.php

Souhlasím  |  Nesouhlasím  |  Odpovědět
yarex  |  25. 03. 2004 16:48  | 

Este by som empty() zamenil za !isset() v tomto pripade ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  25. 03. 2004 23:46  | 

Souhlasím.

1) I když to, aby v include_path nebyl zahrnut aktuální adresář, s tím jsem se ještě nesetkal.

2) Proměnné s non-ASCII nejsou žádným problémem v jiném charsetu. Pokud to napíšete v jednom charsetu, tak se to maximálně zobrazí v jiném charssetu jako patvar. Ale většinou se píše stále v tomtéž charsetu.

Já chci hlavně demonstrovat, že používat diakritické znaky jde. Pokud někdo všedchno vyvíjí ve stejné znakové sadě, nevidím v tom problém.

3) Budiž, pokud se použije if(empty(...)), nebo if(isset(...)), je to také dobré řešení.

4) V oficiálním PHP manuálu se rozhodně dozvíte více, než při čtení tohoto článku. Manuál je psán srozumitelně, zejména pro lidi, kteří už určitou znalost PHP, a Céčka mají. Smyslem tohoto článku není suplovat oficiální referenční manuál, ale pomoci začít lidem s PHP od nuly. Tedy být seriálem, který je pro začátečníky mnohem srozumitelnější, než oficiální PHP manuál, a to myslím seriál plní. Oficiální PHP manuál je dobrý, jediný oficiální, ale bohužel dost neúplný zdroj.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ritchie  |  26. 03. 2004 11:07  | 

Použitím non-ASCII znaků život ostatním jen zkomplikujete. Představte si, že si stáhnete nějakou PHP třídu a ona bude mít názvy metod a atributů v cyrilici. Vím, že lze používat i non-ASCII znaky, ale neznám nikoho, kdo by tak činil. Nevýhody jednoznačně převažují a není proto dobré si na diakritiku zvykat.
Pokud si myslíte, že PHP manuál je neúplný, tak to reportujte jako chybu dokumentace (nejlépe i s patchem ). Chyba dokumentace je vážný nedostatek SW. I když na interforum.interval.cz dost často píšu v sekci PHP právě RTFM!
Jsem rád, že šíříte osvětu, snad ubude zbytečných dotazů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  26. 03. 2004 12:03  | 

Oficiální manuál PHP je podle mně když ne neúplný, tak na mnoha nemístně stručný. V podstatě je to tak, že o některých funkcích tam najdete řádek, nebo dva. Pokud Vás zajímá detailní chování, tak u mnoha funkcí vám nezbývá, než detaily odhadnout, nebo vyzkoušet.

Někdy je to na php.net setřeno tím, že informace dodají lidé v diskusi, kteří už dané chování vyzkoušeli, apod..

Souhlasím  |  Nesouhlasím  |  Odpovědět
Vita  |  26. 03. 2004 11:18  | 

Manual PHP je skvely (mam ho v opere v search baru rovnou na hledani) - nicmene podotkl bych ze navzdory skvelemu zpracovani manualu je casto jeste uzitecnejsi samotna diskuze pod nim.

Souhlasím  |  Nesouhlasím  |  Odpovědět
duci  |  25. 03. 2004 10:06  | 

Ide mi o to napr. na www.eset.sk alebo www.proca.sk pouzivaju na otestovanie registrovaneho uzivatela nejaku metodu protokolu HTTP s viazanostou na databazu resp. a subor obsahujuci mena uzivatelov a hesla. Ako toto spravit aby mi pred otvorenim otestovalo najprv. prihlasenie uzivatela t.j. meno a heslo a potom by ho poslalo na stranku nieco take je v phpmyadmine ale len pre 1 heslo v subore config a tiez sa to nejak da previazat na mysql ale neviem ako. Poradte prosim. DOteraz som pouzival stranky ktore obsahovali objekty do ktorych sa napisalo meno a heslo a potom sa to poslalo na overenie mysql a potom sa pustilo dalej ale ja by som to chcel len cez HTTP autentifikaciu nemate niekto nejaky priklad urobeny?

 

Vdaka za odpovede

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek  |  26. 03. 2004 17:52  | 

V manuálu je to http://www.php.net/manual/cs/features.http-auth.php

Česky. Slovensky to přeložené není.

Souhlasím  |  Nesouhlasím  |  Odpovědět
emilk  |  25. 03. 2004 12:00  | 

zajimalo by me, ktery adresar se bere za vychozi
v pripade vnorenych includu

jako to bude v  'lib1.php' pokud v 'hlavni.php' includnu 'adresar/lib1.php' a v lib1.php napisu include "adresar2/lib2.php" ?

je to chovani stejne, i kdyz pouziju zend encoder ?

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  25. 03. 2004 23:53  | 

Rozumím, za výchozí se berou obecně adresáře, které jsou v include_path cestě. To include_path je prostě možné v konfiguraci nastavovat.

Každopádně se ale jako základ bere hlavní skript, tedy ve vašem případě, když v lib1.php napíšete include "adresar2/lib2.php", bude se to brát vůci adresáři, kde je hlavni.php.

Pokud byste to chtěl změnit, musel vbyste to napsat takto:

include dirname(__FILE__).'/adresar2/lib2.php';

pak by se to bralo vůči adresáři, ve kterém je soubor lib1.php.

Souhlasím  |  Nesouhlasím  |  Odpovědět
pavel  |  25. 03. 2004 12:20  | 

Dobry, zadna chyba, dobryyy. chvalim. :)

Mimochodem, nevite nekdo jak udelat "include" v php vzdalenyho souboru html (generovanyho serverem z php), pokud je php v safe modu?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Adam  |  25. 03. 2004 12:27  | 

includovat jdou opravdu jenom lokalni soubory

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  25. 03. 2004 13:04  | 

Pokud jste pod Apachem, tak by Vám mohlo pomoci

virtual("jméno vzdáleného souboru")

což vloží vzdálený soubor

Souhlasím  |  Nesouhlasím  |  Odpovědět
Bredy  |  26. 03. 2004 09:11  | 

return může vracet hodnotu.

pak se include vola jako funkce

file1.php
<?
return "Ahoj"
?>

file2.php
<?
echo include "file1.php";
?>

Souhlasím  |  Nesouhlasím  |  Odpovědět
Canif Rufus  |  29. 03. 2004 15:39  | 

Jenom takovou poznamecku - pokud by nekdo bezel na verzi starsi nez 4.0.2, tak tam se require() chova ponekud jinak (a podle meho nazoru uzitecneji) - vkladany kod se parsuje uz v dobe prekladu, zatimco v pripade include() se kod vklada (a parsuje) az za behu. Mne osobne je prijemnejsi sam rozhodovat o tom, jestli je dany soubor nezbytny pro beh scriptu a jestli se ma parsovat pred jeho spustenim, nez to delat vzdy az za behu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  29. 03. 2004 17:05  | 

To je pravda, require se dříve parsoval dost divně. Ale to už je naštěstí za námi, a require už se naštěstí chová téměř stejně jako include.

Prakticky se u verze 4 nemusí počítat se starým chováním require. Verzi 4.0.2 a starší verze 4 doufám nikdo nepoužívá. Tyto hodně rané verze 4 byly hodně chybové a nedotáhnuté.

Pokud pracuje někdo s verzí 3, tak se se starým chováním require setká, ale protože ve verzi 3 se obrovská spousta věcí chová jinak, tak verzi 3 vůbec nepopisuji ve svém seriálu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Canif Rufus  |  30. 03. 2004 09:07  | 

No, myslel jsem to zrovna naopak... :o) Tim chci rict, ze drivejsi chovani require() mi prislo jako rozumne -> script se vubec nespusti, pokud je v nekterem z "required" souboru syntakticka chyba a neprojde parsovanim nebo dokonce neexistuje. Nicmene dodrzovanim "dobrych programatorskych zasad" se da i v aktualni verzi toto chovani simulovat -> vsechny "required" soubory by mely byt natazeny drive, nez se cokoliv zacne posilat na vystup. V ostatnich pripadech je vhodnejsi pouzit include() a pred tim se jeste ujistit, ze dany soubor existuje (resp. se podle toho zachovat).

Jinak samozrejme souhlasim s tim, aby clanek vychazel z aktualni verze PHP (resp. z verze 4.3.0+ pokud je nekdo napr. odkazany na webhosting, ktery tak casto neaktualizuje). Nicmene vzdy je dobrym zvykem uvadet u popisovane funkcionality verzi modulu, od ktere je platna (pokud jiz nebyla ve verzi 3.x). I kdyz se nepredpoklada, ze by si nekdo vytahnul cedecko z roku 2000 s distribuci rannych verzi PHP 4.x :o)

Hodne stesti v dalsim pokracovani serie!

Souhlasím  |  Nesouhlasím  |  Odpovědět
Miloslav Ponkrác  |  30. 03. 2004 21:10  | 

Souhlasím, to, že se skript vůbec nespustí při syntaktické chybě, to je dobré. Ale další vlastnosti starého chování require už tak lákavé nebyly. Tedy alespoň IMHO.

Článek se snaží vycházet z aktuální verze 4.x.x, ale už se zase rýsuje verze 5, takže za chvíli pár věcí bude zase jinak...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jirka  |  27. 05. 2004 14:24  | 

Patřím mezi naprosté začátečníky a seriál se mi velice líbí, připadá mi velmi srozumitelný.


Mám ale problém s prvním primitivním příkladem této 7. kapitoly. Pokud vše provedu, jak autor uvádí, k vložení adresy nedojde. Po delším zkoumání konfigurace include_path jsem nakonec oběma souborům změnil příponu z .html na .php a vše začalo řádně fungovat. Je v článku chyba nebo je problém jinde?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jirka  |  28. 05. 2004 12:30  | 

No už jsem si to ujasnil, omlouvám se.

Souhlasím  |  Nesouhlasím  |  Odpovědět
xzombie  |  09. 06. 2004 00:10  | 

Me by zajimalo jak mohu vlozit zdrojak souboru.php.


Nechci aby server zpracoval php a ani aby prohlizec zpracoval html,


proste chci zobrazit primo ten zdrojak.


Nevite nekdo jak se to udela ?


Diky za pomoc

Souhlasím  |  Nesouhlasím  |  Odpovědět
Polina1  |  12. 01. 2005 11:34  | 

Tak to by mě taky zajímalo. Nejlépe se učí podle příkladů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
ReisRyos  |  07. 10. 2005 09:44  | 

Jsem zacatecnik, ale clanek me zaujal, tak jsem chtel zkusit nahhradit frame ve svych strankach pomoci include. Vytvoril jsem table kdy vleve bunce byly odkazy na stranky html a v prave bunce se ty stranky mely zobrazovat, ale vubec nefungovalo. Mohl by mi nekdo poradit? Diky. reisr@seznam.cz

Souhlasím  |  Nesouhlasím  |  Odpovědět
Libor smsky.cz  |  28. 03. 2006 23:22  | 

Potřebuji na svých stránkách načítat větší množství souborů pomocí include(iframe.php). Vhledem k tomu že to struktura stránek jinak nedovoluje a připadalo mi to jako nejlepší řešení vytvořil jsem si soubor "IFRAME.PHP" který obsahuje pouze ">.
Odborník možná již chápe smysl mého konání.
Rád bych v souboru IFRAME.PHP načítal různé stránky obsažené v proměnné $url_iframe. Bohužel jsem se zasekl na problému že příkaz include(./iframe.php?url_iframe=cosi) mi hází chybu. nevíte jak lze načíst include soubor i s proměnnými?
díky za radu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor

Aktuální číslo časopisu Computer

Velký test Wi-Fi mesh

Nejlepší hodinky pro všechny aktivity

Důležité aplikace na cesty

Jak streamovat video na Twitch