Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: .txt tiedoston luku dynaamisella URL:illa HTML:llään

Sivun loppuun

iGoin [19.12.2010 21:57:06]

#

Elikkäs tällainen ongelma pamahti eteen.
Olemassa on index.html tiedosto, jonka pitäisi jonkinnäköisellä scriptillä lukea sivulle .txt tiedostossa oleva teksti. Lisäksi sen pitäisi toimia dynaamisena. Esimerkiksi kun siirrytään sivulle www.omasivu.com/sivu?=1 lukee serveri sivulle tiedoston 1.txt

Ilmeisesti paras tapa lukea .txt tiedostot on seuraava,
mutta kuinka siitä tehdään dynaaminen?

<script type="text/javascript">
file = fopen(getScriptPath("omaTIEDOSTO.txt"), 0);
file_length = flength(file);
content = fread(file, file_length);
<div id="omaDIV"></div>
document.getElementById("omaDIV").innerText = content;
</script>

Teuro [19.12.2010 22:04:44]

#

Toimiiko tuo koodi muka jossakin, kun minusta javascript ei (luojan kiitos) voi avata tiedostoja palvelimelta.

iGoin [19.12.2010 22:06:59]

#

Voidaan tottakai vaihtaa PHP:ksi

$tiedosto = "omaTIEDOSTO.txt";
$fh = fopen($tiedosto, 'X') or die("Ei voida avata");
fclose($fh);

EDIT: Idea silti sama.
Jos kukaan osaa auttaa, olisin kiitollinen.

tsuriga [19.12.2010 22:08:23]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj4, file_get_contents.

Macro [19.12.2010 22:10:15]

#

tiedosto.php?sivu=jotain

<?php
echo (!empty($_GET["sivu"]) && file_exists($_GET["sivu"] . ".txt")) ?  file_get_contents($_GET["sivu"] . ".txt") : "";

(Ensimmäinen, joka sotkee Javascriptin ja PHP:n...)

Metabolix [19.12.2010 22:14:45]

#

<?php
$nimi = @$_SERVER["QUERY_STRING"];
$nimi = preg_replace("/[^-_0-9A-Za-z]/s", "", $nimi);

$data = @file_get_contents("{$nimi}.txt");
if ($data === false) {
  trigger_error("Virheellinen sivu ({$nimi})!", E_USER_ERROR);
}

echo "<div>", htmlspecialchars($data), "</div>";

Ja osoitteeksi jotain.php?nimi, esimerkiksi jotain.php?1.

Edit: Macro, koodisi on aivan pielessä: syntax error ja tietoturva-aukko, kaikki yhdellä rivillä! (Edit2: Macro näköjään korjasi syntaksivirheen, mutta tietoturva-aukko on yhä paikallaan, koska parametria ei mitenkään tarkisteta.)

Macro [19.12.2010 22:21:07]

#

En näe missään tietoturva-aukkoa, voisitko näyttää? Korjasin sinne sen syntaksivirheen, oli mennyt väärä merkki väärään paikkaan.

iGoin [19.12.2010 22:21:46]

#

Kiitokset Metabolix vinkistä!
Toimii ja näyttää hienolta sivujen .css tiedoston kanssa.

Mutta lisään vielä yhden kysymyksen:
Jos sivu on juuri tuo sivu.php, kuinka koodi muuttuu jos tiedostot (txt) luetaankin alihakemistosta ../sivut

Metabolix [19.12.2010 22:22:08]

#

Macro: Kyseinen tietoturva-aukko näyttää tältä:
sivu.php?sivu=../../../macron_salainen_tiedosto
Toki aukon hyödyntäminen vaatii tuuria.

iGoin: Lisäät vain file_get_contents-funktion parametrin alkuun tuon tekstin "../sivut/", eli yhteensä "../sivut/{$nimi}.txt".

Macro [19.12.2010 22:24:10]

#

iGoin kirjoitti:

Mutta lisään vielä yhden kysymyksen:
Jos sivu on juuri tuo sivu.php, kuinka koodi muuttuu jos tiedostot (txt) luetaankin alihakemistosta ../sivut

$data = @file_get_contents("{$nimi}.txt");

=>

$data = @file_get_contents("../sivut/{$nimi}.txt");

Metabolix: En tiennytkään, että noinkin voi käydä. Tekevälle sattuu ja virheistä oppii.

Edit. Metabolix ehti ensin tuossa kysymyksessä.

iGoin [19.12.2010 22:26:17]

#

Kiitokset kaikille vastauksista.
Homma ratkaisu, sivut näyttää hyvältä ja koodi toimii.

ps. ../sivut on siis suojattu kansio ;)


Sivun alkuun

Vastaus

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

Tietoa sivustosta