Diskuze: Výstup funkce do souboru přes fwrite
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 7 zpráv z 7.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tak jsem si myslel, že jsem to vyřešil a ono opět prd. Zkusil jsem
přidat proměnou k výpisu a přidat return $promenasvypisem a fungovalo to.
Bohužel jen pro jeden řádek. A má to vypsat více řádků. Konkrétně jde
o položky v menu. A těch je více.
Věděl by někdo v čem dělám chybu? Děkuji za případné rady.
Pokud chceš přesměrovat výpis echo ... můžeš použít output buffering, ale myslím si, že bude lepší, když bude funkce prostě vracet všechny položky menu ...
př.
function menu()
{
polozky = ["prvni radek menu", "druhy", "treti"];
return implode("\n", polozky)
}
...
fwrite($file, menu());
Máš v tej funkcii chybu. Ak sa má výsledok funkcie dať uložiť do premennej, musí výsledok vracať, nie echovať. Prepíš echo na return a pôjde to:
function funkcesdaty() {
return 'Test';
}
Děkuji za reakce.
Udělal jsem pár úprav a stejně se stále vypisuje jen jedna položka.
Tady je celý script
Jestli tam někdo najde chybu, budu moc rád. Já už fakt nevím. Několikrát
jsem to přepisoval.
Toto má vygenerovat sitemap
$c1 = '<?xml version="1.0" encoding="UTF-8"?>';
$c2 = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
function mapa() {
foreach(Db::queryAll('SELECT * FROM menu WHERE aktivni=? AND username=?', 1, Db::querySingle('SELECT username FROM web WHERE url=?', $_GET['name'])) as $m)
{
$sm = Db::queryOne('SELECT * FROM menu WHERE aktivni=? AND username=? AND url=? AND link=? AND centralni=?', 1, $m['username'], $_GET['name'], '/', 0);
if($sm['link'] == '/')
{
$l = '';
}
else
{
$l = '/';
}
if($m['link'] == '/')
{
$cs0 = '<url>';
$cs1 = '<loc>http://'.$sm['url'].$l.Db::querySingle('SELECT link FROM menu WHERE aktivni=? AND url=? AND username=?', 1, $_GET['name'], $m['username']).'</loc>';
$cs2 = '<lastmod>'.date("Y-m-d").'</lastmod>';
$cs3 = '<changefreq>weekly</changefreq>';
$cs4 = '<priority>1</priority>';
$cs5 = '</url>';
}
if($m['link'] !== '/')
{
$cs0 = '<url>';
$cs1 = '<loc>http://'.$sm['url'].'/'.Db::querySingle('SELECT link FROM menu WHERE aktivni=? AND url=? AND username=?', 1, $_GET['name'], $m['username']).'</loc>';
$cs2 = '<lastmod>'.date("Y-m-d").'</lastmod>';
$cs3 = '<changefreq>weekly</changefreq>';
$cs4 = '<priority>1</priority>';
$cs5 = '</url>';
}
return PHP_EOL.$cs0.PHP_EOL.$cs1.PHP_EOL.$cs2.PHP_EOL.$cs3.PHP_EOL.$cs4.PHP_EOL.$cs5.PHP_EOL.PHP_EOL;
}
}
$c3 = '</urlset>';
echo
Tady je zápis do souboru
$file = fopen("./webs/sitemap.xml","w");
fwrite($file,$c1. PHP_EOL .$c2. PHP_EOL . mapa() . PHP_EOL . $c3);
fclose($file);
Moc děkuji za zpětnou vazbu
returnuješ hodnotu při prvním projití foreach cyklem ...
function mapa() {
$output = ""
foreach(Db::queryAll('SELECT * FROM menu WHERE aktivni=? AND username=?', 1, Db::querySingle('SELECT username FROM web WHERE url=?', $_GET['name'])) as $m)
{
$sm = Db::queryOne('SELECT * FROM menu WHERE aktivni=? AND username=? AND url=? AND link=? AND centralni=?', 1, $m['username'], $_GET['name'], '/', 0);
if($sm['link'] == '/')
{
$l = '';
}
else
{
$l = '/';
}
if($m['link'] == '/')
{
$cs0 = '<url>';
$cs1 = '<loc>http://'.$sm['url'].$l.Db::querySingle('SELECT link FROM menu WHERE aktivni=? AND url=? AND username=?', 1, $_GET['name'], $m['username']).'</loc>';
$cs2 = '<lastmod>'.date("Y-m-d").'</lastmod>';
$cs3 = '<changefreq>weekly</changefreq>';
$cs4 = '<priority>1</priority>';
$cs5 = '</url>';
}
if($m['link'] !== '/')
{
$cs0 = '<url>';
$cs1 = '<loc>http://'.$sm['url'].'/'.Db::querySingle('SELECT link FROM menu WHERE aktivni=? AND url=? AND username=?', 1, $_GET['name'], $m['username']).'</loc>';
$cs2 = '<lastmod>'.date("Y-m-d").'</lastmod>';
$cs3 = '<changefreq>weekly</changefreq>';
$cs4 = '<priority>1</priority>';
$cs5 = '</url>';
}
$output .= PHP_EOL.$cs0.PHP_EOL.$cs1.PHP_EOL.$cs2.PHP_EOL.$cs3.PHP_EOL.$cs4.PHP_EOL.$cs5.PHP_EOL.PHP_EOL;
}
return $output;
}
Takže return má být až na konci. Chápu. Děkuji. Toto by mělo fungovat
jak se dívám a taky funguje. Moc děkuji
Opět drobnost způsobí, že funkce je k ničemu
Zobrazeno 7 zpráv z 7.