sivut.web

ohjeita web-sivuston tekijälle

PHP-opas: Tiedostofunktiot

Usein tulee tarvetta lukea jotain palvelimella olevista tiedostoista tai kirjoittaa niihin jotain. Monet pistävät esimerkiksi skriptit pitämään lokia web-sivuston tapahtumista.

Seuraava ohjelma lukee tiedostosta luvun, kasvattaa lukua yhdellä, tulostaa sen selaimelle ja tallentaa uuden luvun tiedostoon. Kyseessä on siis primitiivinen sivulatauslaskuri.

$tiedosto = "laskuri.dat";

// fopen avaa tiedostokahvan, jonka kautta avattuun
// tiedostoon voidaan myöhemmin ohjelmassa viitata
// Tiedosto avataan luettavaksi ja  kirjoitettavaksi (r+).
$kahva = fopen($tiedosto,"r+");

// Luetaan tiedostosta ensimmäiset 16 merkkiä
// (tai tiedoston loppuun)
$numero = fgets($kahva,16);

// Kasvatetaan numeroa yhdellä ja tulostetaan se selaimelle
$numero++;
print $numero;

// Tiedoston lukemisen johdosta tiedostokahvan sisäinen
// osoitin siirtyi 16 merkin päähän tiedoston alusta.
// Rewind-komennolla se siirtyy takaisin alkuun.
rewind($kahva);

// Kirjoitetaan uusi numero tiedostoon.
fputs($kahva,$numero);

// Suljetaan tiedostokahva
fclose($kahva);

esimerkit/tiedosto.php
lähdekoodi

Seuraava sivu: Sähköpostin lähetys.


Käyttäjien kommentit

15.1.2004 18:46
txxx44

Näin voi sitten lukea merkkijono kerralla:

$tiedosto = file("a.txt");
print $tiedosto[0]; // Luetaan rivi 1
print $tiedosto[1]; // Luetaan rivi 2
print $tiedosto[2]; // Luetaan rivi 3

26.2.2004 11:34
o

Miten voi kirjoittaa tietylle riville?

28.2.2004 15:20
Juha-Pekka Järvenpää <jp@sivut.org>

Suoraan tietylle riville kirjoittamiseen ei tietääkseni ole valmista välinettä. Kirjoittaaksesi riville numero n sinun täytyy ensin lukea koko tiedosto muistiin, sitten kirjoittaa tiedostoon rivit alusta riville numero (n-1), sitten haluamasi rivi, ja lopuksi loput alkuperäiset rivit.

1.3.2004 19:57
o

Onko mahdollista luke jokin teksti esim sanojen "muu" ja "mää" välistä?

2.3.2004 13:42
Juha-Pekka Järvenpää <jp@sivut.org>

Lyhyesti: jos jotain on johonkin tallennettu, se voidaan lukea.

File-funktiolla luet tiedoston rivit taulukkoon ja array_search-funktiolla etsit tiettyä alkiota.

24.3.2004 18:25
Toni Isotalo <toni.isotalo@pp.inet.fi>

Miten voidaan lukea tekstitiedostosta samalta riviltä eri tietoja? esim:

02;Zyxel Prestige 645MP-A1;60,17

josta 02 on tieto jolla haetaan kyseisen nimi joka on seuraava ; merkin jälkeen ja osan hinta joka on ; merkin jälkeen!!!

24.3.2004 19:59
Juha-Pekka Järvenpää <jp@sivut.org>

Tämä liittyy enemmän merkkijonofunktioihin.

Explode-funktiolla voidaan "hajottaa" merkkijono taulukoksi. Esimerkiksi kysytty rivi "02;Zyxel Prestige 645MP-A1;60,17" voitaisiin hajottaa seuraavasti:

list($id,$tuote,$hinta) = explode(';',$rivi);

Hintatiedot kannattaa muuten kirjata aina pisteellä, ei pilkulla. Tämä siksi, että desimaaliluvut esitetään aina nimenomaan pisteellä ja näin hinnoilla voidaan suorittaa laskutoimenpiteitä ohjelmassa. Jos hinnat halutaan tulostaa selaimelle pilkkumuodossa, voi käyttää lausetta str_replace('.',',',$hinta); .

6.5.2004 10:59
samuli

miten voi tallentaa merkkijonon uudelle riville
niin ettei se mene aina edellisen perään??

6.5.2004 13:54
Juha-Pekka Järvenpää <jp@sivut.org>

Samuli: Kirjoita rivinvaihtomerkki (esim. \n) siihen väliin, mihin haluat rivinvaihdon.

6.5.2004 18:49
samuli

kiitos.
tiedän että tuo oli nyt aika
yksinkertainen homma mutta aloittelen tässä
vasta php-ohjelmoitia ja tuommoisia perus käskyjä
on hankala löytää

6.5.2004 19:13
samuli

anteeksi nyt taas mutta minulla se \n ei oikein
toimi. minulla on tämmöinen että
$tiedosto= fopen (jotain.dat, 'a');
$uusirivi = jotain tekstiä muutama muuttuja ynm.;
fputs ($tiedosto, $uusirivi);
fclose ($tiedosto);
enkä haluaisi että kaikki menisi samalle riville peräkkäin esim. jotain.dat näyttää tältä
jotain tekstiä muutama muuttuja jotain tekstiä muutama muuttuja jotain tekstiä muutama muuttuja
jotain tekstiä muutama muuttuja jotain tekstiä muutama muuttuja jotain tekstiä muutama muuttuja

siis kaikki samalla rivillä peräkkäin
siis toimiiko tuo \n tuossa vai onko siihen jokin muu


6.5.2004 21:00
Juha-Pekka Järvenpää <jp@sivut.org>

Kyllä toimii \n, kunhan laitat ne tuplalainausmerkkeihin ("). Eli seuraavasti:

$uusirivi = "jotain tekstiä\nmuutama muuttuja";

7.5.2004 15:53
samuli

ai no kiitos

13.6.2004 21:18
samuli

miten saisi tiedostonimestä välilyönnit pois
esim "petteri. txt" olisi "petteri.txt"

14.6.2004 14:24
Juha-Pekka Järvenpää <jp@sivut.org>

Merkkijonoja voi muuttaa funktiolla str_replace. Seuraava esimerkki poistaa muuttujan $txt kaikki välilyönnit.

$txt = 'petteri. txt';
$txt = str_replace(' ','',$txt);

4.9.2004 23:06
Harjoitupäiväkirja nettiin?

Terve,
onko PHP:llä mahdollista lukea Excel taulukosta infoa ja tulostaa ne sen jälkeen? Taulukon soluissa on ihan tekstiä/lukuja, ei kaavoja.

9.10.2004 17:59
sd <sd>

ds

14.1.2005 22:25
dot <->

mitenkä saisin sillee, et tiedostoon lisäis rivin niin, että eka rivi pyyhkiytyy pois. eli jos olis vaikka tällänen tiedosto:

rivi1
rivi2
rivi3
rivi4

niin siihen pitäs lisää "rivi5" nii että tiedosto olis sen jälkeen näin:

rivi2
rivi3
rivi4
rivi5

15.1.2005 16:00
molo <jarkko_makiarvela@hotmail.com>

osaisko joku kertoo miten laitetaan flash peli sellaseks, et ku rekisteröi oman ukon siihen pelii, ni aina pelin jälkee se tallentuu ittellään ku lopettaa pelaamisen.???

15.1.2005 16:02
hfhgfhgfhgf <jarkko_makiarvela@hotmail.com>

mä teen peliä nettiin, osaisko joku kertoo miten laitetaan flash peli sellaseks, et ku rekisteröi oman ukon siihen pelii, ni aina pelin jälkee se tallentuu ittellään ku lopettaa pelaamisen.???

Lisää oma kommentti


Juha-Pekka Järvenpää
jp@sivut.org
http://www.jarvenpaa.net/