Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: fopen ongelma

Sivun loppuun

eMZii [29.05.2008 16:25:50]

#

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.

<?php
if (isset($_POST['savetext']))
	{
	$txt = $_GET['txt'];
	$path = '../txt/'.$txt.'';
	$file = fopen($path, 'w');
	$data =  $_POST['content'];
	fwrite($file, $data);
	fclose($file);
	}
?>

ville-v [29.05.2008 16:40:02]

#

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.

eMZii [29.05.2008 16:56:44]

#

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.

GimPeltzi [29.05.2008 17:03:58]

#

Voitko liittää tähän virheilmoituksen, jonka saat?

Metabolix [29.05.2008 17:07:03]

#

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?

eMZii [29.05.2008 17:12:28]

#

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

Metabolix [29.05.2008 17:24:41]

#

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.

ville-v [29.05.2008 17:24:59]

#

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.

eMZii [29.05.2008 17:57:27]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta