Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstitiedoston tyhjennys PHP:llä?

Sivun loppuun

tupuutt [04.01.2006 14:19:18]

#

Pitäisi tehdä Delphillä sellainen ohjelma joka lähettää pyynnön PHP-skriptille ja PHP-skripti sitten tyhjentäisi tekstitiedoston. Olisiko tähän jotain esimerkkiä kuinka tyhjennys tehtäisiin PHP-skriptillä ja kuinka toisella ohjelmalla tuota tyhjennys-toimintoa tulisi kutsua? Sit sellanen juttu et sen listan tyhjentämiseen pitäisi tarvita salasana ettei kuka tahansa voi tehdä sitä.

kayttaja-2791 [04.01.2006 14:40:35]

#

Paras lienee ajaa se PHP-skripti suoraan komentoriviltä PHP-tulkkia käyttäen. Eli siis ajaa komento:
"php ftruncate.php"

Missä ftruncate.php on tiedosto joka tekee sen tyhjennyksen.

ftruncate.php voisi olla yksinkertaisimmilaan seuraavanlainen:

$filehandle = fopen("file.txt", "w");
fclose($filehandle);

Pitäisi mielestäni toimia, sillä fopen w-moodi tyhjentää tiedoston automaattisesti. Jos ei toimi niin tutustu ftruncate-funktioon.

Esimerkiksi Mureawikin artikkeli "PHP ja tiedostojen käsittely" lienee hyvää luettavaa:
http://wiki.mureakuha.com/wiki/PHP_ja_tiedostojen_käsittely

tupuutt [04.01.2006 15:07:20]

#

Tein tiedoston Tyhjennys.php jonka sisältö on seuraavanlainen:
<?php
$filehandle = fopen("Ilmoittautumiset.dat", "w");
fclose($filehandle);
?>

Tämän jälkeen kirjoitin selaimeen: http://www.enkerrodomainia.com/Tyhjennys.php

Tiedosto Ilmoittautumiset.dat ei kuitenkaan tyhjentynyt?
Mitä teen väärin?

ajv [04.01.2006 15:14:04]

#

Kyllä tuon pitäisi toimia. Jos ei toimi, pitäisi tulla virheilmoitus. Jos palvelimella on PHP:stä virheilmoitukset kytketty pois, niin ensiksi tarkistaisin teksititiedoston oikeudet.
Kokeile myös:

<?php

$tiedosto = 'Ilmoittautumiset.dat';

if(file_exists($tiedosto)){

   if(!is_writable($tiedosto)) die('Tiedostoa ei voi tyhjentää');

   $fp = fopen($tiedosto, "w");

   if($fp){
      fclose($fp);
      echo 'Tiedoston tyhjäys onnistui'
   }else{
      echo 'Tiedoston tyhjäys epäonnistui'
   }
}else{
   echo 'Tiedostoa "'.$tiedosto.'" ei ole olemassa';
}
?>

tupuutt [04.01.2006 15:38:14]

#

Oikeudet pitäisi olla kunnossa. Silti ei onnistu. Missäköhän vika voisi olla. :-(

ajv [04.01.2006 15:58:30]

#

No mitä tuo esimerkkini sanoo? 'Tiedoston tyhjäys epäonnistui' ?

tupuutt [04.01.2006 16:07:06]

#

Tiedosto Ilmoittautumiset.dat ei tyhjenny ja selaimeen tulee vaan seuraava teksti:

lainaus:

500 Internal Server Error

An unexpected condition prevented the server from fulfilling the request.

Click here to go back to the refering site.

Tiedoston Tyhjennys.php sisältö on siis kokonaisuudessaan tällainen:

<?php

$tiedosto = 'Ilmoittautumiset.dat';

if(file_exists($tiedosto)){

   if(!is_writable($tiedosto)) die('Tiedostoa ei voi tyhjentää');

   $fp = fopen($tiedosto, "w");

   if($fp){
      fclose($fp);
      echo 'Tiedoston tyhjäys onnistui'
   }else{
      echo 'Tiedoston tyhjäys epäonnistui'
   }
}else{
   echo 'Tiedostoa "'.$tiedosto.'" ei ole olemassa';
}
?>

Pitääkö tuon tiedoston Tyhjennys.php sisältää muutakin? Vaatiiko esim. jonkin napin jota painamalla tyhjennys käynnistyy (pitäisi saada toimimaan ilman nappia)?

kayttaja-2791 [04.01.2006 16:25:30]

#

Serveri on kaiketi konffattu väärin (PHP:n osalta). Kokeilepa esimerkiksi tehdä helloworld.php:

<?php
echo "Hello world!";
?>

tupuutt [04.01.2006 17:03:45]

#

Palvelimessa oli ilmeisesti jotain vikaa. Nyt sain sun koodin toimimaan ja tiedosto tyhjenee. Kiitoksia! :-) Kuinka tuohon voisi vielä liittää salasanan ettei kuka tahansa voi tyhjentää tiedostoa jos tietää/arvaa kirjoittaa tyhjennyskomennon oikein selaimeen?

kayttaja-2791 [04.01.2006 17:31:52]

#

Voit kuljettaa salasanan $_GET-methodilla jos kutsut sitä HTTP:llä. Eli jotain tälläistä:

<?php
if ($_GET['salasana'] == "thisismysecretpassword") {
  $filehandle = fopen("Ilmoittautumiset.dat", "w");
  fclose($filehandle);
}
?>

Näin se toimii jos osoite on:
http://www.enkerrodomainia.com/Tyhjennys.php?salasana=thisismysecretpassword
Mutta ei toimi esimerkiksi näin:
http://www.enkerrodomainia.com/Tyhjennys.php

Toki tämänkin voi salasanankin voi arvata kuten tuon tiedoston nimenkin...

tupuutt [05.01.2006 14:35:12]

#

Sain salasanankin toimimaan! :-) Kiitos JTS selkeistä vastauksista.

Onko muuten sellainen mahdollista, että käyttäjä pääsisi jotenkin lataamaan tuon Tyhjennys.php tiedoston palvelimelta ja näkisi sitten siitä salasanan? Tai voiko tuon PHP-koodin saada jotenkin selaimella näkyviin? Eli onko tuo ihan turvallinen ratkaisu jos vaan uskoo, että käyttäjä ei voi arvata salasanaa?

kayttaja-2791 [07.01.2006 14:20:32]

#

Serverin muut käyttäjät saattavat voida nähdä sen tiedoston sisällön muutenkin kuin PHP-tulkin lävitse, riippuen serverin asetuksista. Eli en käyttäisi siinä Verkkopankkini tunnuksia salasanana... Mahdollisuus sille että kuka tahansa näkisi sen salasanan HTTP-ylitse on minimaalinen, sillä se vaatisi paitsi PHP-tulkin toimimattomuutta, niin myös webbiserverin jotain totaalista virhettä.

Ja jokatapauksessa, joku voi "haistella" ohjelmasi liikennettä ja selvittää salasana sitäkautta (ellet sitten ole tähän jotenkin fiksusti varautunut).

ajv [07.01.2006 17:33:15]

#

Kait tuo Tyhjenna.php?salasana=thisismysecretpassword tallentuu myös serverin lokeihin ja saattaa jonkun statistiikka-softan välityksellä myös päätyä jonnekkin kaikkien hämmästeltäväksi. Parempi olisi POST-metodin käyttö. Mutta tosiaan, ei vaikuta miltään valtionsalaisuudelta tuo tiedosto, joten en välttämättä kantaisi huolta siitä, että joku tuon saisi selville, sillä tuskin tuo ketään kiinnostaa...


Sivun alkuun

Vastaus

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

Tietoa sivustosta