C# týden November Black Friday
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Diskuze: Výstup funkce do souboru přes fwrite

Aktivity (2)
Avatar
gorri
Člen
Avatar
gorri:1. listopadu 17:04

Ahoj,
určitě už každý z vás zapisoval do souboru nová data formou fopen, fwrite, fclose.
Zkoušel někdo do souboru tímto způsobem zapsat výstup z funkce?
Jde mi o to, že jsem si chtěl do souboru generovat data z funkce, ale z nějakého mě nepochopitelného důvodu je nechce zapsat. Generování jsem dal dokonce pryč a napsal jsem do funkce jen slovo test a stejně se nic neuložilo.
Poradil by prosím někdo?
$c1, $c2, $c3 se mi bez problémů zapíše. $t ne
Níže je kód

$c1 = 'Text 1';
    $c2 = 'Text 2';
    $c3 = 'Text 3';

function funkcesdaty() {
echo 'Test';
}
$t = funkcesdaty();

$file = fopen("./adresaksouboru/soubor.php","w");
fwrite($file,$c1. PHP_EOL .$c2. PHP_EOL . $t. PHP_EOL . $c3);
fclose($file);

Děkuji za případné rady :-)

Zkusil jsem: ITnetwork, php.net, google

Chci docílit: Zápis dat z funkce do souboru

Odpovědět
1. listopadu 17:04
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
gorri:2. listopadu 9:05

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.

Nahoru Odpovědět
2. listopadu 9:05
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Michael Škrášek:2. listopadu 10:31

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());
Nahoru Odpovědět
2. listopadu 10:31
I choose a lazy person to do a hard job. Because that person will find an easy way to do it ... Bill Gates
Avatar
Odpovídá na gorri
Vladislav Ladicky:2. listopadu 11:12

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';
}
Editováno 2. listopadu 11:13
 
Nahoru Odpovědět
2. listopadu 11:12
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
gorri
Člen
Avatar
gorri:2. listopadu 11:21

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

Nahoru Odpovědět
2. listopadu 11:21
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Michael Škrášek:2. listopadu 11:57

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;
}
Editováno 2. listopadu 11:58
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
2. listopadu 11:57
I choose a lazy person to do a hard job. Because that person will find an easy way to do it ... Bill Gates
Avatar
gorri
Člen
Avatar
Odpovídá na Michael Škrášek
gorri:2. listopadu 12:32

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 :-D

Nahoru Odpovědět
2. listopadu 12:32
Když vím, tak poradím. Nikdo neví všechno :-)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.