| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Multiple file uploadraspi 31.10.03 11:08 Tällä voi uppia useampia tiedostoja
<?php // raspi 2003 // formi, jolla voi lähettää monta tiedostoa kerrallaan // testattu mozilla firebirdillä if(isset($_GET['ss'])) {show_source($_SERVER['SCRIPT_FILENAME']); die();} define("KIRJOITA_YLI", 0); // näitä ei saa vaihtaa define("UUDELLEENNIMEA", 1); /* konffi alkaa: */ $moodi = UUDELLEENNIMEA; // mitä tehdään jos upload-hakemistossa on jo saman niminen tiedosto $tiedostokoko = "5 KB"; // n MB/KB/B $kommentti = "Lähetä tämä tiedosto: "; $laheta = "Lähetä"; // submit-painike $tuetutpaatteet = "Tuetut tiedostopäätteet: "; $uploadtmp = './tmp/'; // huom, ei toimi välttämättä. $uploaddest = './upped/'; // hakemisto minne upatut tiedostot siirretään $logtransfer = 1; // kirjoitetaanko logitiedostoon et kuka lähetti mitäkin // huom: sinun pitää itse luoda tämä tiedosto ja antaa sille kaikki oikeudet (666 tai 777) // % touch UPLOADLOG.txt // % chmod a+rwx UPLOADLOG.txt $logfilename = "UPLOADLOG.txt"; $usemime = 1; // katsotaanko mime-tyyppi? (käyttää serverin omia mimetyyppejä) $acceptedmimes = array( // tuetut mime-tyypit mitä saa lähettää "text/html", "text/plain", "image/jpeg", "image/png" ); $acceptedext = array( // sallitut tiedostopäätteet "txt", "jpg", "jpeg", "png", "gif" ); $etuliite = "tiedosto"; // formissa käytettävä etuliite $oikat = '0777'; // 7=rwx $palvelimen_portti = 80; /* konffi loppu */ function getmimetype($addr, $port, $wah) { $sock = fsockopen($addr, $port); if(is_resource($sock)) { fputs($sock, "HEAD $wah HTTP/1.1\r\n"); fputs($sock, "Host: $addr\r\n"); fputs($sock, "\r\n"); $head = null; $line = null; while(!feof($sock) && $line != "\r\n") { $line = fgets($sock); if(preg_match("/^Content\-Type: (\w+\/\w+)/i", $line, $get)) $match=$get[1]; } } fclose($sock); if(isset($match)) return trim(strtolower($match)); else return -1; } // func if(!is_dir($uploadtmp) || !is_dir($uploaddest)) die("err: hakemistoa \"$uploaddest\" tai \"$uploadtmp\" ei ole!\n"); if(!is_writable($uploadtmp) || !is_writable($uploaddest)) die("err: hakemistoon \"$uploaddest\" tai \"$uploadtmp\" ei voi kirjoittaa\n"); @ini_set('upload_temp_dir', $uploadtmp); // ei mee välttämättä läpi $maxsize = $tiedostokoko; list($tiedostokoko, $tiedostoyksikko) = explode(" ", $tiedostokoko); if($tiedostokoko <= 0) die("Isompi tiedostokoko PLZ"); if($tiedostoyksikko == "KB") $tiedostokoko *= 1024; if($tiedostoyksikko == "MB") $tiedostokoko *= 1024 * 1024; if(isset($_POST) && !empty($_POST)) { if(!isset($_POST['MAX_FILE_SIZE'])) die('wtf?'); if(isset($_FILES[$etuliite]) && !empty($_FILES[$etuliite])) { // käydään tiedostopäätteet läpi $accepted = array(); foreach($_FILES[$etuliite]['name'] as $var => $val) { $fname = $val; $finfo = pathinfo($val); $val = $finfo['extension']; for($i = 0; $i <= count($acceptedmimes)-1; $i++) { if(!isset($accepted[$fname])) $accepted[$fname] = 0; if(strtolower($val) == strtolower($acceptedext[$i]) && $accepted[$fname] == 0) $accepted[$fname] = 1; } } $badfiles = null; foreach($accepted as $fname => $checked) if(!$checked) { unset($accepted[$fname]); $badfiles .= '"' . $fname . '" '; } if(count($accepted) != count($_FILES[$etuliite]['name'])) die("EXT: (" . trim($badfiles) . ") NO BONUS!"); // tiedoston koot.. $accepted = 0; $badfiles = null; foreach($_FILES[$etuliite]['tmp_name'] as $var => $val) { if(filesize($val) > 0 && filesize($val) <= $tiedostokoko) $accepted++; else $badfiles .= '"' . $_FILES[$etuliite]['name'][$var] . '" '; } if($accepted != count($_FILES[$etuliite]['tmp_name'])) die("FILESIZE: ($badfiles) NO BONUS!"); // kaikki upattu OK? $accepted=0; foreach($_FILES[$etuliite]['error'] as $var => $val) { if($val == 0) $accepted++; } if($accepted != count($_FILES[$etuliite]['error'])) die("FILE(S) NOT UPLOADED 100%! TRY AGAIN!"); // vihdoinkin itse toimitus foreach($_FILES[$etuliite]['name'] as $var => $val) { if($val{0} == '.') die("eh?"); // ei piilotettuja if(false == strpos($val, '.')) die('hm?'); // ei ilman pistettä if(file_exists($uploaddest . basename($val)) && $moodi == UUDELLEENNIMEA) { $uus = time() ."_$val"; // jos unixtimestampilla oli jo file niin käytetään sitten microtimeä :) if(file_exists($uploaddest . basename($uus))) { $uus = microtime() . "_$val"; } $val = $uus; } // karsitaan turhat merkit pois tiedostonimestä $val = preg_replace("/[^äöå\w\d\-\ \(\)\[\]\&\%\+\?\!\.\=\,_\^\$\~\'\"\}\{\*\:\;\<\>\|\§\´\`]/i", "", $val); $tied = $uploaddest . trim(strtolower(basename($val))); if (move_uploaded_file($_FILES[$etuliite]['tmp_name'][$var], $tied)) { chmod($tied, 0777);// chmodataan kaikki oikat if($usemime == 1) { // tarkistetaan MIME-tyyppi $mime = getmimetype($_SERVER['HTTP_HOST'], $palvelimen_portti, $tied); $accepted = 0; for($i = 0; $i <= count($acceptedmimes)-1; $i++) { if($mime == strtolower($acceptedmimes[$i])) $accepted++; } if($accepted == 0) { unlink($tied); die("MIME: NO BONUS! $tied ($mime)"); } } // mime=1 chgrp($tied, filegroup($_SERVER['SCRIPT_FILENAME'])); // muutetaan sama grouppi // muutetaan sama owneri (tämä ei yleensä toimi, koska PHP:tä ajaa yleensä "www" tms käyttäjällä) @chown($tied, fileowner($_SERVER['SCRIPT_FILENAME'])); // mutta aina voi yrittää.. chmod($tied, octdec($oikat)); // chmodataan kaikki oikat käyttäjän haluamiks // logifile if($logtransfer && file_exists($logfilename) && is_writable($logfilename)) { if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { $IP=$_SERVER["HTTP_X_FORWARDED_FOR"]; $proxy=$_SERVER["REMOTE_ADDR"]; } elseif(isset($_SERVER["HTTP_CLIENT_IP"])) $IP=$_SERVER["HTTP_CLIENT_IP"]; else $IP=$_SERVER["REMOTE_ADDR"]; if($IP == 'unknown') $IP = $proxy; $hosti = @gethostbyaddr($IP); $portti = $_SERVER['REMOTE_PORT']; $brow = $_SERVER['HTTP_USER_AGENT']; $fp = fopen($logfilename, 'a'); $rivi = date("d.m.Y H:i:s") . "\t" . basename($tied) . "\t$hosti ($IP:$portti)\t$brow"; fputs($fp, $rivi . "\n"); fclose($fp); } } else { die("ERROR!"); } } // foreach header("Location: {$_SERVER['PHP_SELF']}?ok"); // uudelleenohjaus die(); } else { /* mitään ei upattu */ echo "et sitten upannu mitään!"; } // else die(); } if(isset($_GET['ok'])) { echo "Tiedosto(t) lähetetty onnistuneesti! <a href=\"$uploaddest\">Selaa</a>.<br />\n"; // die(); } $paatelista = null; foreach($acceptedext as $paate) $paatelista .= "*.$paate, "; $paatelista = substr($paatelista, 0, -2); // formi: echo "<form enctype=\"multipart/form-data\" action=\"{$_SERVER['PHP_SELF']}\" method=\"POST\">\n"; echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$tiedostokoko\">\n"; echo " $tuetutpaatteet $paatelista <br />\n"; echo " $kommentti [MAX: $maxsize ($tiedostokoko B)]<br />\n"; echo " <input name=\"{$etuliite}[tied1]\" type=\"file\" /><br />\n"; // oleellinen: [tied1] echo " <input name=\"{$etuliite}[tied2]\" type=\"file\" /><br />\n"; // oleellinen: [tied2] //echo " <input name=\"{$etuliite}[foobar]\" type=\"file\" /><br />\n"; // jne //echo " <input name=\"{$etuliite}[xyz]\" type=\"file\" /><br />\n"; // jne echo " <input type=\"submit\" value=\"$laheta\" />\n"; echo "</form>\n"; ?> lapponia 00:04 5.8.04 @chown($tied, fileowner($_SERVER['SCRIPT_FILENAME'])); // mutta aina voi yrittää.. Turha laitella. Jos ei toimi ilman @-merkkiä, niin parasta poistaa koko rivi.... D4_B34M 20:47 18.3.05 Hmm mulla pitäs kaikki asetukset olla ok.. ja kun yritän upata jotain noista sallituista tiedostoformateista niin tulee EXT: ("") NO BONUS! Uusin php löytyy asennetuna ja pitäs toimii kyllä... sllz 11:49 19.7.05 Mulle tuli sama juttu toi EXT no bonus homma mylvari 18:23 22.12.05 mulle tuli sama kuin noilla muilla mistä tämä johtuu? katket 20:38 16.6.06 Mitä jos ei tiedä kuinka monta tiedostoa haluaa upata? Jos laittaa tällä vain yhden niin tulee tuo ext no bonus. Gif-tiedostoja ei myöskään anna upata. Eli noita etuliite tied1 rivejähän voi lisätä mutta mitäs sitten kun haluaa upata vähemmän kun on rivejä? |
![]() Haku
|