oikeuksien määritys PHP:ssä

Miten saadaan määritettyä tekstitiedostolle käyttöoikeudet PHP:ssä? Teen skriptiä jolla käpistellään tekstifilua ja nyt en pysty luomaan fopen()-lauseella tiedostoa jos sitä ei ole jo luotu, nähtävästi riittämättömien oikeuksien vuoksi. Kun se tiedosto on luotu(käsin), niin siihen pystyy kyllä kirjoittamaan. Pitääkö ne oikeudet määrittää siihen hakemistoon, johon tuo tekstifilu on tarkoitus luoda vai sille luotavalle teskstifilulle?
9423
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

pystyä tiedosto luomaan ihan normaalisti ja skripti pääsee käsittelemään tiedostoa omistajansa oikeuksin.

Veikkaan että et ole tutkinut fopenin mahdollisia parametreja, joissa olemattoman tiedoston luonti voidaan määrätä

Äänestä
  • Olin määrittänyt fopenin luomaan tiedoston, jos sitä ei ole. Mutta olin tehnyt vähän väärin tuon koko operaation.

    Eli ensin määritin polun, jossa filen pitäisi olla. Sitten tutkin, voiko fileen kirjoittaa is_writablella ja jos voi, niin avataan file. No eihän se tietenkään mitään avaa/luo, kun olemattomaan tidostoon ei voi kirjoittaa :D

    Tein nyt niin, että mikäli tiedosto ei ole kirjoitettavissa (eli sitä ei ole),niin tällöin luodaan se fopenilla. Muuten se avataan fopenilla.

    Ja nuo oikeudet luodulle tiedostolle tulevat omistajalta, eli owner ja group ovat samat, ownerilla luku ja kirjoitus, mulla vain luku.

    Äänestä

  • PHP-aloittelija kirjoitti:

    Olin määrittänyt fopenin luomaan tiedoston, jos sitä ei ole. Mutta olin tehnyt vähän väärin tuon koko operaation.

    Eli ensin määritin polun, jossa filen pitäisi olla. Sitten tutkin, voiko fileen kirjoittaa is_writablella ja jos voi, niin avataan file. No eihän se tietenkään mitään avaa/luo, kun olemattomaan tidostoon ei voi kirjoittaa :D

    Tein nyt niin, että mikäli tiedosto ei ole kirjoitettavissa (eli sitä ei ole),niin tällöin luodaan se fopenilla. Muuten se avataan fopenilla.

    Ja nuo oikeudet luodulle tiedostolle tulevat omistajalta, eli owner ja group ovat samat, ownerilla luku ja kirjoitus, mulla vain luku.

    Ihan pikkuruisena vinkkinä, että kannattaa käyttää PHP:n functioita vain siihen tarkoitukseen mihkä se on tehty. Tuolla is_writable-functiolla selviää pystyykö tiedostoon kirjoittamaan, jos ei niin se voi johtua esim käyttöoikeuksista. Ja muutenkin koodista tulee vaikea selkoista kun functiota käytetään ihan eriasiaan kuin on tarkoitus.

    Joten tutustuppas file_exists-functioon http://fi.php.net/manual/fi/function.file-exists.php

    Äänestä

  • Ja3q+3 kirjoitti:

    Ihan pikkuruisena vinkkinä, että kannattaa käyttää PHP:n functioita vain siihen tarkoitukseen mihkä se on tehty. Tuolla is_writable-functiolla selviää pystyykö tiedostoon kirjoittamaan, jos ei niin se voi johtua esim käyttöoikeuksista. Ja muutenkin koodista tulee vaikea selkoista kun functiota käytetään ihan eriasiaan kuin on tarkoitus.

    Joten tutustuppas file_exists-functioon http://fi.php.net/manual/fi/function.file-exists.php

    Mutta eikös ole järkevää tutkia ensin, pystyykö tiedostoon ylipäänsä kirjoittamaan??

    Äänestä

Onko tuossa koodissa järkeä, vai miten asiantuntijat tiedoston luonnin ja avaamisen toteuttaisivat?

if (!file_exists($file_dir)) {
$file = fopen($file_dir, "a ");
echo "Tiedosto luotiin.";
} elseif (is_writable($file_dir)) {
$file = fopen($logfile_dir, "a ");
echo "Tiedostoon voitiin kirjoittaa.";
}

Äänestä
  • Tais tulla pieni väärinkäsitys. Tuota file_exists-functiota käytät vain silloin jos haluat tietää onko tiedostoa olemassa.

    Mutta nythän sinun ei tarvitse sitä selvittää, sillä jos tiedostoa ei ole niin luot sen.

    Tässä sulle pikkainen esimerkki "asiantuntijalta". Tein tuosta function jotta käyttö on helpompaa eikä tartte jokapaikkaan tuommoista tehdä.




    Tuo myös lukitsee tiedoston jolloin muut eivät siihen pysty kirjoittamaan samaan aikaan, tämä aiheuttaa tiedoston tyhjenemistä. Tosin ainakin flock-functio ei toiminut kunnolla ihan aina, jolloin tiedosto saattoi tyhjetä vaikka se olisi "lukittu". Kaiketi tuo käyttää myös sitä functiota?

    Siksi kannattaa käyttää tietokantaa mikäli tiedostoon kirjoitetaan usein ja samaan aikaan.

    Äänestä

  • Ja3q+3 kirjoitti:

    Tais tulla pieni väärinkäsitys. Tuota file_exists-functiota käytät vain silloin jos haluat tietää onko tiedostoa olemassa.

    Mutta nythän sinun ei tarvitse sitä selvittää, sillä jos tiedostoa ei ole niin luot sen.

    Tässä sulle pikkainen esimerkki "asiantuntijalta". Tein tuosta function jotta käyttö on helpompaa eikä tartte jokapaikkaan tuommoista tehdä.




    Tuo myös lukitsee tiedoston jolloin muut eivät siihen pysty kirjoittamaan samaan aikaan, tämä aiheuttaa tiedoston tyhjenemistä. Tosin ainakin flock-functio ei toiminut kunnolla ihan aina, jolloin tiedosto saattoi tyhjetä vaikka se olisi "lukittu". Kaiketi tuo käyttää myös sitä functiota?

    Siksi kannattaa käyttää tietokantaa mikäli tiedostoon kirjoitetaan usein ja samaan aikaan.

    Kiitos vinkistä!

    Mutta omassa tapauksessani eri käyttäjät kirjoittaisivat tuohon samaan tiedostoon ja varmasti myös samaan aikaankin. Näinköhän siinä nyt käy niin, että kun yksi kirjoittaa ja toinen on myös kirjoittamassa, niin tämän toisen kirjoittama data jyrää tuon ensimmäiseksi kirjoittaman datan?

    Äänestä

  • PHP-aloittelija kirjoitti:

    Kiitos vinkistä!

    Mutta omassa tapauksessani eri käyttäjät kirjoittaisivat tuohon samaan tiedostoon ja varmasti myös samaan aikaankin. Näinköhän siinä nyt käy niin, että kun yksi kirjoittaa ja toinen on myös kirjoittamassa, niin tämän toisen kirjoittama data jyrää tuon ensimmäiseksi kirjoittaman datan?

    Unohtui mainita, että sessiot ovat myös käytössä.

    Äänestä

  • PHP-aloittelija kirjoitti:

    Kiitos vinkistä!

    Mutta omassa tapauksessani eri käyttäjät kirjoittaisivat tuohon samaan tiedostoon ja varmasti myös samaan aikaankin. Näinköhän siinä nyt käy niin, että kun yksi kirjoittaa ja toinen on myös kirjoittamassa, niin tämän toisen kirjoittama data jyrää tuon ensimmäiseksi kirjoittaman datan?

    Jos kaksi käyttäjää yrittää täsmälleen samaan aikaan niin on mahdollista että data joko tuhoutuu tai sitten menee sekasin, johtuen juurikin tuosta, ettei PHP:n tiedoston lukitusfunctiot toimi kunnolla.

    Idea tuolla lukituksella on, että kun käyttäjä suorittaa scriptin niin käsiteltävä tiedosto on varattu hänelle tarvittavan ajan eikä muut pääse väliin sotkemaan.

    Usein tuota ongelmaa on kierretty että esim foorumissa viestit tallenetaan useaan eri tiedostoon eikä kaikkia samaan jne... riippuen siitä mikä tilanteeseen sopii.

    Voit toki tehdä niin että teet tuollee ja käytät lukitusta vaikka se ei toimikkaan kunnolla, mutta esim CRONilla ajastettuna kopioit tiedostojen tiedot talteen vaikkapa kerran tunnissa, tällöin pystyt helposti palauttamaan tiedot jos ne tuhoutuu.

    Mutta tietokannat ovat tuossa asiassa parempia ja niitä kannattaa käyttää mikäli mahdollista.

    Sessiot eivät varsinaisesti vaikuta tässä asiassa mitenkään.

    Äänestä

Kommentoi aloitusta


PHP-aloittelija kirjoitti:

Miten saadaan määritettyä tekstitiedostolle käyttöoikeudet PHP:ssä? Teen skriptiä jolla käpistellään tekstifilua ja nyt en pysty luomaan fopen()-lauseella tiedostoa jos sitä ei ole jo luotu, nähtävästi riittämättömien oikeuksien vuoksi. Kun se tiedosto on luotu(käsin), niin siihen pystyy kyllä kirjoittamaan. Pitääkö ne oikeudet määrittää siihen hakemistoon, johon tuo tekstifilu on tarkoitus luoda vai sille luotavalle teskstifilulle?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu