Tätä yksinkertaista koodia meinasin käyttää mutta tuli sellainen mieleen että kuinka muutetaan tiedoston nimeä siinä vaiheessa kun siirretään tiedostoa?
tässä koodi:
<?php if(isset($laheta)) { copy($tiedosto,"tiedostot/".$HTTP_POST_FILES["tiedosto"]["name"]); print("Tiedosto ".$HTTP_POST_FILES["tiedosto"]["name"]." on tallennettu kansioon tiedostot<br>"); print("Koko on ".$HTTP_POST_FILES["tiedosto"]["size"].".<br>"); } else { ?> <FORM ENCTYPE="multipart/form-data" ACTION="upload.php" METHOD="POST"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="8000000"> Tiedosto: <INPUT NAME="tiedosto" TYPE="file"> <INPUT TYPE="submit" VALUE="Lähetä" name="laheta"> </FORM> <?php } ?>
En oo ihan varma, mutta eiköhän se mene tolla copy-funktiolla jotenkin näin:
<?php copy($tiedosto,"tiedostot/oma_nimi.pääte"]); ?>
https://www.php.net/manual/en/function.copy.php
Tai sitten uudelleennimeät sen rename()-funktiolla sen jälkeen kun olet sen tiedoston upannut. Ihan mielenkiinnosta, miksi se tiedosto pitää uudelleenimetä. Voihan sen nimen muuttaa sieltä omalta koneeltakin ennen uppausta.
ajv sen takia kun tuo tulee verkkokauppa -sivustoon. ja käyttäjät on mitä on. ja kun lisää tuotteen ja lähettää tuon kuvan niin se muuttaisi sen nimen tuotteen id:n nimiseksi.
<?php if(isset($_FILES['tiedosto']['tmp_name'])) { $id = time(); // id on unixtimestamp, tämän saa helposti muutettua $temp = array_reverse(explode(".",$_FILES['tiedosto']['name'])); // otetaan tiedostopääte $type=strtolower($temp[0]); move_uploaded_file($_FILES['tiedosto']['tmp_name'], "tiedostot/".$id.".".$type); /* move_uploaded_file() funkkari on kivempi kuin copy. ensin pistetään tmp tiedoston nimi, ja sitten sijainti johon se halutaan siirtää. Kun PHP:llä upittaa jotain, php tallentaa sen ensin tmp/ hakemistoon, josta se sitten kopioi sen haluttuun paikkaan. */ } ?>
Juhis^ kiitos! tuolla selvisi!
mutta mutta... miten työ teette tai onko ideoita miten tehdä kun mulla on tuo sivu josta lisätään tiedosto suojatussa "hallinta" -kansiossa. mutta se tiedosto pitäisi siirtää tuonne alaspäin eli ettei se ole suojatussa. eli tarkemmin selitettynä: /localhost/hallinta/tiedostot/ mutta sen pitäisi olla /localhost/tiedostot/ jotta käyttäjät näkisi kuvat. mutta laittaakko tuohon koodin tynkään sitten ihan http://localhost/tiedostot/ ? onko turvallista käyttää noin? ja se että tuolla tavalla jos teen niin tulee virheilmoitus: move_uploaded_file failed to create stream: HTTP wrapper does not support writeable connections
ja toinen: move_uploaded_file unable to move
noi vähän lyhennettynä kun virheilmotukset on tuossa toisella koneella. tarkemman voin laittaa kun menen kotiin ja saan koneen nettiin. mutta jossain asetuksissa vikaa? ja mikä olisi turvallisin tapa siirtää tuo tiedosto?
move_uploaded_file($_FILES['tiedosto']['tmp_name'], "../tiedostot/".$id.".".$type);
Eli siis normaali ../ eteen, niin hakemistoissa taaksepäin.
Luonnollisesti voit laittaa tuohon koko hakemistorakenteen. Esim. unix ympäristössä:
/home/user/public_html/tiedostot/
Windows ympäristössä se olisi varmasti jotenkin nöin:
C:/www/tiedostot/
Hmm.
https://www.php.net/move_uploaded_file tuolta varmasti löytyy enemmän vastauksia noihin virheviesteihin.
Ethän yritä tallentaa move_uploaded_file() funkkarilla HTTP osoitteeseen? Eli että hakemistorakenteen sijaan koitat tallentaa http://localhost/tiedostot/ osoitteeseen?
no yritinhän minä. joskus aina huomannu tuon ../ mutta en tajunnu painaa mieleen ja tajuta sitä että sillä pääsee takaisinpäin. nyt sain toimimaan. onko tuo niin että jos tarvitsee päästä kaksi kansiota taaksepäin niin se oisi ../../tiedostot/ ?
Kyllä. Jos haluat 2 hakemistoa taaksepäin, ../../
3 olisi ../../../
Ja niin edelleen.
eikö noin pääse myös vaikka 2 hakemistoa taaksepäin tyylillä .../ eli kolme pistettä? toimiiko unixissa?
Ei taida toimia, muistaakseni kokeilin joskus kolmea pistettä ja ei toiminut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.