Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: uploadissa nimen muuttaminen

Sivun loppuun

abina [16.02.2004 11:54:21]

#

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
}
?>

ajv [16.02.2004 12:05:26]

#

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.

abina [16.02.2004 12:11:48]

#

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.

Juhis [16.02.2004 13:11:08]

#

<?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.
*/

}
?>

abina [17.02.2004 12:39:59]

#

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?

Juhis [17.02.2004 13:33:29]

#

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?

abina [17.02.2004 17:25:28]

#

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/ ?

Juhis [17.02.2004 19:38:56]

#

Kyllä. Jos haluat 2 hakemistoa taaksepäin, ../../
3 olisi ../../../

Ja niin edelleen.

sooda [17.02.2004 19:41:33]

#

eikö noin pääse myös vaikka 2 hakemistoa taaksepäin tyylillä .../ eli kolme pistettä? toimiiko unixissa?

antsa [18.02.2004 00:13:38]

#

Ei taida toimia, muistaakseni kokeilin joskus kolmea pistettä ja ei toiminut.


Sivun alkuun

Vastaus

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

Tietoa sivustosta