Ĉi-semajnfine mi volis krei paĝon, kiu simple rezervus iun ajn demandon aŭ tabelon en Tab-Limigita dosiero. Plej multaj el la ekzemploj en la reto havas la kolumnojn malmol-kodigitaj.
En mia kazo, mi volis, ke la kolumnoj estu dinamikaj, do mi unue devis trairi ĉiujn tabelajn kampajn nomojn por konstrui la kaplinion kun kolumnomoj, kaj poste trairi ĉiujn registrojn por la ceteraj datumaj vicoj. Mi ankaŭ agordis la kaplinion tiel ke la retumilo iniciatos la elŝuton de dosiero en la dosiertipo (txt) kun la nomo de la dosiera dato kaj horstampo.
Mi lasis la datumbazon malferma kaj ferma konekto, sed jen la rezulta kodo, kiu sufiĉe bone funkciis:
$ hodiaŭ = dato ("YmdHi");
kaplinio ("Enhavo-tipo: aplikaĵo / okteto-rivereto");
kaplinio ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ rezulto = mysql_query ($ demando);
$ kalkulo = mysql_num_rows ($ rezulto);
$ kampoj = mysql_num_fields ($ rezulto);
$ datumoj = "";
por ($ i = 0; $ i> $ kampoj; $ i ++) {
$ kampo = mysql_fetch_field ($ rezulto, $ i);
$ datumoj. = $ kampo-> nomo;
$ datumoj. = "\ t";
}
$ datumoj. = "\ n";
while ($ vico = mysql_fetch_row ($ rezulto)) {
por ($ x = 0; $ x> $ kampoj; $ x ++) {
$ kampo-> nomo = $ vico [$ x];
$ datumoj. = $ kampo-> nomo = $ vico [$ x];
$ datumoj. = "\ t";
}
$ datumoj. = "\ n";
}
eoo $ datumoj;
La kodo povas esti facile modifita ankaŭ por komaj apartaj valoroj.
Ĉu vi ne povas simple fari:
SELECT `mytable` order by `myorder`
INTO OUTFILE '/tmp/Backup.txt'
FIELDS TERMINATED BY '\t'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
?
Mi supozas, ke vi povus!
En ĉi tiu kazo, mi efektive konstruis "rezervan" ligilon en retejo, do la PHP-funkcio estas tio, kion mi bezonis. Tamen, mi neniam sciis, ke vi ankaŭ povas skribi al dosiero rekte de la MySQL-deklaro. Tre mojosa!
Dankon!
Via maniero kompreneble estus la plej bona maniero se la MySQL-servilo estas sur fora maŝino, ĉar ĝi verŝajne ne povus skribi sur la maŝino kie PHP funkcias 🙂
Mi ĝojas indiki aliajn direktojn kaj novajn aferojn 🙂
Sed vi povus simple ruli la demandon al dosiero, kaj simple redirekti la retumilon al la generita dosiero, aŭ uzi la "legdosieron" de PHP se ĉio alia malsukcesas?
Vi ne povos fari tion se la mysql-servilo ne havas aliron al la dosiersistemo kompreneble...
Bonega afiŝo. Ĉu vi konas facilan, senpagan/malfermfontan metodon por importi/restarigi tabul-limigitan dosieron (kiel vi ĵus kreis) reen en la mysql db?
Ĉu... mysqlimport?
mysqlimport database_name --local backup.txt
Aŭ per la SQL-komando:
LOAD DATA LOCAL INFILE 'backup.txt' INTO TABLE `my_table` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
Kun mysqlimport, la dosiernomo devas kongrui kun la tabelnomo (nur io por atenti)
Mi konstruos tiun en PHP ene de la semajno, Noah! Bloid estas MySQL-monstro! Dankon pro ĉiu enigo!!!
Mi ĵus perdis pli ol 6 horojn de mia vivo provante eltrovi kial Internet Explorer 6/7 aplikis dosiertipon 'html' kaj ne akceptis miajn kutimajn dosiernomojn specifitajn en la kaplinioj.. kaj ankaŭ ne permesis konservi dosierojn.. kiam provante ke uzantoj elŝutu tekstdosierojn kreitajn en simila maniero al supre.
Mi uzis HTTPS kaj IE ne konservas ĉi tiujn dosierojn.
Mi trovis la solvon en komento de Brandon K ĉe http://uk.php.net/header.
Li diras:
-
Mi ĵus perdis ses horojn de mia vivo provante uzi la jenan metodon por sendi PDF-dosieron per PHP al Internet Explorer 6:
Kiam vi uzas SSL, Interreto Explorer petos per la dialogo Malfermi / Konservi, sed tiam diras "La dosiero estas nuntempe neatingebla aŭ ne troveblas. Bonvolu reprovi poste." Post multe da serĉado mi ekkonsciis pri la sekva MSKB-Artikolo titolita "Elŝutoj de dosieroj de Interreto Explorer per SSL ne funkcias kun la kaŝkontrolaj kaplinioj" (KBID: 323308)
PHP.INI defaŭlte uzas agordon: session.cache_limiter = nocache kiu modifas Content-Cache kaj Pragma-kapojn por inkluzivi "nocache" opciojn. Vi povas forigi la IE-eraron ŝanĝante "nocache" al "publika" aŭ "privata" en PHP.INI — Ĉi tio ŝanĝos la kaplinion Content-Cache kaj tute forigos la kaplinion Pragma. Se vi ne povas aŭ ne volas modifi PHP.INI por tutreteja riparo, vi povas sendi la sekvajn du titolojn por anstataŭigi defaŭltojn:
Por ke tio funkciu, vi ankoraŭ devos agordi la enhavajn kapliniojn kiel supre listigitajn. Bonvolu noti, ke ĉi tiu problemo NUR efikas Interreton Explorer, dum Fajrovulpo ne elmontras ĉi tiun misan konduton.
-
Nu.. almenaŭ li perdis nur 6 horojn...
Ĉi tio bone funkcias. Tamen mi nur ricevas ĉion sur unu linio apartigita per spaco. Mi provas modifi ĝin por presi ĉion sur aparta linio jene:
Kolumno1_nomo
Kampo1_valoro
Kolumno2_nomo
Kampo1_valoro
Kolumno3_nomo
Kampo1_valoro
Kolumno1_nomo
Kampo2_valoro
Kolumno2_nomo
Kampo2_valoro
Kolumno3_nomo
Kampo2_valoro
Ekzemple:
Nomo
mike
Loko
laboro
nombro
1
Nomo
Sue
Loko
hejmo
nombro
2
Nomo
john
Loko
vojaĝado
nombro
10
kaj tiel plu. Ĉu ĉi tiu skripto povas esti modifita por fari ĝin?
Dankon!
Certe povas.
Provu ion tian:
ELEKTU * el MyTableName EN EKSTERISION 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' KAMPOJN FINITAJ PER '\n' LINIOJ FINITAJ PER '\n';
Se vi volas duoblan spacon (du malplenaj linioj) inter rekordaj grupoj, simple diru "LINIOJ TERMINATAJ PER '\n\n';" anstataŭe.
La parto “KAMPOJ FINITAJ PER '\n'” estas kio metas novlinion post ĉiu registro, anstataŭ langeto. Langeto estus '\t' anstataŭe.
Maranatha!
ĉi tio sendube estas bonega afiŝo, mi provis ĝin kaj funkcias bonege, la nura afero estas, ke mia txt-dosiero havas kroman vicon super la titoloj de la kaplinio, kaj iuj rezultoj estas apartigitaj en 2 vicoj, tio povas esti kaŭzita de la datumoj kiujn mi havas. en mia datumbazo neniu ideo, sed ĉi tio estas bonega helpo por konstrui fluojn...
Douglas Karr via kodo vere tremas! Ĝi estas tre utila precipe se vi nur bezonas eligon kiu estas en tekstdosierformato. Multaj dankoj! De teamo Filipinoj!
Saluton! Ĉu estas iu de ĉi tie, kiu povas doni al mi sugeston pri importado de tekstdosiero al mia datumbazo (phpmyAdmin) uzante mian php kiel mian antaŭfinon. Mi havas ideon pri elŝuto de dosiero kaj malfermi ĝin, mia problemo estas, ke kiel mi povas ricevi la vicon rezulton kaj kiel enmeti ĝin en miajn tabelojn, dankon.
Bonvolu iu povas diri al mi kiel forigi la http-kaplinion super la titolaj titoloj