Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Puuttuvan linkin korvaaminen

Sivun loppuun

CLink [08.07.2006 20:24:21]

#

Minulla on webbisivusto, jonka alalaidassa on linkkejä. Tiedän, että yksi linkki vanhenee joskus vuoden kuluttua, koska kyseinen dokumentti häviää netistä. Siksi olen kopioinnut kyseisen tiedoston sisällön php-tiedostoon:

<head>
<title>...</title>
<?php
$poytakirja="<html><head><title>....</body></html>";
?>

nyt olisi tarkoitus tehdä joku tämän tapainen koodi:

<?php
$file1 = fopen("http://wwww.xxx...","r");
if ($file1) {
  echo "<a href=\"http://wwww.xxx...\">xxx</a>";
}
else
{
  echo $pyotakirja; // Tässä pitäisi tulostaa html-dokumentti uudessa ikkunassa
}
fclose($file1);
?>

Miten onnistuisi tuo else-lauseen kirjoittaminen niin, että siihen muodostuisi samanlainen <a href=... -lauseke kuin yläpuolella, mutta se avaisi selaimessa uuden ikkunan, jossa näkyisi tuon $poytakirja-muuttujan html-koodi?

tsuriga [08.07.2006 20:49:36]

#

Tallenna se dokkari ihan omaan tiedostoonsa ja linkitä siihen. Uuden ikkunaan aukaisemiseen voi yrittää käyttää target="_blank" vaan kaikki eivät tästä tykkää ja ovatkin sen selaimistaan disabloineet.

CLink [08.07.2006 21:24:29]

#

Olin haaveillut sellaisesta dynaamisesta järjestelmästä, joka loisi dokumentin vain tarvittaessa ja hävittäisi se käytön jälkeen. En haluaisi, että serverillä olisi kaiken maailman staattisia dokumentteja, jotka eivät ole alunperin sivustojen ylläpitäjän luomia.

Metabolix [08.07.2006 21:30:47]

#

Mutta mistäpä se palvelin tietää, milloin käyttäjä on sen ladannut? Jos vaikka käyttäjä päättää siinä dokumentissa painaa päivitä-nappia, niin tuleekin virhe, kun se on itse jo hävittänyt itsensä.

CLink [08.07.2006 21:35:38]

#

Metabolix kirjoitti:

Mutta mistäpä se palvelin tietää, milloin käyttäjä on sen ladannut? Jos vaikka käyttäjä päättää siinä dokumentissa painaa päivitä-nappia, niin tuleekin virhe, kun se on itse jo hävittänyt itsensä.

Niin, itse asiassa mietiskelinkin, että jonkinlainen pop-up-ikkuna, joka näyttää html-sivun olisi parempi kuin selaimen uusi ikkuna, koska sen luomishetken tietäisi aika hyvin ja jos sen luomiseen on käytetty jotain tilapäistä tiedostoa, niin sen tilapäisen tiedoston voisi hävittää heti pop-up-ikkunan luomisen jälkeen.

tsuriga [08.07.2006 22:42:49]

#

Ei se sen dynaamisempaa ole jos sulla on se data jossain muuttujassa mitä jos data olisi omassa tiedostossaan. Tiedostossa/tietokannassa sen datan täytyy kuitenkin olla. Jos nyt tuommoista dynaamisuutta tahdot emuloida niin laitat sen datatiedoston vaikka webrootin ulkopuolelle tai htaccessilla suojattuun kansioon, jotta siihen ei pääse suoraan käsiksi.

CLink [09.07.2006 09:57:15]

#

tsuriga kirjoitti:

Ei se sen dynaamisempaa ole jos sulla on se data jossain muuttujassa mitä jos data olisi omassa tiedostossaan. Tiedostossa/tietokannassa sen datan täytyy kuitenkin olla. Jos nyt tuommoista dynaamisuutta tahdot emuloida niin laitat sen datatiedoston vaikka webrootin ulkopuolelle tai htaccessilla suojattuun kansioon, jotta siihen ei pääse suoraan käsiksi.

Alunperin mietin, että php:lla pitäisi onnistua tilapäisen tiedoston luominen, jonka voisi näyttää sitten selainikkunassa vaihtoehtoisena webbisivuna. Mutta nyt asiaa mietittyäni valkeni, että minulla on jo tuo data tallennettuna tässä tiedostossa xxx.php muuttujassa $poytakirja. Koska se on php-koodissa, niin se ei näy normaalissa client-selainikkunassa, mikä riittää minulle. Sitten minun täytyy ilmeisesti tallentaa koko dokumentin xxx.php body-tagien sisällä oleva informaatio toiseen muuttujaan. Seuraavaksi täytyy suunnitella xxx.php -tiedostoon koodi, joka tutkii, onko tiedostoa kutsuttu ilman parametria vai parametrin kanssa. Ensimmäisessä tapauksessa näytetään tiedostossa xxx.php tuon toisen muuttujan sisältö. Jälkimmäisessä tapauksessa näytetään $poytakirja-muuttujan sisältö (siihen täytyy sisällyttää vain se koodi, joka on alkuperäisen vielä netissä olevan dokumentin body-tagien välissä). Siis jälkimmäisessä tapauksessa xxx.php -tiedostoa kutsutaan rekursiivisesti. Tällöin homman pitäisi kai onnistua "dynaamisesti" ilman että luodaan ylimääräisiä tiedostoja tai kansioita vai olenko väärässä?

Metabolix [09.07.2006 10:32:13]

#

Ja minusta tuntuu, että teet asian aivan liian vaikeaksi. Mikä järki tuossa muutenkaan on? Samahan se on, onko sivu siellä aina vai vain silloin, kun joku sillä käy.

Mutta tuo selittämäsi systeemi siis toimisi jokseenkin näin kai:

<?php
$tiedosto_on = fopen("http://www.joku.site/tiedosto.htm", "r");
if ($tiedosto_on) {
  fclose($tiedosto_on);
  $tiedosto_on = true;
}
else {
  $tiedosto_on = false;
}

if ($tiedosto_on) {
  echo '<body><a href="http://www.joku.site/tiedosto.htm">Linkki muualle maailmaan</a></body>';
}
else {
  // Tiedostoa ei ole. Näytetäänkö sisältö vai laitetaanko linkki?
  if (isset($_GET['nayta']) && $_GET['nayta'] == 1) {
    ?>
<body>Tänne vanhan tiedoston sisältö, et tarvitse edes muuttujia...</body>
    <?php
  }
  else {
    echo '<body><a href="tama.php?nayta=1">Linkki samalle sivulle</a></body>';
  }
}

CLink [09.07.2006 11:03:09]

#

Selvä, tuossahan se on kaikessa yksinkertaisuudessaan. Kiitoksia. Tuo tiedoston avaaminen ei välttämättä tosin kerro kyseisen tiedoston poissaolosta. Joillakin sivuistoilla puuttuvaa sivua kutsuva ohjataan index.html -sivulle. Täytyy luoda vielä funktio, joka tutkii avattua tiedostoa. Funktion parametrinä voisi olla joku tietty oikealla sivulla esiintyvä merkkijono, esimerkiksi päivämäärä. Sitten pitäisi antaa toisena parametrinä pituus eli kuinka pitkälti avattua tiedostoa tutkitaan ennenkuin otaksutaan, että merkkijonoa ei löydy ja tämä ei ole oikea tiedosto.Vai onko tähänkin olemassa yksinkertaisempi ratkaisu?

Metabolix [09.07.2006 18:39:16]

#

Voithan toki yhdistää palvelimelle socketeilla, lähettää HTTP-pyynnön ja katsoa, mitä palvelin vastaa. (Oma-aloitteisuutta tähän, kiitos.)


Sivun alkuun

Vastaus

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

Tietoa sivustosta