Autor | Zpráva | ||
---|---|---|---|
Peet Profil |
#1 · Zasláno: 2. 1. 2012, 14:04:07
Dobrý den, je mi to trapně ale už nevim jak jinak...
html: <input type="file" name="obrazek">
tento obrazek potrebuji nahrat do slozky img a velikosti obrazku musi byt 90x65 zkoušel jsem už dost věcí ale zaboha se mi to nepovedlo a bylo to takové zmatené jsem zvědavý jak to vyřeší lidé zde. abych veděl jestli to jde i jinak (lépe) než jak jsem to zkoušel já a neúspěšně. Předem děkuji |
||
Fisak Profil |
#2 · Zasláno: 2. 1. 2012, 14:29:41
soubor config.php
<?php // MIME TYPES SOUBOR�, KTER� JE POVOLENO ULO�IT NA SERVER // ZDE MَETE P�IDAT DAL�� MIME TYPES // ODD�LUJTE SVISLOU �AROU, ALE NED�VEJTE JI �PLN� NA ZA��TEK NEBO KONEC SEZNAMU $mime_types = 'application/pdf|application/zip|application/x-zip-compressed|text/plain|image/jpeg|image/pjpeg|image/gif|image/png|text/plain'; // EXTENZE SOUBOR�, KTER� JE POVOLENO ULO�IT NA SERVER // ZDE MU�ETE P�IDAT DAL�� EXTENZE // ODD�LUJTE SVISLOU �AROU, ALE NED�VEJTE JI �PLN� NA ZA��TEK NEBO KONEC SEZNAMU $extensions = 'pdf|zip|text|txt|jpg|jpeg|gif|png|txt|text'; // OMEZEN� VELIKOSTI UPLOADNUT�HO SOUBORU. // V�CE NE�LI 5MB PRAVD�PODOBN� NEBUDE FUNGOVAT. $max_att = 5242880 ; // 5MB MAX /* SERVER PRAVD�PODOBN� BUDE M�T OMEZEN� VELIKOSTI NA 2MB. POT�EBUJETE-LI ZM�NIT MAXIM�LN� VELIKOST UPLOADNUT�HO SOUBORU (ZDE 5MB) PROVE�TE TYTO ZM�NY V PHP.INI file_uploads = On upload_max_filesize = 5242880 post_max_filesize = 5242880 NEM�TE-LI P��STUP K PHP.INI, ZKUSTE ODKOMENTOVAT A UPRAVIT TYTO ��DKY V SOUBORU .HTACCESS V HLAVN� SLO�CE SKRIPTU NA PO�ADOVANOU HODNOTU (ZDE 5MB). TOTO NEBUDE NA V�ECH SERVERECH FUNGOVAT A MO�N� BUDE HL�SIT CHYBY. php_value post_max_filesize 5242880 php_value upload_max_filesize 5242880 */ // CESTA NA SLO�KU S UPLOADNUT�MI SOUBORY. $up_dir = "./ulozene/"; // DAL�� ZM�NY NEJSOU ZAPOT�EB� $PHP_SELF = $_SERVER['PHP_SELF']; if(get_magic_quotes_gpc()) { strip_slashes($_GET); strip_slashes($_POST); strip_slashes($_COOKIES); } function & strip_slashes (&$str) { if(is_array($str)) { while (list($key, $val) = each ($str)) { $str[$key] = strip_slashes ($val); } } else { $str = stripslashes ($str); } return $str; } ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>Nahrání souboru</title> </head> <body style="background-color:white; color:black"> <h3>Nahrání souboru</h3> <?php if (substr(phpversion(),0,3) <= '4.1') exit("<div style='color:red'>Tento skript vyžaduje PHP 4.1 nebo pozdější</div>"); include('config.php'); $mt = eregi_replace('\|', ', ', $mime_types); $ex = eregi_replace('\|', ', ', $extensions); $mb = $max_att / 1048576; ?> <form name="a" action='<?php echo "$PHP_SELF" ?>' method="post" enctype="multipart/form-data"> <ul> <li>Max. velikost <?php echo number_format($max_att,0,'.',',') ?> bajtů (<?php echo number_format($mb,0,'.',',') ?> MB). <li>Jméno souboru smí obsahovat pouze 1 tečku. <li>Povolené extenze jsou <?php echo "\"$ex\"" ?>. <li>Povolené MIME types jsou <?php echo "\"$mt\"" ?>. </ul> <input type="file" name="fileatt"> <p><input class="butt" type="submit" name="upload_submit" value=" Uložit "> <input class="butt" type="reset" value=" Zrušit "></p> </form> <?php if(isset($_POST['upload_submit'])) { //set_time_limit(0); //// POVOLIT NEOMEZENÝ ČAS $valid = true; $fileatt_size = $_FILES['fileatt']['size']; $fileatt_type = $_FILES['fileatt']['type']; $fileatt_name = $_FILES['fileatt']['name']; $fileatt_tmp = $_FILES['fileatt']['tmp_name']; //// kontrola velikost souboru if($fileatt_size > $max_att) { $valid = false; $err_msg .= '<li>Soubr je větší nežli povolená velikost ' . number_format($max_att,0,'.',',') . ' bajtů. Skutečná velikost ' . number_format($fileatt_size,0,'.',',') . ' bajtů.'; } //// kontrola typu souboru $regexp = "^" . $mime_types . "$"; if(!eregi($regexp,$fileatt_type)) { $valid = false; $mt = eregi_replace('\|', ', ', $mime_types); $err_msg .= "<li>Nepovolený MIME type \"$fileatt_type\". Povolené MIME type jsou: $mt" . '.'; } //// kontrola délky extenze $dot_pos = strrpos($fileatt_name,'.'); $ext_len = strlen($fileatt_name) - ($dot_pos); if($ext_len != 3 && $ext_len != 4) { $valid = false; $err_msg .= "<li>Jméno souboru \"$fileatt_name\" má extenzi $ext_len znaků dlouhou. Povolené délky jsou 3 nebo 4 znaky."; } //// kontrola extenze $ext = substr($fileatt_name,$dot_pos + 1); $regexp = "^". $extensions ."$"; if(!eregi($regexp,$ext)) { $valid = false; $ex = eregi_replace('\|', ', ', $extensions); $err_msg .= "<li>Jméno souboru \"$fileatt_name\" má enxtenzi \"$ext\", která není povolená. Povolené extenze jsou $ex. Soubor smí mít pouze 1 extenzi."; } //// kontrola jména souboru if($dot_pos === false || $dot_pos < 1) { $valid = false; $err_msg .= "<li>Jméno souboru \"$fileatt_name\" je příliš krátké nebo neobsahuje tečku. Před tečkou musí být aspoň 1 znak."; } if (!file_exists($up_dir)) { $oldumask = umask(0); if (!mkDir($up_dir,0777)) { $valid = false; echo "<p style='color:red'>Nezdařilo se vytvořit složku \"$up_dir\".</p>"; } umask($oldumask); } $dest = $up_dir . $fileatt_name; if($valid) { if(!move_uploaded_file($fileatt_tmp,$dest)) { $valid = false; $err_msg .= "<li>Soubor \"$fileatt_name\" se nedařilo uložit."; } else { echo "<p style='font-weight:bold'>Soubor byl úspěšně uložen " , date ("d.m.y H:i:s"), "</p>"; } } if(!$valid) echo "<div style='color:red'>Při ukládání souboru \"$fileatt_name\" došlo k chybě.<ul>$err_msg</ul></div>"; } ?> </body> </html> |
||
Peet Profil |
#3 · Zasláno: 2. 1. 2012, 20:24:55
Děkuji tento skript si schovám a projdu jej až po dalších mnoha učeních se PHP :))))
Děkuji |
||
helpik.JPW Profil |
#4 · Zasláno: 4. 1. 2012, 15:42:40
Já používám na pokusné uploady něco takového. Změnám vždy jen
$uploaddir
if ($chyba == "") { //$soubor = $uploaddir . basename($_FILES['soubor']['name']); //$uploaddir = '../deska/'; // // sanatize file name // - remove extra spaces/convert to "", // - remove non 0-9a-Z._- characters, // - remove leading/trailing spaces // - remove * and ?/convert to "" $safe_filename = preg_replace( array("/\s+/", "/[^-\.\w]+/"), array("", ""), trim($_FILES['soubor']['name'])); $safe_filename = str_replace("*", "", $safe_filename); $safe_filename = str_replace("?", "", $safe_filename); $pripona = strrchr($_FILES['soubor']['name'], "."); $predpona = basename($safe_filename) . "-" . substr(md5(uniqid("")), 0, 3); $soubor = $predpona . $pripona; if (move_uploaded_file($_FILES['soubor']['tmp_name'], "../deska/" . $soubor)) { chmod("../deska/" . $soubor, 0777); mysql_query("insert into deska (nazev,soubor,vlozeno) values ('$nazev','$soubor'," . time() . ")"); echo "<p style=\"background:green; border:1px solid white; padding:10px; margin:20px 0px; font-weight: bold;\">OK, soubor byl úspěšně nahrán!</p>\n"; // TODO - mail ("spravce@muj_server.cz", "Upload souboru $nazev","Na server byl nahrán soubor /data/$soubor\n","From: system@muj_server.cz\nX-web: http://www.muj_server.cz/system/upload.php"); // TODO "ADMIN DEBUG - proběhl upload souboru (deska) - uspesny upload\n"; } else { echo "Possible file upload attack!\n"; // TODO "ADMIN DEBUG - proběhl upload souboru (deska) - ERROR - nespecifikovana chyba\n"; } // TODO "ADMIN DEBUG - proběhl upload souboru (deska)\n"; //print_r($_FILES); unset($akce); } Nejsem žádný PHP guru a podle toho asi ten skript i vypadá. Nicméně vnitřek jsem našel v dokumentaci php. Solidárně se slučí dodat, že: - ve jméně souboru ($soubor) vynechává některé znaky (á,ů,é,...) - písmeno vynechá - ve jméně souboru ($soubor) se v místě mezery nezapíše "-" - v názvu souboru ($nazev) to píše občas bud nečeské nebo znaky bez znaků nahoře Jinak je vše v pořádku. Pokdu víte jak poradit, můžete napsat také ... nebo mám založit nové vlákno? Asi by to bylo lepší. |
||
Alphard Profil |
#5 · Zasláno: 4. 1. 2012, 17:02:24
[#4] helpik.JPW
Poradit s čím? Jediný výskyt $nazev je při zapisování db, nevíme, kde se bere. K ošetření jména jde použít třeba http://php.vrana.cz/vytvoreni-pratelskeho-url.php, jen bych pomlčku zaměnil za podtržítko. Občas se zde objeví dotaz, proč používat frameworky, takže v Nette na původní problém stačí $img_HP = $data['logo_hp']->toImage(); $img_HP->resize(964, 209, Image::ENLARGE | Image::STRETCH); $img_HP->save($lD.$lF.'_HP.jpg', 85, Image::JPEG); |
||
helpik.JPW Profil |
#6 · Zasláno: 5. 1. 2012, 14:15:08 · Upravil/a: helpik.JPW
Alphard:
Joj to jsem nedopsal, máš pravdu. „$nazev je při zapisování db, nevíme, kde se bere“ Máš pravdu. $nazev je už upravená POST proměná. Uživatel zde zadává název souboru. Ten poté přejde přes funkci: function upravNazev($vstup) { // řščřžýáí21 _- dasf?:<>^#@ $vystup = strtolower($vstup); $vystup = trim($vystup); $vystup = str_replace(" ", " ", $vystup); $vystup = str_replace("+", "", $vystup); $vystup = str_replace("*", "", $vystup); $vystup = str_replace("\'", "", $vystup); $vystup = str_replace("\"", "", $vystup); $vystup = str_replace("\\", "", $vystup); $vystup = str_replace("/", "", $vystup); $vystup = str_replace("!", "", $vystup); $vystup = str_replace("%", "", $vystup); $vystup = str_replace("&", "", $vystup); $vystup = str_replace("?", "", $vystup); $vystup = str_replace("<", "", $vystup); $vystup = str_replace(">", "", $vystup); $vystup = str_replace("#", "", $vystup); $vystup = str_replace("$", "", $vystup); $vystup = str_replace(":", "", $vystup); $vystup = str_replace("@", "", $vystup); $vystup = str_replace("^", "", $vystup); return($vystup); } tedy: $nazev = upravNazev($_POST['nazev']); $nazev = název souboru, který zadá uživatel, který se upraví skriptem výše. Některé české znaky píše špatně (viz předešlý můj post) $soubor = generované jméno souboru (upravovaní $safe_filename??? + "-" + 3x náhodný znak + odtržená přípona). Některé znaky vynechává=> Chyby viz předešlý můj post) // z PHP dokumentace - i když je funkční a účel splňuje, vynechává a má zobrazující se chyby - viz výše //$soubor = $uploaddir . basename($_FILES['soubor']['name']); //$uploaddir = '../deska/'; // // sanatize file name // - remove extra spaces/convert to "", // - remove non 0-9a-Z._- characters, // - remove leading/trailing spaces // - remove * and ?/convert to "" $safe_filename = preg_replace( array("/\s+/", "/[^-\.\w]+/"), array("", ""), trim($_FILES['soubor']['name'])); $safe_filename = str_replace("*", "", $safe_filename); $safe_filename = str_replace("?", "", $safe_filename); $pripona = strrchr($_FILES['soubor']['name'], "."); $predpona = basename($safe_filename) . "-" . substr(md5(uniqid("")), 0, 3); $soubor = $predpona . $pripona; |
||
SeparateSK Profil |
#7 · Zasláno: 5. 1. 2012, 19:47:20 · Upravil/a: SeparateSK
Tu je script na tvoje poziadavky - uklada uploadnuty obrazok do velkosti 90x65
Tu je script: <form method="post" enctype="multipart/form-data"> Obrazok (iba jpg a png subory) : <input type="file" name="s"> <input type="submit" name="submit" value="Nahraj obrazok"> </form> <?php function obrazok($suborTMP,$suborNAME,$sirka,$vyska,$mimetyp) { header('Content-Type: image/jpeg'); list($sirka_original,$vyska_original) = getimagesize($suborTMP); $obrazok_p = imagecreatetruecolor($sirka, $vyska); if($mimetyp=="image/jpeg"||$mimetyp=="image/jpg")$obrazok = imagecreatefromjpeg($suborTMP); else if($mimetyp=="image/png")$obrazok = imagecreatefrompng($suborTMP); imagecopyresampled($obrazok_p, $obrazok, 0, 0, 0, 0, $sirka, $vyska, $sirka_original, $vyska_original); if($mimetyp=="image/jpeg"||$mimetyp=="image/jpg") imagejpeg($obrazok_p, "$suborNAME.jpg", 100); if($mimetyp=="image/png") imagejpeg($obrazok_p, "$suborNAME.jpg", 100); header('Content-Type: text/html'); } if($_POST[submit]){ $suborType=$_FILES[s][type]; $suborName=$_FILES[s][name]; $suborName=str_replace(" ","_",$subor); //neni nutne ale doporucuje sa, ak je v nazve obrazku medzera $suborTMP=$_FILES[s][tmp_name]; if($suborType=="image/jpeg"||$suborType=="image/jpg"||$suborType=="image/png") { obrazok($suborTMP,$suborName,90,65,$suborType); } } ?> $suborTMP - $_FILES[s][tmp_name]; $suborName - $_FILES[s][name]; alebo hocijak ako chces ulozeny obrazok pomenovat $sirka - 90 $vyska - 65 $mimetyp - rozpoznanie jpeg a png ($_FILES[s][type];) |
||
Časová prodleva: 12 let
|
0