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ä.
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:
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/
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?
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'; } ?>
Oikeudet pitäisi olla kunnossa. Silti ei onnistu. Missäköhän vika voisi olla. :-(
No mitä tuo esimerkkini sanoo? 'Tiedoston tyhjäys epäonnistui' ?
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)?
Serveri on kaiketi konffattu väärin (PHP:n osalta). Kokeilepa esimerkiksi tehdä helloworld.php:
<?php echo "Hello world!"; ?>
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?
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?
Mutta ei toimi esimerkiksi näin:
http://www.enkerrodomainia.com/Tyhjennys.php
Toki tämänkin voi salasanankin voi arvata kuten tuon tiedoston nimenkin...
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?
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).
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...
Aihe on jo aika vanha, joten et voi enää vastata siihen.