Yksinkertainen upload, jolla voidaan lähettää monta tiedostoa samaan aikaan. Ei ulkonäöllä pilattu.
Jos lähetetään yksi tiedosto, tulee se suoraan tiedostojen kohdekansioon. Jos taas lähetetään monta tiedostoa tehään niille oma kansio johon ne laitetaan.
Irkissä varsinkin kätevä jos halutaa vaikka uppia muutama kuva jostakin jutusta nopeasti muiden nähtäville :)
Tässä varmaan on vielä parannettavaa joissakin kohtiin. Palautetta otetaan vastaan :)
EDIT: Jos ei suostu suuret tiedostot menemään, muuttakaa suoraan php.inistä nuo suuremmaksi. ini_set toimii miten sattuu
<?php ini_set('upload_max_filesize', '128M'); //Isoja tiedostoja täytyy upppia //ini_set('default_socket_timeout', '1'); //ini_set('max_input_time', '1'); ini_set('memory_limit', '256M'); //En tiedä viekö muistia mutta sekin on nyt varmuuden vuoksi ini_set('post_max_size', '128M'); //Tämä myös rajoittaa upittavaa tiedoston kokoa set_time_limit(0); //Aikaraja pois, uppimisessa saattaa kestää // Nuo ei tietenkään luonnollisesti toimi safemodessa $upload_maara = 20; //Montako tiedostoa voidaan uppia kerallaan $upload_kansio = '.'; //Kansio mihin upitaan scriptin näkökulmasta. Voidaan myös laittaa absoluuttinen polku $vittu = "http://".$_SERVER['SERVER_NAME']."/jakokansio"; //Serverin tiedot, että osoitteet tulee OK function arvo_kansio() { $kirjaimet = NULL; for ($i = 0; $i < 6; $i++) { $kirjaimet = "$kirjaimet".chr(rand(97, 122)); } return $kirjaimet; } if (isset($_POST['lahetys'])) { //Tiedostojen vastaanotto alkaa tästä $lahetettyjen_maara = 0; $yhteensa_lisatty = 0; for ($i = 0; $i < $upload_maara; $i++) { //Lasketaan montako tiedostoa on upittu if ($_FILES[$i]['name'] != NULL) { $lahetettyjen_maara++; } } if ($lahetettyjen_maara > 1) { //Jos on upittu yli 1 tiedosto, tehdään kansiotoimenpiteet do { $kansio = arvo_kansio(); } while (is_dir("$upload_kansio/$kansio")); //Arvotaan kansiolle nimi ja pyöräytetään arpa niin monta kertaa että löytyy kansio jota ei vielä ole mkdir("$upload_kansio/$kansio"); chmod("$upload_kansio/$kansio", 0777); } elseif ($lahetettyjen_maara == 0) { //Jos ei yhtään, läjäytetää virheet echo "<span style=\"color: red;\">Yrititkö edes lähettää yhtään tiedostoa? :O:O:O:PO</span>vittu\n"; exit; } for ($i = 0; $i <= $upload_maara; $i++) { //Vastaanottosilmukka $nimi = $_FILES[$i]['name']; $nimi = preg_replace('/(.{0,})(\.php|cgi$)/i', "$1", $nimi); //Pahat tiedostot pois, nekin kyllä menee läpi mutta tiedostopääte poistetaan if ($lahetettyjen_maara == 1 && $_FILES[$i]['name'] != NULL) { //Jos lähetettyjä tiedostoja on vain yksi if (file_exists("$upload_kansio/$nimi")) { //Jos sattumalta on saman niminen tiedosto jo olemassa, ei korvata sitä vaan laitetaa sen etee satunaisia kirjaimia $nimi = arvo_kansio().$nimi; } if (move_uploaded_file($_FILES[$i]['tmp_name'], "$upload_kansio/$nimi")) { //Jos uppiminen onnistuu tehään sivu ja lopetetaan skripti echo "<p style=\"font-size: 35px;\"><a href=\"$vittu/".rawurlencode($nimi)."\">$vittu/$nimi</a></p>\n"; echo "<p><input type=\"text\" name=\"asdf\" size=\"170\" value=\"$vittu/".rawurlencode($nimi)."\" /></p>\n"; echo "Tiedoston $nimi siirtaminen onnistui!"; exit; } else { //Jos ei jostain syystä onnistu @unlink($_FILES[$i]['tmp_name']); //Poistetaan temistäkin mokoma jos se siellä on echo "<span style=\"color: red;\">Tiedoston $nimi lahettaminen ei onnistunut jostakin syysta</span>\n"; exit; //lopetetaan } } if ($_FILES[$i]['name'] == NULL) { //Jos uppija ei ole laittanu järjestyksessä tiedostoja hypätään seuraavaan continue; } if (move_uploaded_file($_FILES[$i]['tmp_name'], "$upload_kansio/$kansio/$nimi")) { //Muuten siirretään tiedosto arvottuun hakemistoon echo "Tiedoston $i, $nimi lähetys onnistui!<br />\n"; $yhteensa_lisatty++; } else { //Ja jos sen siirto ei jostain syystä onnistu, poistetaan se tempistäkin jos se sinne on jäänny ja laitetaan virheilmotukset @unlink($_FILES[$i]['tmp_name']); echo "<span style=\"color: red;\">Tiedosto $nimi lähetettiin, mutta sen vastaanottamisessa ilmeni ongelmia</span><br />\n"; } } //Tässä vaiheessa on kaikki teodostot siirretty, laitetaan ilmotukset ja linkki kansioon mistä ne löytyy. echo "<h1>Yhteensä $yhteensa_lisatty tiedostoa lisätty</h1>\n"; echo "<h3>Tiedostot ovat kansiossa:</h3>\n"; echo "<p style=\"font-size: 35px;\"><a href=\"$vittu/$kansio/\">$vittu/$kansio/</a></p>\n"; } else { //Jos tullaan sivulle, ei olla painettu lähetä - nappulaa: ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data"> <?php for ($i = 0; $i < $upload_maara; $i++) { //Tämä pyörähtää niin monta kertaa kun $upload_maara sallii echo "<input type=\"file\" name=\"$i\" size=\"60\" /><br />\n"; } ?> <p><input type="submit" name="lahetys" value="Lähetä tiedostot" /></p> </form> <?php } ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.