Moi!
Kun tuolla file() funktiolla pystyy lataamaan kaikki teksti tiedostossa olevat tiedot taulukko muuttuujaan, niin miten samaiseen indeksin omaavaan muuttujaan pystyy kirjoittamaan?
Esim.
Eli kun tiedot ladataan muuttujaan, niin ne indeksit menee niiden rivien mukaan (eka rivi 0, toka 1, kolmas 2 jne.) Mutta jos halutaan muokkaa kolmanteen riviin tietoja, niin miten siihen pystyy kirjoittamaan?
Taulukkoon haetuista tiedoston riveistä kannattaa heti alkajaisiksi poistaa rivinvaihdot häiritsemästä, mikä tapahtuu seuraavasti:
$taulu = file("tiedot.txt"); for ($i = 0; $i < count($taulu); $i++) { $taulu[$i] = trim($taulu[$i]); }
Tämän jälkeen tiedoston rivejä voi muutella haluamallaan tavalla:
$taulu[3] = "uusi neljäs rivi"; $taulu[5] = $taulu[5] . "jatko"; // lisätään tekstiä kuudennen rivin perään $taulu[1] = $taulu[6]; // kopioidaan toiseksi riviksi seitsemäs $taulu[7] = "muita"; $taulu[9] = "muutoksia";
Sitten tiedot pitää vielä kirjoittaa takaisin tiedostoon:
$tied = fopen("tiedot.txt", "w"); for ($i = 0; $i < count($taulu); $i++) { fwrite($tied, $taulu[$i] . "\r\n"); } fclose($tied);
Viimeisessä vaiheessa oli oleellista muistaa lisätä taas rivinvaihdot rivien perään. Toinen tapa on pitää rivinvaihdot koko ajan taulukossa, jolloin rivien lukeminen ja tallennus on helppoa, mutta rivien muutos on vaikeampaa, kun pitää koko ajan pitää huolta, että rivinvaihdot menevät oikein.
Kannattavuus riippuu ihan käyttötarkoituksesta. Forin voi korvata simppelisti näin:
Tiedostoon kirjoittaminen hoituu myös yhdellä rivillä:
<?php file_put_contents( 'tiedot.txt', implode( "\n", $lines ), LOCK_EX ); ?>
Ja tuosta viimeisestä funktiosta (file_put_contents) kannattaa huomata, että sitä ei voi käyttää PHP 4:ssä.
PHP4:n tuki loppuu vuodenvaihteessa, joten jos palveluntarjoajasi ei vielä tarjoa vitosversiota niin vois hoputtaa päivittämään. Ja nelosversiollekin tuo funktio on olemassa, PHP Compat paketissa
Kiitos vastauksista! Itse tarvitsen teksti tiedostot lähinnä sivustoni käyttäjä tietojen tallentamiseen...
Aihe on jo aika vanha, joten et voi enää vastata siihen.