Autor | Zpráva | ||
---|---|---|---|
Yuhů Profil |
#1 · Zasláno: 5. 7. 2010, 18:32:27 · Upravil/a: Yuhů
Mám napsaný skript b.php. Potřeboval bych jeho výstup uložit do souboru.Tenhle proces bych potřeboval spouštět jiným php skriptem. Všechny tři soubory běží na témže počítači. Takže symbolicky:
soubor a.php spustí zpracování souboru b.php a výstup se uloží do souboru c.html Poznámky: Je důležité, aby se v soubor b.php zpracovaly všechny php příkazy a aby se vyhodnocoval ze svého původního umístění (ne z umístění souboru a.php). Soubory totiž mohou ležet v různých adresářích. Takových souborů b.php bude více, a.php pak bude obsahovat cyklus, který je bude procházet a postupně z nich generovat výstupy C. Víte někdo, jak to jednoduše v PHP udělat? Dříve jsem to dělal tak, že jsem z bashe PHP spustil jako interpret a výstup posílal do souborů, ale tenhle postup nyní nemůžu použít. |
||
Str4wberry Profil |
#2 · Zasláno: 5. 7. 2010, 18:48:16
Nabízí se mít ukládací mechanismus (realizovaný asi pomocí funkcí pro kontrolu výstupu) v B souborech a v A souboru tyto soubory třeba jenom XMLHttpRequestem volat.
|
||
meee Profil * |
#3 · Zasláno: 5. 7. 2010, 19:11:03
Nefungovalo by něco takovéhohle
$seznam = array('nazev.php', .....); foreach ($seznam as $soubor) { ob_start(); include $soubor; $data = ob_get_contents(); ob_end_clean(); $file = $soubor'.html'; file_put_contents($file, $data); } |
||
Str4wberry Profil |
#4 · Zasláno: 5. 7. 2010, 19:21:06
To bude v kolizi s „vyhodnocoval ze svého původního umístění“.
|
||
Yuhů Profil |
#5 · Zasláno: 5. 7. 2010, 19:34:14
Díky za nápady. Ale není to to čisté řešení, které hledám. Tohle jsou workaroundy. Myslím, že by na tohle měl existovat nějaký standardnější postup, který spočívá v zapojení PHP jako interpreta a přesměrování jeho výstupu do souboru.
XMLHttp requesty do toho rozhodně nechci tahat. Chtěl bych tam mít jediný požadavek z klienta, který povede na a.php. Ono těch volání souboru B.php totiž může být taky třeba několik tisíc (vždy s jinými parametry). Meee, includem bych to dělal opravdu nerad, už protože je to typově úplně jiná úloha. Takže další nápady? |
||
Krakatoa Profil * |
#6 · Zasláno: 5. 7. 2010, 19:47:21
Jsem začátečník, chtěl bych se zeptat, co je špatného no tom, kdyby se to řešilo takto?
a.php <? echo file_get_contents('http://localhost/b.php'); ?> b.php <? $soubor = fopen('c.html' , 'w'); fwrite ($soubor, 'Toto ulozit.'); fclose ($soubor); echo 'Ulozeno'; ?> |
||
Majkl578 Profil |
#7 · Zasláno: 5. 7. 2010, 19:48:40 · Upravil/a: Majkl578
Chápu-li to správně, stačilo by nejspíš použití http wrapperu:
file_put_contents(__DIR__ . '/c.html', file_get_contents('http://whatever/b.php')); EDIT: Dále by bylo možné použít exekuční funkce: `php b.php > c.html`; //neboli shell_exec('php b.php > c.html'); |
||
Mastodont Profil |
#8 · Zasláno: 5. 7. 2010, 20:08:38
Krakatoa, Majkl578:
Ciboha, léta se domnívám, že file_get_contents pouze načte obsah souboru a neinterpretuje žádný kód ... ???? |
||
Majkl578 Profil |
#9 · Zasláno: 5. 7. 2010, 20:11:44
Mastodont:
Tak to se domníváš špatně. Pokud dostane cestu k souboru na filesystemu, tak ano, ale pokud uvedeš např. URL adresu, tak načte její obsah. |
||
Str4wberry Profil |
#10 · Zasláno: 5. 7. 2010, 20:13:48
Majkl578:
Ale stejně tak neinterpretuje žádný kód. |
||
Majkl578 Profil |
#11 · Zasláno: 5. 7. 2010, 20:21:44 · Upravil/a: Majkl578
Str4wberry:
To je pravda. Nicméně v [#7] není interpretace potřeba. |
||
Mastodont Profil |
#12 · Zasláno: 5. 7. 2010, 20:33:12 · Upravil/a: Mastodont
Majkl578:
---- (aha, už to vidím) |
||
DoubleThink Profil * |
#13 · Zasláno: 5. 7. 2010, 20:33:38
Majkl578:
„Nicméně v [#7] není interpretace potřeba.“ Potřeba je, ale obstará ji už předem server whatever. |
||
Časová prodleva: 10 dní
|
|||
Yuhů Profil |
#14 · Zasláno: 15. 7. 2010, 17:54:41
Majkl578: [#7] Majkl578
Děkuju, jak file_get_contents, tak shell_exec jsem neznal a oboje můj problém hezky řeší. |
||
tiso Profil |
#15 · Zasláno: 15. 7. 2010, 22:02:30
Yuhů: ešte jedna vec: treba zmeniť linky medzi pôvodnými stránkami... čiže z
<a href="bb.php">link</a> <a href="cc.html">link</a> |
||
Časová prodleva: 14 let
|
0