Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedostoonkirjoituksen rivitys ei toimi

Sivun loppuun

Pentu [27.04.2011 22:25:11]

#

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.

Lebe80 [27.04.2011 22:43:23]

#

Missä se näyttää tuolta? eli katsotko tiedostoa selaimella, vaiko jollain "modernilla" tekstinkäsittelyohjelmalla?

Teuro [27.04.2011 22:43:51]

#

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.

Pentu [27.04.2011 22:52:32]

#

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

The Alchemist [28.04.2011 07:06:02]

#

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.

Yucca [28.04.2011 09:54:18]

#

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ä.

The Alchemist [28.04.2011 10:30:05]

#

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.

makumaku [28.04.2011 10:58:43]

#

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.

jalski [28.04.2011 11:17:57]

#

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...

The Alchemist [29.04.2011 11:06:06]

#

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.

Yucca [29.04.2011 19:45:48]

#

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.

The Alchemist [29.04.2011 20:31:32]

#

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.

Iaxul [30.04.2011 12:22:38]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta