Eli tarkoituksena olisi tehdä koodi jolla kirjoitetaan tekstitiedostoon. Ongelmana on että tiedoston avaaminen ei onnistu kun tiedoston nimi otetaan linkin mukana olevasta parametrista $_GET['txt'], vaan tulee virheilmoitus käyttöoikeuksista.
Jos muuttujaksi $txt määrittää suoraan tiedoston nimen esim.
$txt = "tiedosto.txt"; niin homma pelaa kuten pitääkin. Muuttuja $_GET['txt'] on varmasti määritelty oikein.
Virheilmoitus tulee koska käyttöoikeuksia ei ole. Anna ne siis.
Koska olet varma siitä, että $_GET on täysin oikea, ei varmaankaan ole tarvetta katsoa echon avulla mille tiedostolle oikeudet pitäisi antaa.
kokeilin chmodilla antaa käyttöoikeuksia, ei ole vaikutusta asiaan. Eikä ongelman pitäisi olla käyttöoikeuksissa koska jos tiedoston nimen antaa suoraan fopen-funktioon tai muuttujaan $txt niin homma toimii.
Jostain syystä fopen-funktio vain ei toimi jos tiedosto nimi tulee tuon $_GET kautta. Olen kyllä katsonut echolla että tuo $_GET['txt'] on oikein.
Voitko liittää tähän virheilmoituksen, jonka saat?
Tarkista nyt vielä kerran, että se $_GET on oikein, tuohon ei minusta ole mitään muuta järkevää selitystä, jos sama tiedostonimi kuitenkin toimii suoraan sijoitettuna. Onko parametriin ehkä eksynyt välilyöntejä tai jotain muuta huomaamatonta?
virheilmoitus: Warning: fopen(../txt/): failed to open stream: Permission denied in...
sivun url: manage_text.php?txt=index.txt eli kuten näkyy $_GET['txt'] on juuri niin kuin pitääkin
Ei, $_GET['txt'] ei ilmeisesti ole oikein. Et siis ole edes tarkistanut sitä echolla skriptin puolelta. Teepä niin, että et sotke GETiä ja POSTia vaan lähetät kaikki tiedot samalla menetelmällä. Eli älä tee näin:
<form method="POST" action="sivu.php?txt=moi.txt"> <input type="submit" name="laheta" value="Lähetä" /> </form>
Tee sen sijaan näin:
<form method="POST" action="sivu.php"> <input type="hidden" name="txt" value="moi.txt" /> <input type="submit" name="laheta" value="Lähetä" /> </form>
Nyt myös parametri "txt" välittyy POSTin avulla, jolloin koodistasi tulee loogisempaa ja toimivampaa.
Tähän voisi vaikka ilmoittaa jotain itsestään selvää, että virheilmoituksen mukaan
$txt = $_GET['txt']; $path = '../txt/'.$txt.''; => $path = '../txt/'
joten $txt vaikuttaa tässä vaiheessa jotenkin tyhjältä. Ei näyttänyt olevan mitään hassuja puolipistevirheitä, mutta ehkäpä serverisi asetukset heittävät.
Kokeilepa korvata $txt nimellä $eikonfliktiatallakertaa ja katso toimiiko.
Jooh, olipa astetta typerämpi virhe tuossa, pahoittelen aiheuttamaani vaivaa.
Elikkäs sehän ei ollut näin:
lainaus:
<form method="POST" action="sivu.php?txt=moi.txt">
vaan $GET['txt'] oli olemassa jo ennen formin lähetystä ja luonnollisesti tyhjentyi kun nappia painaa. Muutin muotoon
<?php <form id="form1" name="form1" method="post" action="manage_text.php?teksti='.$_GET['txt'].'"> ?>
nyt pelittää hienosti. Kiitos vastanneille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.