| 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: 15 let
|
|||
0