Uploadilla ladataan tiedosto palvelimelle, mutta millä se poistetaan sieltä.
Käytät luultavimmin jotain FTP-clienttiä. Tiedoston poistaminen tapahtuu samalla tavalla kuin kotikoneellasi, eli delete-nappulaa vaan.
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?
Käsitin ilmeisesti kysymyksen väärin ^^ Pahoittelut
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
Kysymyksen olisi tietenkin voinut hieman paremmin muotoilla, mutta tulihan sieltä siltikin apua. Kiitoksia tästä.
Miten voi tarkistaa onko haluttu kansio olemassa ja jos ei ole niin luoda sen.
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:
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>
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.
Heti tuli bugi huomattua.
$hakemistojohonkuvatallennetaan = "/wamp/www/pyhajarvenhsrk/kuvat/"; ylläolevan kuuluisi olla $hakemistojohonkuvatallennetaan = "/wamp/www/pyhajarvenhsrk/images/";
Miksi määrittelet sen absoluuttisesti, mikset vain käytä arvoa "images/"?
Eipä tullut ajatelleeksi, että se toimisi nuinkin. Kiitoksia vielä tästäkin vinkistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.