PHP a MySQL: Allforio Ymholiad i Ffeil wedi'i Amcangyfrif Tab

logos mysql php

Y penwythnos hwn roeddwn i eisiau adeiladu tudalen a fyddai, yn syml, yn gwneud copi wrth gefn o unrhyw ymholiad neu dabl i mewn i ffeil Tab Delimited. Mae cod caled ar y rhan fwyaf o'r enghreifftiau ar y we.

Yn fy achos i, roeddwn i eisiau i'r colofnau fod yn ddeinamig felly roedd yn rhaid i mi ddolennu trwy'r holl enwau caeau bwrdd i adeiladu'r rhes pennawd gydag enwau colofnau, ac yna dolennu trwy'r holl gofnodion ar gyfer y rhesi data sy'n weddill. Rwyf hefyd yn gosod y pennawd fel y bydd y porwr yn cychwyn lawrlwytho'r ffeil yn y ffeil (txt) gydag enw dyddiad y ffeil a'i stampio amser.

Gadewais gysylltiad agored a chau y gronfa ddata, ond dyma'r cod canlyniadol a weithiodd yn eithaf da:

$ heddiw = dyddiad ("YmdHi");
pennawd ("Math o gynnwys: cymhwysiad / octet-stream");
pennawd ("Cynnwys-Gwarediad: atodiad; enw ffeil = \" ". $ heddiw." _ Backup.txt \ "");
$ query = "DEWIS * O orchymyn` mytable` gan` myorder` ";
$ canlyniad = mysql_query ($ ymholiad);
$ count = mysql_num_rows ($ canlyniad);
$ caeau = mysql_num_fields ($ canlyniad);
$ data = "";
ar gyfer ($ i = 0; $ i> $ caeau; $ i ++) {
$ maes = mysql_fetch_field ($ canlyniad, $ i);
$ data. = $ maes-> enw;
$ data. = "\";
}
$ data. = "\ n";
tra ($ rhes = mysql_fetch_row ($ canlyniad)) {
ar gyfer ($ x = 0; $ x> $ caeau; $ x ++) {
$ field-> name = $ rhes [$ x];
$ data. = $ maes-> enw = $ rhes [$ x];
$ data. = "\";
}
$ data. = "\ n";
}
adleisio $ data;

Gellir addasu'r cod yn hawdd ar gyfer gwerthoedd sydd wedi'u gwahanu gan goma hefyd.

14 Sylwadau

  1. 1

    Allwch chi ddim gwneud:

    SELECT `mytable` order by `myorder`
    INTO OUTFILE '/tmp/Backup.txt'
    FIELDS TERMINATED BY '\t'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

    ?

    • 2

      Mae'n debyg y gallech chi!

      Yn yr achos hwn, roeddwn i mewn gwirionedd yn adeiladu dolen 'wrth gefn' mewn cymhwysiad gwe, felly ymarferoldeb PHP yw'r hyn yr oeddwn ei angen. Fodd bynnag, ni wyddwn erioed y gallech hefyd ysgrifennu at ffeil yn uniongyrchol o'r datganiad MySQL. Cwl iawn!

      Diolch!

      • 3

        Eich ffordd chi fyddai'r ffordd orau wrth gwrs os yw'r gweinydd MySQL ar beiriant anghysbell, oherwydd mae'n debyg na fyddai'n gallu ysgrifennu ar y peiriant lle mae PHP yn rhedeg 🙂

        Falch o dynnu sylw at gyfeiriadau eraill a phethau newydd er 🙂

      • 4

        Ond fe allech chi redeg yr ymholiad i ffeil, a dim ond ailgyfeirio'r porwr i'r ffeil a gynhyrchir, neu ddefnyddio “readfile” PHP os yw popeth arall yn methu?

        Ni fyddwch yn gallu gwneud hynny os nad oes gan y gweinydd mysql fynediad i'r system ffeiliau wrth gwrs ...

  2. 5

    Post gwych. Ydych chi'n gwybod am ddull hawdd, rhad ac am ddim / ffynhonnell agored o fewnforio / adfer ffeil wedi'i hamffinio â thab (fel rydych chi newydd ei chreu) yn ôl i'r dq mysql?

    • 6

      Errr… mysqlimport?

      mysqlimport database_name --local backup.txt

      Neu gyda'r gorchymyn SQL:

      LOAD DATA LOCAL INFILE 'backup.txt' INTO TABLE `my_table` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'

      Gyda mysqlimport, mae'n rhaid i enw'r ffeil gyd-fynd ag enw'r tabl (dim ond rhywbeth i wylio amdano)

    • 7
  3. 8

    Collais i fwy na 6 awr o fy mywyd yn ceisio darganfod pam fod Internet Explorer 6/7 yn defnyddio 'html' ffeil-ffeil a pheidio â derbyn fy enwau ffeiliau arfer a nodwyd yn y penawdau .. a hefyd ddim yn caniatáu arbed ffeiliau .. pan ceisio cael defnyddwyr i lawrlwytho ffeiliau testun wedi'u creu mewn ffordd debyg i'r uchod.

    Roeddwn i'n defnyddio HTTPS ac nid yw IE yn storio'r ffeiliau hyn.

    Fe wnes i ddod o hyd i'r ateb ar sylw gan Brandon K yn http://uk.php.net/header.

    Dywed:

    -
    Newydd golli chwe awr o fy mywyd yn ceisio defnyddio'r dull canlynol i anfon ffeil PDF trwy PHP i Internet Explorer 6:

    Wrth ddefnyddio SSL, bydd Internet Explorer yn annog gyda'r ymgom Open / Save, ond yna'n dweud “Nid yw'r ffeil ar gael ar hyn o bryd neu ni ellir dod o hyd iddi. Rho gynnig Arni eto'n hwyrach." Ar ôl llawer o chwilio, deuthum yn ymwybodol o'r Erthygl MSKB ganlynol o'r enw “Nid yw lawrlwythiadau ffeiliau Internet Explorer dros SSL yn gweithio gyda'r penawdau rheoli storfa” (KBID: 323308)

    Mae PHP.INI yn ddiofyn yn defnyddio gosodiad: session.cache_limiter = nocache sy'n addasu penawdau Content-Cache a Pragma i gynnwys opsiynau “nocache”. Gallwch chi ddileu'r gwall IE trwy newid “nocache” i “public” neu “private” yn PHP.INI - Bydd hyn yn newid y pennawd Content-Cache yn ogystal â chael gwared ar y pennawd Pragma yn llwyr. Os na allwch neu os nad ydych am addasu PHP.INI ar gyfer atgyweiriad ar draws y safle, gallwch anfon y ddau bennawd canlynol i drosysgrifennu diffygion:

    Bydd angen i chi osod y penawdau cynnwys fel y'u rhestrir uchod er mwyn i hyn weithio. Sylwch fod y broblem hon YN UNIG yn effeithio ar Internet Explorer, tra nad yw Firefox yn arddangos yr ymddygiad diffygiol hwn.
    -

    Wel .. o leiaf dim ond 6 awr y collodd…

  4. 9

    Mae hyn yn gweithio'n dda. Fodd bynnag, rydw i'n cael popeth ar un llinell wedi'i wahanu gan ofod. Rwy'n ceisio ei addasu i argraffu popeth ar linell ar wahân fel hon:

    Colofn1_name
    Maes1_value
    Colofn2_name
    Maes1_value
    Colofn3_name
    Maes1_value

    Colofn1_name
    Maes2_value
    Colofn2_name
    Maes2_value
    Colofn3_name
    Maes2_value

    Er enghraifft:

    Enw
    Mike
    Lleoliad
    Gwaith
    Nifer
    1

    Enw
    Sue
    Lleoliad
    Hafan
    Nifer
    2

    Enw
    John
    Lleoliad
    teithio
    Nifer
    10

    ac yn y blaen. A ellir addasu'r sgript hon i'w gwneud?
    Diolch!

    • 10

      Gall sicr.

      Rhowch gynnig ar rywbeth fel hyn:

      DETHOL * o MyTableName I MEWN ALLANOL 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' CAEAU A DERBYNIWYD GAN '\ n' CYSYLLTIADAU A DERFYNWYD GAN '\ n';

      Os ydych chi eisiau lle dwbl (dwy linell wag) rhwng grwpiau recordiau, dywedwch “LINES TERMINATED BY '\ n \ n';" yn lle.

      Y gyfran “CAEAU A DERFYNIR GAN '\ n'" yw'r hyn sy'n rhoi llinell newydd ar ôl pob cofnod, yn lle tab. Byddai tab yn '\' yn lle.

      Maranatha!

  5. 11

    mae hon yn swydd wych, fe wnes i roi cynnig arni a gweithio'n wych, yr unig beth yw bod gan fy ffeil txt res ychwanegol uwchben y teitlau pennawd, ac mae rhai canlyniadau wedi'u gwahanu mewn 2 res, gall hyn gael ei achosi gan y data sydd gen i yn fy Nghronfa Ddata dim syniad, ond mae hwn yn help mawr i adeiladu porthwyr…

  6. 12

    Douglas Karr mae eich cod yn wirioneddol greigiau! Mae'n ddefnyddiol iawn yn arbennig os mai dim ond allbwn sydd ar ffurf ffeil testun sydd ei angen arnoch chi. Diolch yn fawr! O dîm Philippines!

  7. 13

    hei yno! A oes unrhyw un o'r fan hon a all roi awgrym imi am fewnforio ffeil testun i'm cronfa ddata (phpmyAdmin) gan ddefnyddio fy php fel fy mhen blaen. Mae gen i syniad am lawrlwytho ffeil a'i hagor, fy mhroblem yw sut y gallaf gael canlyniad y rhes a sut i'w fewnosod yn fy nhablau, diolch

  8. 14

Beth ydych chi'n feddwl?

Mae'r wefan hon yn defnyddio Akismet i leihau sbam. Dysgwch sut mae eich data sylwadau yn cael ei brosesu.