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.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
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.