<?php #################################################################### // Asetukset: # $max_file_size = "200"; // maksimi tiedosto koko # $upload_path = "./tiedostot/"; // kansio # $files = array(".jpg", ".jpe", ".jpeg", ".gif"); // Hyväksyty tiedosto muodot # $loki = "true"; // kirjoitetaanko loki # $tied = "data.txt"; // kuvaus tiedosto # #################################################################### // alku if (isset($_POST['laheta'])) { $max_size = 1024*$max_file_size; // banned? function is_banned ($files, $name) { if (is_array($name)) { foreach ($files as $file) {} if (strstr($file, $name)) return true; else return false; } else return false; } if (is_banned($files, $_FILES['file']['name'])) { echo "Tiedoston on väärää tyyppiä!"; } elseif ($_FILES["file"]["size"] == 0) { print ("Tiedoston koko on 0kt - Lähetys keskeytetty!"); } elseif (file_exists($upload_path.$_FILES['file']['name'])) { echo "Tiedosto on jo olemassa - Yritä vaihtaa tiedoston nimeä."; print "<br><h2>Tiedosto nimet jotka ovat jo käytössä:</h2>"; // näytetään kaikkiennimet $hakemisto = opendir("./tiedostot/"); while ($tiedosto = readdir($hakemisto)) { if ($tiedosto != "." && $tiedosto != "..") { echo "- <a href=\"./tiedostot/$tiedosto\">$tiedosto</a><br>"; } } closedir($hakemisto); } elseif ($_FILES["file"]["size"] < $max_size) { move_uploaded_file($_FILES['file']['tmp_name'], $upload_path.$_FILES['file']['name']); //siiretään tiedosto $size_kt = round($_FILES["file"]["size"] / 1024, 0) . " kilotavua"; print("Tiedosto ".$_FILES["file"]["name"]." on lisätty!<br>"); print("Tiedoston koko on $size_kt <br>"); // Kirjoitetaanko loki if($loki=="true") { $tiedot = fopen($tied,"a") or die("Tiedostovirhe - Lokitiedotoa tiedostoa ei voi avata!"); $mutu = ("Tiedosto:".$_FILES["file"]["name"]." Nimi:"$nimi" Kuvaus:"$kuvaus" Sähköposti:"$posti"\n"); fwrite($tiedot, $mutu); fclose($tiedot); } } else { print "Liian suuri tiedosto $size_kt, kun maksimi on max_file_size!"; } print "<br><a href=\"upload.php\">Takaisin</a>"; } ?> <br> <h2>Upload:</h2> <form enctype="multipart/form-data" action="<?php print $PHP_SELF ?>" method="post"> Valitse kuva:<input type="file" name="file"> Nimi: <input type="text" name="nimi"><br> Kuvaus: <input type="text" name="kuvaus"><br> Sähköposti: <input type="text" name="posti"><br> <input type="hidden" name="MAX_FILE_SIZE" value="<?php print ("$max_size"); ?>"> <input type="submit" name="laheta" value="Lähetä"> </form> <?php } ?>
Oon tommosta säätäny jo monta tuntii, mut en oo keksiny miten saan noi submitatut hommat tallennettuu tiedostoon paitsi toi tiedoston nimi? Miten sais toimii?
<?php $path = "/path/to/upload/directory"; //Hakemisto, johon tiedostot tallennetaan if($file){ if(copy($file, "$path/$file")){ print("Tiedosto imutettiin palvelimelle onnistuneesti!"); }else{ print("VIRHE! Tiedostoa ei saatu imutettua."); } unlink($file); } ?>
Tässä oli se imutuspätkä, homma hoitunee mitä ilmeisimmin copy() -käskyllä.
Ja sitten se HTML-sivu olis tän näkönen:
<html> <head> <title>Imutus</title> </head> <body> <h3>Tiedoston DEMO-Imutus</h3> <form name="form" method="post" action="upload.php" enctype="multipart/form-data"> <p>Tiedosto, joka aiotaan imuttaa: <input type="file" name="file"> </p> <p> <input type="submit" value="Submit"> </p> </form> </body> </html>
Veivaa se copy() -käsky siihen omaan skriptiin ni eikös ala pelittämään!?
lähinnä kysyinb miten tuon saa toimimaan :-P
$mutu = ("Tiedosto:".$_FILES["file"]["name"]." Nimi:"$nimi" Kuvaus:"$kuvaus" Sähköposti:"$posti"\n");
Koita vaikka $_POST["nimi"], $_POST["kuvaus"] ja $_POST["posti"]
Jos on register globals off. Mikä on järkevää.. kannattaa opetella koodaamaan skriptinsä niin että ne toimii safe mode TRUE ja register globals FALSE tilassa.
Ok, Miks toi globals pitäs olla pois päältä?
No siihen liittyy tietoturvallisia asioita.. Jos on aloittelija niin sillä voi saada ihmeitä aikaan :)
Ja muutenkin koko register globals ollaan poistamassa PHP:stä, niin mitäs sitten teet kun et osaa kirjoittaa skriptejäsi register globals off tilassa? :)
Noh sitten täytyy vain harjoitella muutama uusi asia..
Safe mode on nytkin, mutta register globals TRUE :-S
Tuo copy() voidaan korvata myös move_upload_file():llä.
move_uploaded_file ( string filename, string destination)
...Ja se register_globals kannattaa pistää pois.
Mbnetin ongelma tälä hetkellä, katsotaan sitten uudestaan kun saan oman serverin
Mulla toi temen vinkki ei toimi:
Warning: copy(http://koti.mbnet.fi/MuN SiVuT/php testit/sisään//tmp/phpZncEo4) [function.copy]: failed to create stream: HTTP wrapper does not support writeable connections. in /mbnet/t/teamos/php testit/up.php on line 7 VIRHE! Tiedostoa ei saatu imutettua.
Itse puuhasin upload-systeemin sivulleni aikoja sitten ja jouduin "chmodaamaan" upload-kansion 777:ksi, että uploadskripti ei valittaisi.
Onko se viisasta/normaalia/hyväksyttävää?
Ladattavan tiedoston ehdoton maksimikoko on säädettävissä php:n asetuksista, kohdasta upload_max_filesize.
Oletusasetus on kaksi megatavua.
Lomakepohjainen tiedostokoon rajoittaminen on niin helposti kierrettävissä, että aijai.
Aihe on jo aika vanha, joten et voi enää vastata siihen.