Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Multi upload

Sivun loppuun

Juhis [24.02.2004 15:15:10]

#

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

stere [25.02.2004 18:36:27]

#

KOPIOITU MUREAKUHASTA SAATANAN VINTIÖ!

ajv [25.02.2004 19:57:42]

#

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.

Juhis [25.02.2004 20:05:21]

#

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)

Daiz [02.11.2004 21:43:04]

#

Tohonhan vois jotenki säätää et mitkä kuvatyypit kelpaa. Kaikki rupee vaa jotai viruksii uppii tollaselle sit :/

Smappa [16.05.2005 18:03:14]

#

Mä ainaki testaan tota Adminin sisällä ni ei tarvi käyttää FTP:tä :D

Smappa [16.05.2005 18:10:44]

#

Mites tää selvitetään: Warning: mkdir(upload/): Permission denied in /mbnet/s/smappa/upload.php

antti94 [21.06.2005 21:43:13]

#

Saisko tuohon jonkun ip-kirjauksen?

thuge94 [29.06.2005 12:45:35]

#

Sais ku laitat kirjottamaan ipn txt-filuun. Ja sit näytät sen filellä.

antti94 [09.07.2005 10:28:50]

#

Voisko joku viisaampi ottaa tuon maximikoon pois?Kun minä yritän niin pukkaa vaan erroria.

Matso [08.08.2005 19:42:32]

#

laita maksimikooks 99999999999999999999999999999999999999 ni eiköhän ala mahtua riittävän isoja filejä

hmmp [22.08.2005 21:20:37]

#

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.

Tontttu [18.01.2006 16:32:10]

#

miks hitossa tää heittää mut jonnekki rajamäen metsänkävijöiden sivulle ku painan upload nappii!? eikä tiedosto uppaannu.. en oo muokannu mitenkää.

morris [27.02.2006 19:02:35]

#

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ä.

Damsarerael [17.04.2008 18:23:21]

#

Mitehköhän tosta sais sellasen että se laittas sitten sen kuvan jollekin sivulle?

solonen [05.03.2009 16:42:00]

#

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();

?>

idefix [21.05.2009 23:48:18]

#

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ä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta