Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedoston poisto

Sivun loppuun

Vasta_alkaja [06.10.2008 13:39:31]

#

Uploadilla ladataan tiedosto palvelimelle, mutta millä se poistetaan sieltä.

Viitapiru [06.10.2008 13:51:49]

#

Käytät luultavimmin jotain FTP-clienttiä. Tiedoston poistaminen tapahtuu samalla tavalla kuin kotikoneellasi, eli delete-nappulaa vaan.

kayttaja-7440 [06.10.2008 15:48:59]

#

https://www.php.net/unlink
Muuten, mikä olisi hyvä ja turvallinen tapa toteuttaa, jos tarvitsee latailla useampaan kansioon tavaraa? Asettaa kaikkien kansioiden(joita käsitellään) oikeudet 777?

Viitapiru [06.10.2008 15:54:55]

#

Käsitin ilmeisesti kysymyksen väärin ^^ Pahoittelut

Blaze [06.10.2008 16:09:35]

#

kayttaja-7440 kirjoitti:

Asettaa kaikkien kansioiden(joita käsitellään) oikeudet 777?

Mitä tahansa muuta.

Noin yleisesti veppiserveri ajaa PHP-tulkkia jonain käyttäjänä. Jos PHP:tä ajetaan apachemoduulina käyttäjä on usein wwwrun, apache tai vastaava. Tällä käyttäjällä pitää olla riittävät oikeudet noihin hakemistoihin (joo, oon vanha jäärä ja kieltäydyn nimittämästä hakemistoja kansioiksi). Ja muilla ei tietenkään sitten mitään oikeuksia.

...näistäkin pitäis vissiin joskus kirjottaa jotain vähän pitemmästi. Ahkeruuspuuskaa odotellessa ohjaan lukemaan asiasta muualta: http://linux.fi/wiki/Tiedoston_oikeudet

Vasta_alkaja [06.10.2008 16:15:15]

#

Kysymyksen olisi tietenkin voinut hieman paremmin muotoilla, mutta tulihan sieltä siltikin apua. Kiitoksia tästä.

Vasta_alkaja [06.10.2008 22:46:14]

#

Miten voi tarkistaa onko haluttu kansio olemassa ja jos ei ole niin luoda sen.

Antti Laaksonen [06.10.2008 22:58:52]

#

Funktiolla mkdir voi luoda hakemiston:

<?php
@mkdir("kuvat");
?>

Edessä oleva merkki @ estää virheet siltä varalta, että hakemisto on jo olemassa.

Funktiolla is_dir voi tarkistaa, onko hakemisto olemassa:

<?php
if (is_dir("kuvat")) {
    echo "Hakemisto on olemassa.";
}
?>

Vasta_alkaja [06.10.2008 23:02:40]

#

Oisko kellään parannusehdotuksia / kommentteja antaa. Onko tässä turhaa. jne...

<html>
<head>
<title>Tiedoston lataaminen palvelimelle</title>
</head>
<body>
<?php
if($_POST["lahetys"])
{
    // haetaan ladatun kuvan tiedot
    $valittukuva = $_FILES["kuva"];

    // Tarkistetaan onko kuvaa valittu
    if(empty($valittukuva)){
        return;
    }

    // Tarkistetaan onko kuvan tyyppinä jpeg tai gif, jos on mennään eteenpäin
    if($valittukuva['type'] == "images/jpeg" || $valittukuva["type"] == "images/gif"){

        // Tarkistetaan kuvan koko
        if($valittukuva['size'] >= 20000){
            echo 'Kuvan koko on liian suuri';
            return;
        }

        // merkki @ estää virheet siltä varalta, että hakemisto on jo olemassa.
        @mkdir("images");

        //avataan hakemisto images
        $kuvanhakemisto = opendir("images/");

        $hakemistojohonkuvatallennetaan = "/wamp/www/pyhajarvenhsrk/kuvat/";

        // Muutetaan nimi turvalliseksi
        $kuvannimi = rawurlencode($valittukuva["name"]);

        /* Tarkistaa, onko parametrina annettu tiedosto kelvollinen www-lomakkeen kautta
           palvelimelle ladattu tiedosto.ja siirtää sen lisäksi tiedoston
           haluttuun paikkaan. */

        if(move_uploaded_file($valittukuva["tmp_name"],
            $hakemistojohonkuvatallennetaan .
            $kuvannimi
            ))
        {
            //header("location:kuvanlataaminenpalvelimelle.php");
            echo '<p>Kuvan lataaminen on onnistunut</p>';
        }
        else
        {
          echo "<p>Kuvan siirtäminen haluttuun kansioon on epäonnistunut</p>";
        }

        //suljetaan hakemisto
        closedir($kuvanhakemisto);
   }
}
?>

<form enctype="multipart/form-data" action="" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="20000">
Kuvatiedosto:
<input type="file" name="kuva"><br>
<input name="lahetys" type="submit" value="Lähetä">
</form>
</body>
</html>

Metabolix [07.10.2008 11:56:24]

#

Koodin alussa oleva empty-tarkistus menee aivan hukkaan, koska jos kyseistä tiedostoa ei ole lähetetty, jo $_FILES-taulukon lukeminen olemattomasta kohdasta aiheuttaa virheen. Tarkista siis, onko taulukon haluttu kohta olemassa, ja siirrä se vasta sitten muuhun muuttujaan.

Et edes käytä images-hakemistoa, joten miksi luot sen? Jos vaikka lukisit jostain, mitä opendir ja closedir tekevät, niin ehkä tietäisit, ettei niillä olisi tuossa koodissa mitään virkaa, vaikka kyseistä hakemistoa käyttäisitkin.

Muuttujan "hakemistojohonkuvatallennetaan" nimi on osoitus epäselvistä nimeämistottumuksista, kuten ehkä itsekin ymmärrät. Kannattaa suosia ytimekkäämpiä nimiä tai edes esittää nimet selkeässä muodossa ("kuvahakemisto", "kuvat").

Koodissasi on jo paikka header-funktiolle, jolla käyttäjä lähetetään eri sivulle. Voisit ottaa sen käyttöön ja siirtää lomakkeen käsittelyn eri tiedostoon, jottei sivun päivitys (refresh) lähetä vahingossa dataa uudestaan.

<?php # lomake.php
if (!empty($_POST["lahetys"]) && !empty($_FILES["kuva"])) {
  // ...
  header("Location: http://sivusto/kuva.php?lahetetty=1"
}
<?php # kuva.php ?>
<html>
 <head>
  <title>Lähetä kuva</title>
 </head>
 <body>
<?php
if (empty($_GET["lahetetty"])) {
  echo "<p>Tällä lomakkeella voit lähettää kuvan.</p>\n";
} else {
  echo "<p>Kuva on nyt tallennettu. Lähetäpä toinenkin!</p>\n";
}
?>
 <form>...</form>
 </body>
</html>

Vasta_alkaja [07.10.2008 14:44:55]

#

Heti tuli bugi huomattua.

$hakemistojohonkuvatallennetaan = "/wamp/www/pyhajarvenhsrk/kuvat/";

ylläolevan kuuluisi olla

$hakemistojohonkuvatallennetaan = "/wamp/www/pyhajarvenhsrk/images/";

Metabolix [07.10.2008 16:40:44]

#

Miksi määrittelet sen absoluuttisesti, mikset vain käytä arvoa "images/"?

Vasta_alkaja [07.10.2008 20:45:55]

#

Eipä tullut ajatelleeksi, että se toimisi nuinkin. Kiitoksia vielä tästäkin vinkistä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta