Potřebuji aby mohl uživatel stahovat ze stránky vygenerovaný soubor CSV
a uložil si ho do svého adresáře.
Funkce SELECT s OUTFILE ukládá na server a tam nemám práva.
Našel jsem funkci fopen a fread ale moc tomu nerozumím.
Poradí někdo ?
Fórum › PHP
Export dat z db do CSV - bez FILE privileg.
Můžeš vytvořit PHP skript, který bude CSV generovat. Typ výstupu nastavíš na text/plain a potom v cyklu projdeš kurzor, který bude generovat jednotlivé řádky. Uživatel si bude moci buď sobor "uloži jako..." přes pravé tlačítko myši nebo se mu vygeneruje obsah do prohlížeče (a ten uloží kam bude potřebovat).
Díky za odpověď,
to je jako výstup v hlavičce formuláře to text/plain, nebo kde se to nastavuje /asi v hlavičce souboru, že to sem nikdy nedělal/?
-pak mám ještě představu aby to hodilo uživateli hned tabulku o uložení i levým tlačítkem.
-ale spokojím se i s tím pravým Uložit jako
Jedná se o nastavení content-type, kterým prohlížeči řeknete, jak příchozí obsah interpretovat (většinou text/html). Takto můžete například poslat i obsah, který se otevře v Excelu - ovšem to je samozřejmě závislé na tom, jestli má uživatel MS Office nainstalované. V PHP bohužel nedělám, takže na konkrétní funkci neodkážu :-) pokud však budete v dokumentaci (nebo na webu) hledat spojení content-type, tak to určitě naleznete.
halvicky se posilaji pomoci
header("hlavicka");
ja si nepamatuju hlavicku, ktera je potreba pro prime stahovani souboru, ale mohlo by stacit presmerovani na soubor - melo by se otevrit okno pro stazeni:
header("Location: zaloha.csv");
hlavička Content-type určuje o aký typ dát ide. Mal by si použiť text/csv a všetko by malo byť O.K. Často to však takto nefunguje. Keď browser zbadá Content-type: text/??? a ??? pritom nepozná, tak súbor zobrazí ako čistý text priamo vo svojom okne. Potom ti ostáva použiť hlavičku Content-type: application/octet-stream, ktorá [podtrzene]prinúti browser[/podtrzene] zobraziť okno s otázkou - čo so súborom (uložiť/otvoriť)?.
Vyskúšaj najprv text/csv (korektná hlavička pre csv súbor) a ak to nebude robiť čo chceš tak použi application/octet-stream.
<?php
function esc($str)
{
rerurn $str // *todo: ošetri reťazec v csv súbore
}
header("Content-type: text/csv"); // application/octet-stream
header("Content-Disposition: attachment; filename=\"nazov-suboru.csv\"");
$t = mysql_unbuffered_query("SELECT...");
while($l = MySQL_fetch_row($t)) echo implode(',',array_map('esc', $l))."\n";
MySQL_free_result($t);
?>
* fcia esc by mala zabezpečiť ošetrenie, keď hodnota obsahuje čiarku, resp. iné nebezpečné znaky
viď http://en.wikipedia.org/wiki/Comma-separated_values#Specification
EDIT: na českej wiki http://cs.wikipedia.org/wiki/CSV sa ohľadom Content-type piše:
-- to že sa objavujú neznamená že ich máš používať.Pro data ve formátu CSV je registrován MIME typ text/csv, v praxi se ale objevují i další typy jako application/csv, text/x-csv apod.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Export/import dat do *.csv, odkazování na mapy — založil MichalK
Export dat z csv do xml pouzitim php — založil JM
Export data z csv to csv — založil Jozef
Nacteni obsahu jednotlivych csv do pole a jejich export — založil JiriVavru
MSSQL BCP export z tabulky DataBaze do souboru csv — založil Palmuk
Moderátoři diskuze