Multi upload

Juhis 25.02.04 15:29

Monta tiedostoa kerralla servulle.

 Tekstiversio  Arvo: 3 (7 ääntä)  Äänestä: +  -
<?php
ob_start();

/*

        Multi upload ;)
        Käytä miten lystäät.
          15:12 24.2.2004

*/


define("MAX_COUNT", 10); // määritetään että kuinka monta tiedostoa voidaan kerralla tallentaa serverille
define("UPLOAD_DIRECTORY", "upload/"); // määritellään tiedostojen uusi koti, eli minne tiedostot upitetaan
define("MAX_SIZE", 126976); // yksittäisen tiedoston maksimikoko
define("INDEX_PAGE", "index.php"); // määritetään redirect sivu

if(!is_dir(UPLOAD_DIRECTORY)) {
        mkdir(UPLOAD_DIRECTORY, 0777); // jos hakemistoa ei ole olemassa, luodaan sellainen
}

if(file_exists($_FILES['file1']['tmp_name'])) { // tarkistetaan että edes ensimmäinen kuva on tallentunut servulle temp hakemistoon, aloitetaan upitus
        for($i=1; $i<=MAX_COUNT; $i++) {

                if($_FILES['file'.$i]['size'] > MAX_SIZE) { echo "Liian iso tiedosto!<br>".MAX_SIZE." on raja"; break; }

                if(file_exists(UPLOAD_DIRECTORY.$_FILES['file'.$i]['name'])) { exit($_FILES['file'.$i]['name']." niminen tiedosto on jo serverillä"); }

                move_uploaded_file($_FILES['file'.$i]['tmp_name'], UPLOAD_DIRECTORY.$_FILES['file'.$i]['name']); // tallennetaan tiedosto serverille

                header("Location: ".INDEX_PAGE); // ja sitten redirect
        }
}
?>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" ENCTYPE="multipart/form-data">
        <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="102400000">
<?php
for($i=1;$i<=MAX_COUNT;$i++) {
        echo "  <b>$i</b> <input type=\"file\" name=\"file".$i."\" size=\"75\"><br>";
}

?>      <input type="submit" value="upload"></form><?php

ob_end_flush();
exit;
?>

empty 16:58 25.2.04 
toimiiko IE:llä
tkr7 17:51 25.2.04 
Kai PHP:n pitäs olla selaimesta riippumaton. (ellei tietenkin lasketa, esim. keksien tallentamisen eväämistä)
Petesku 18:03 25.2.04 
Ihan hyvän näköinen vaikka olenkin vasta aloittelija.
Bemari 11:20 28.12.04 
Warning: Cannot modify header information - headers already sent by (output started at C:\omaservu\upload\upload.php:6) in C:\omaservu\upload\upload.php on line 26

tuollasen virheen antaa. eli redirect ei toimi (enää, sillä ennen se toimi). mitään olennaista en mielestäni muuttanut, mut ei vaan toimi... juurikaan mitään en php:stä ymmärrä :-)
editoitu: 21:24 28.12.04
Bemari 11:21 28.12.04 
edit nro. 3 :-D nyt toimii kummiskin... vielä ku osais liittää tohon toiminnon jolla määritellään hyväksytyt tiedostomuodot... pitänee koittaa pähkäillä ;-).... olis muuten hieno sellanenkin ominaisuus että vois valita kansion mihin filut upitaan... siis uppausvaiheessa sais valita annetuista vaihtoehdoista :-)

Enemy1978 15:04 13.1.05 
Muuten hyvä mut ei toimi
D4_B34M 20:54 18.3.05 
Hyvä ja selkee koodi ;) eikös toi mee sekasin temp tiedoston kanssa kun moni uppaa samaan aikaan?
KaluP 16:19 26.4.05 
Mulla se väittää ahkerasti: Warning: Cannot modify header information - headers already sent by (output started at /home/vtsten/public_html/upload/upload.php:9) in /home/vtsten/public_html/upload/upload.php on line 38
samanniminen tiedosto on jo serverillä

Mutta silti kuvat/muut menee serverille. Toimiihan se näinkin mutta olis se nyt kiva saada toimimaan myös oikein.

Joten Mitä teen, oi älykkäämmät?
sampsu 19:07 12.9.05 
Käyttöoikeuksista muodostui pienoinen ongelma. Kun tiedostot luodaan palvelimelle selaimen kautta, owneriksi tulee www-data, ja kirjoitusoikeudet ainoastaan ownerilla. Tiedostojen poistamisen kanssa tuli näin ollen ongelma - ainoastaan root ja www-data voivat poistaa tiedoston.

Korjaantuu onneksi php:n chmodilla:

chmod(UPLOAD_DIRECTORY.$_FILES['file'.$i]['name'], 0777);

Tämän kun lisää tallennusrivin jälkeen, on vapaat poisto-oikeudet.



Tuohon virheilmoitukseen (Warning: Cannot modify header information) ei riitä osaaminen - vielä ;)

Viisaammat neuvokoon...
Bitten 17:38 17.10.05 
Mitenkäs tuosta voisi muokata sellaisen, että ohjelma uploadaamisen jälkeen menisi sinne tiedostoon, että sen osoitteen voisi kopioida? Olen sen verran vähän tuota php:tä lukenut, että voisitko antaa suhteellisen tarkat ohjeet?
soppa 14:20 6.12.05 
ihan hyvä, mutta nuo tiedostot ei kyllä ilmesty tuonne servulle.. ;)
Firewolf 18:54 9.5.08 
Huoh. Tuo Warning: Cannot modify header information hoituu pistämällä tuo ob_start(); sen sivun ensimmäiseksi sanaksi (<?php:n jälkeen). http://pp.kpnet.fi/blaze/codefaq/#headerssent