Autor Zpráva
Yuhů
Profil
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
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 *
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
To bude v kolizi s „vyhodnocoval ze svého původního umístění“.
Yuhů
Profil
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 *
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
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
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
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
Majkl578:

Ale stejně tak neinterpretuje žádný kód.
Majkl578
Profil
Str4wberry:
To je pravda. Nicméně v [#7] není interpretace potřeba.
Mastodont
Profil
Majkl578:
---- (aha, už to vidím)
DoubleThink
Profil *
Majkl578:
Nicméně v [#7] není interpretace potřeba.
Potřeba je, ale obstará ji už předem server whatever.
Yuhů
Profil
Majkl578: [#7] Majkl578

Děkuju, jak file_get_contents, tak shell_exec jsem neznal a oboje můj problém hezky řeší.
tiso
Profil
Yuhů: ešte jedna vec: treba zmeniť linky medzi pôvodnými stránkami... čiže z
<a href="bb.php">link</a>
na
<a href="cc.html">link</a>

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0