Varsin yksinkertainen esimerkki että miten voidaan tallentaa useita tiedostoja kerralla serverille.
Tuosta on sitten helppo lähteä tekemään mitä tahansa. Vähän regexpiä kehiin niin voi parseroida tiedostotyypit jnejne
Varsin yksinkertainen esimerkki.
<?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; ?>
KOPIOITU MUREAKUHASTA SAATANAN VINTIÖ!
No joo... Miks for-silmukasta hypätään pois, jos yksikin tiedosto on liian iso? Vähänkö ottaa päähän, jos on hakenu kymmenen tiedoston tiedot ja sit eka on liian iso, ni se ei lataa yhtäkään tiedostoa. continue parempi? Ja sit nyt vois ehkä kertoo, et mikä tiedosto on liian iso ja mitkä tiedostot onnnistui ladata yms. No, toisaalta eipä noita ole vaikea lisätä, mutta kuitenkin.
Voihan siinä olla vaikka mitä, ei tuo koodi tuollaisenaan toimi missää. Tai siis tottakai toimii, mutta ei ole sopiva kaikkiin käyttötarkoituksiin.
Siitä vaan haxaamaan sitä omiin tarkoituksiin sopivaksi. Toi on vain tuollainen suuntaa antava monen tiedoston upitussysteemi(tm)
Tohonhan vois jotenki säätää et mitkä kuvatyypit kelpaa. Kaikki rupee vaa jotai viruksii uppii tollaselle sit :/
Mä ainaki testaan tota Adminin sisällä ni ei tarvi käyttää FTP:tä :D
Mites tää selvitetään: Warning: mkdir(upload/): Permission denied in /mbnet/s/smappa/upload.php
Saisko tuohon jonkun ip-kirjauksen?
Sais ku laitat kirjottamaan ipn txt-filuun. Ja sit näytät sen filellä.
Voisko joku viisaampi ottaa tuon maximikoon pois?Kun minä yritän niin pukkaa vaan erroria.
laita maksimikooks 99999999999999999999999999999999999999 ni eiköhän ala mahtua riittävän isoja filejä
lainaus:
Mites tää selvitetään: Warning: mkdir(upload/): Permission denied in /mbnet/s/smappa/upload.php
Taitaa olla safe_mode päällä MBnetissä. Se aiheuttaa ongelmia hakemistojen UID:n (=omistajan) kanssa, kun luot hakemiston mkdir():llä ja yrität laittaa sinne tiedostoja.
Itse juuri pähkäilin tämän kanssa, kts. https://www.ohjelmointiputka.net/keskustelu/9711-safe-mode-ja-hakemiston-uid-n-vaihtaminen-php-perl
Päädyin luomaan hakemistot PHP:n FTP-funktioiden kautta.
miks hitossa tää heittää mut jonnekki rajamäen metsänkävijöiden sivulle ku painan upload nappii!? eikä tiedosto uppaannu.. en oo muokannu mitenkää.
mitenköhän tässä sais säädettyä sillee että se nimeis sen sinne upload hakemistoo image_$id tyyliin... $id tässä on toki määritetty etukäteen... haen tässä siis sitä että se ei nimeiäisi sitä sinne määränpäähänsä sillä alkuperäisellä nimellään vaan uudella image_$id nimellä.
Mitehköhän tosta sais sellasen että se laittas sitten sen kuvan jollekin sivulle?
Tulipa muokattua tuota koodia pikkaisen sillain, että se piilottaa kaikki muut paitsi ensimmäisen, ja nappia painamalla se antaa seuraavan upload kohdan :P ja kuvan saa osoitteesta http://www.iconfinder.net/iconlib/blandet/blandet/blandet/arrow_undo.png
tai etsimällä iconfinder.net:tistä hakusanalla "arrow undo"
<?php ob_start(); ?> <script language="javascript"> function toggleDisplay(e){ element = document.getElementById(e).style; element.display == 'none' ? element.display = 'block' : element.display='none'; element = document.getElementById("divi"+e).style; element.display='none'; swapImage } </script> <?php /* Multi upload ;) Käytä miten lystäät. 15:12 24.2.2004 */ define("MAX_COUNT", 99); // määritetään että kuinka monta tiedostoa voidaan kerralla tallentaa serverille define("UPLOAD_DIRECTORY", "valokuvat/"); // määritellään tiedostojen uusi koti, eli minne tiedostot upitetaan define("MAX_SIZE", 99999999); // 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; } while(file_exists(UPLOAD_DIRECTORY.$_FILES['file'.$i]['name'])) {$_FILES['file'.$i]['name']="$k".$_FILES['file'.$i]['name']; $k++; } move_uploaded_file($_FILES['file'.$i]['tmp_name'], UPLOAD_DIRECTORY.$_FILES['file'.$i]['name']); // tallennetaan tiedosto serverille } } ?> <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++) { if($i<10)$nimi="0$i"; else $nimi = $i; echo "<b>$nimi</b> <input type=\"file\" name=\"file".$i."\" size=\"75\">\n"; if($i!=MAX_COUNT) echo "<span id='divi$i'><a href=\"javascript:toggleDisplay('$i')\"><img src='arrow_undo.png' border=0 alt='Lisää uusi' title='Lisää uusi'></a>"; echo "</span>"; if($i==1) echo "<div>"; echo "</div>\n<div id='$i' style='display:none'>\n"; } ?> </div><br><input type="submit" value="upload"></form> <?php ob_end_flush(); ?>
solonen kirjoitti:
Tulipa muokattua tuota koodia pikkaisen sillain, että se piilottaa kaikki muut paitsi ensimmäisen, ja nappia painamalla se antaa seuraavan upload kohdan :P ja kuvan saa osoitteesta http://www.iconfinder.net/iconlib/blandet/
blandet/blandet/arrow_undo.png
tai etsimällä iconfinder.net:tistä hakusanalla "arrow undo"
Mitenkä tuohon saisi vielä ohjauksen kiitos.php sivulle? en ole siis php ammattilainen, mutta tuo uploadaus tulee tarpeeseen ja muuten sainkin jo toimii mutta tuo kiitos sivu olisi vielä hyvä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.