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>
Toimiiko tuo koodi muka jossakin, kun minusta javascript ei (luojan kiitos) voi avata tiedostoja palvelimelta.
Voidaan tottakai vaihtaa PHP:ksi
EDIT: Idea silti sama.
Jos kukaan osaa auttaa, olisin kiitollinen.
https://www.ohjelmointiputka.net/oppaat/opas.file_get_contents
.
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...)
<?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.)
En näe missään tietoturva-aukkoa, voisitko näyttää? Korjasin sinne sen syntaksivirheen, oli mennyt väärä merkki väärään paikkaan.
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
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".
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ä.
Kiitokset kaikille vastauksista.
Homma ratkaisu, sivut näyttää hyvältä ja koodi toimii.
ps. ../sivut on siis suojattu kansio ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.