Autor | Zpráva | ||
---|---|---|---|
Onecar Profil |
#1 · Zasláno: 25. 1. 2011, 16:27:48
Opět zdravím,
ve svém novém projektu bych rád jisté části webu vkládal skrze funkci include();. Odkazy jsou trojího typu: index.php?page=rovnice index.php?page=rovnice&strana=1 index.php?page=rovnice&priklad=1 Rozhodovací schéma v souboru index.php vypadá takto: <? #1 DEFAULT, tj. nic nezadáno if (!isset ($_GET['page']) AND !isset ($_GET['strana']) AND !isset ($_GET['priklad'])) include ('./tmp/tmp_uvod.php'); #2 VÝPIS sekcí a jejich příkladů if (isset ($_GET['page']) AND !isset ($_GET['strana']) AND !isset ($_GET['priklad'])) { switch ($_GET['page']) { case 'rovnice': include ('./tmp/tmp_rovnice.php'); break; } } #3 STRÁNKA dané sekce if (isset ($_GET['page']) AND isset ($_GET['strana'])) { switch ($_GET['page']) { case 'rovnice': include ('./tmp/tmp_rovnice.php?strana='.$_GET['strana'].''); break; } } #4 VÝPIS JEDNOTLIVÉHO PŘÍKLADU dané sekce if (isset ($_GET['page']) AND isset ($_GET['priklad'])) { switch ($_GET['page']) { case 'rovnice': include ('./tmp/tmp_rovnice.php?priklad='.$_GET['priklad'].''); break; } } ?> Podmínky #3 a #4 vrací velice zajímavý Warning: Warning: include(./tmp/tmp_rovnice.php?strana=1) [function.include]: failed to open stream: No error in C:\AppServ\www\index.php on line 37 Warning: include() [function.include]: Failed opening './tmp/tmp_rovnice.php?strana=1' for inclusion (include_path='.;C:\php5\pear') in C:\AppServ\www\index.php on line 37 Závěr: všechna include(); krom #3 a #4 fungují. Dal bych ruku do ohně, že je to tím, že se přes tuto funkci snažím posílat další parametry (jak vidno z kódu), které jsou ale pro mě nezbytné. V souboru tmp_rovnice.php je další rozhodovací schéma, kdy se vůbec rozhoduje, co se vypíše (buď vše, nebo pouze požadovaná strana či pouze požadovaný příklad) podle odeslaného parametru ze souboru index.php. Napadá někoho řešení? Předem mnohokrát děkuji. |
||
Alphard Profil |
#2 · Zasláno: 25. 1. 2011, 16:34:13
Include takto s parametry v adrese nefunguje. Není to ale ani nutné. Všechny viditelné proměnné rodičovského scriptu jsou dostupné v tom includovaném a obráceně.
|
||
Onecar Profil |
#3 · Zasláno: 25. 1. 2011, 16:34:42
Hluboce se stydím, že jsem předem nehledal. Odpověď jsem nalezl v PHP FAQ:
http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=2111 |
||
DoubleThink Profil * |
#4 · Zasláno: 25. 1. 2011, 16:44:54
Alphard:
„Include takto s parametry v adrese nefunguje.“ Přesněji filesystem serveru tento zápis s proměnnými nezná a nepodporuje. Ostatně by jejich hodnoty ani neměl kam předat. |
||
kordy Profil |
#5 · Zasláno: 25. 1. 2011, 18:14:48 · Upravil/a: kordy
Chtěl bych se zeptat je to částečně k tématu nebudu teda zakládat nový vlákno...
Mám php kód kterej zapisuje chtěl bych aby zapisoval hodnoty includovaného souboru, ale místo toho se mi oncludovaný soubor otevírá...V čem je chyba? Případně jak jinak řešit? kód je zde: <?php $zapis = fopen("soubor.html", "w"); fwrite($zapis, include "vypis.php"); fclose($zapis); ?> |
||
xmark Profil |
#6 · Zasláno: 25. 1. 2011, 18:21:33
kordy:
Nepochopils, co dělá include. Prostě si to představ tak, že místo > include "vypis.php" < je zkopírovaný obsah souboru vypis.php. Skoro přesně tak se to chová. „chtěl bych aby zapisoval hodnoty includovaného souboru“ Nevím, co si představuješ pod slovem hodnoty. Jestli myslíš jeho obsah, použij http://cz.php.net/manual/en/function.file-get-contents.php a příště formuluj lépe. |
||
AM_ Profil |
#7 · Zasláno: 25. 1. 2011, 18:23:58
[#5] kordy
nové vlákno si založit mohl, kdyby se všechny dotazy na include cpaly do jednoho vlákna, nedopadlo by to dobře. soubory se kopírují pomocí funkce copy(), tenhle výřezek je spíš demonstrativní neznalost principu strukturovaného programování - datové typy, které zde kombinuješ, rozhodně takto fungovat nemohou, nastuduj si něco o výrazech a jejich návratových hodnotách. |
||
kordy Profil |
#8 · Zasláno: 25. 1. 2011, 18:31:14
xmark díky moc přestně to jsem potřeboval... :)
AM_ díky za odpověď, nedostatků mám určitě víc pak to celý pořádně prostuduji :) |
||
xmark Profil |
#9 · Zasláno: 25. 1. 2011, 18:33:39
xmark:
„zkopírovaný obsah souboru“ Ještě se musím opravit. Samozřejmě Ne zkopírovaný, ale zkopírovaný a funkční ve smyslu php. |
||
DoubleThink Profil * |
#10 · Zasláno: 25. 1. 2011, 20:03:23
xmark:
„že místo > include "vypis.php" < je zkopírovaný obsah souboru vypis.php. Skoro přesně tak se to chová.“ Skoro tak. Přesněji je to tak, že když interpret narazí na jazykový konstrukt include, ukončí aktuální blok kódu (tj. jakoby na tom místě bylo ?>) a pokračuje v interpretaci v uvedeném souboru. Na jeho konci, nebo na prvním příkazu return, se pak vrátí na původní místo rodičovského souboru, otevře blok kódu (<?php) a pokračuje v interpretaci. |
||
Časová prodleva: 13 let
|
0