Eli funktion tarkoitus on tallentaa uusi rivi tiedostoon "data.dat". Funktio kyllä tallentaa syötetyn tiedon ko. tiedostoon... muttei lisää sitä uudelle riville... Tiedosto näyttää siis tältä:
RiviRiviRiviRivi
Kun sen pitäsi näyttä tältä:
Rivi
Rivi
Rivi
Rivi
Mielestäni scripti on oikein, mutta ilmeisesti näin ei ole...:
//Lisätään tiedostoon omalle rivilleen function new_info($new){ global $data; //annetaan tiedot $new arraylla $i = fopen($data, "a"); fwrite($i, $new."\n"); fclose($i); return; }
Eli jos joku osaa kertoa että mikä menee vikaan, niin vinkit olisi tervetulleita.
Mod. edit: otsikko.
Missä se näyttää tuolta? eli katsotko tiedostoa selaimella, vaiko jollain "modernilla" tekstinkäsittelyohjelmalla?
Ja luet tiedostoa *nix käyttiksellä, koska windows käyttää merkintää \r\n rivinvaihtoon. Eikä siis näin ollen osaa tulkita tuota rivinvaihtoa oikein. Tai siis ainakin täällä toimii aivan oikein, kun korjasin tuon rivinvaihtomerkin.
Ihan notepadilla katselen kyseistä .dat -filua... Testi palvelin toimii win7 alustalla...
Tuo kyllä osui silmääni pariinkin kertaan kun yritin hakea apua, mutten kokeillut, koska ennenkin on pelkkä \n toiminut... (silloin palvelin alustana tosin linux)
Siispä Kiitos pikaisesta vastauksesta :)
Kyllähän pelkkä '\n' on aivan riittävä rivinvaihto. PHP tulkitsee sen rivinvaihdoksi kaikissa ympäristöissä ja jopa Wordpad ymmärtää sen. Mikäli tiedoston sisältöä ei ole tarkoitettu erityisesti ihmisen luettavaksi, päässet helpommalla käyttämällä rivinvaihtona pelkkää \n:ää.
Tuossa ei ole kyllä mitään syytä käyttää $data-muuttujaa globaalina. Sen kuin laitat sen funktiolle argumenttina. Globaaleihin turvautuminen on yleensä aika huonoa ohjelmointia.
Rivinvaihtojen esityksessä on runsaasti vaihtelua, ja lausuma öKyllähän pelkkä '\n' on aivan riittävä rivinvaihtoö on vähän liioitteleva.
Vanha esitykseni öRivinvaihdot ja kappaleet datan käsittelyssäö
http://www.cs.tut.fi/~jkorpela/rv/
pitänee pääosin edelleen paikkansa, vaikka sen jotkin esimerkit saattavat jo tuntua vanhahtavilta.
Lyhyesti sanottuna rivinvaihtona on tekstitiedostossa yleensä LF ("\n") tai CR ("\r") tai pari CR LF, mutta joskus harvoin jotain muutakin. Ja ohjelmasta riippuu, mitkä kaikki tavat se tunnistaa ja mitä tapaa se käyttää.
Tulostamisessa käytettävä menettely riippuu tietysti siitä, mitä tiedostolla on tarkoitus myöhemmin tehdä.
Ei se ole ollenkaan liioitteleva. Pitää vain osata pitää konteksti muistissa ja lukea perusteluni.
Pelkkää \r:ää ei käytä mikään järjestelmä, jota tässä tarvitsisi alkaa huomioida. Tuskin tässä minkään muinaisen käyttiksen ydinkomponentille syötetään dataa vaan ihan pallotellaan PHP:n ja nettiselaimen välillä.
De facto -standardi on \n, koska maailma pyörii Unixilla, ja oman mausteensa siihen lisää Windows tuplamerkillään.
The Alchemist kirjoitti:
Pelkkää \r:ää ei käytä mikään järjestelmä, jota tässä tarvitsisi alkaa huomioida.
Eikös perinteinen Mac rivinvaihto ole pelkkä \r, mutta tätä tuskin tarvitsee tässä huomioida.
makumaku kirjoitti:
Eikös perinteinen Mac rivinvaihto ole pelkkä \r, mutta tätä tuskin tarvitsee tässä huomioida.
Kyllähan tuo noin oli versio ysiin asti. Alchemist taitaa olla liian nuori muistamaan lukuisia muitakin järjestelmiä, joissa on käytössä erinäisiä tapoja merkitä rivinvaihtoa. Oman lisänsä tuovat myös EBCDIC-merkistöä käyttävät mainframe koneet.
Itse muuten myös laskisin Unixin muinaiseksi käyttöjärjestelmäksi, jossa on paljon menneisyyden painolastia riesana...
En nyt jaksa alkaa flamettaa lukutaidon tärkeydestä, mutta voisit toki huomioida virkkeeni jälkimmäisenkin osan.
Tässä on nyt kyse siitä, että pitäisi löytää sellainen rivinvaihto, jonka PHP-tulkki ymmärtää ja jonka kanssa on itsestäkin mukava puljailla Windowsin puolella. Vaikka miten yrittäisi siirrettävyydestä tehdä pointtia, niin fakta on se, että \n on universaali ratkaisu nykymaailmassa. Notepadista on muutenkin vaikea löytää mitään hyvää koodaajan kannalta, ja kaikki suosituimmat Windows-puolen tekstieditorit voi konffata käyttämään Unix-rivinvaihtoa.
Tietysti monet Unix-editoritkin osaavat \r\n:n mutta ainakin omissa mielikuvissani \n on yksinkertaisempi valinta.
Hm, en kyllä ymmärrä, miksi rivinvaihtona ei voi käyttää CR LF -yhdistelmää, joka on Internetissä normaali ja suositeltu ja joka toimii oikein niissä ohjelmissa, jotka tunnistavat CR:n, ja niissä, jotka tunnistavat LF:n. Väärin se toimii vain niissä ohjelmissa, jotka tulkitsevat molemmat rivinvaihdoksi tunnistamatta niiden yhdistelmää vain yhdeksi rivinvaihdoksi - mikä on aika poikkeavaa käytöstä ohjelmalta.
En minäkään ymmärrä. Kuka niin on väittänyt? Olen kyllä eri mieltä \r\n:n toimivuudesta vajaatukisissa järjestelmissä. Oletan, että joko \r tai \n tulostuisi jonkinlaisena härömerkkinä, mikä on yksioikoisesti väärin, vaikkei se nyt ehkä olekaan yhtä kriittinen virhe kuin kaiken tulostuminen yhdelle riville.
OP ratkaisi ongelman itse: "Ihan notepadilla katselen kyseistä .dat -filua... Testi palvelin toimii win7 alustalla..."
Notepad ymmärtää vain \r\n:n rivinvaihdoksi. Esim. Wordpad muistaakseni ymmärtää myös \n:n.
Aihe on jo aika vanha, joten et voi enää vastata siihen.