Форум по Роботика
За форума => Форум на Web-мастъра => Темата е започната от: Borislav в Юли 31, 2007, 09:13:09 am
-
Здравейте на всички!
Искам да направя Upload-система за файлове с определен тип разширение! Не е необходима База данни, а само папка, в която да се съхраняват файловете на сървъра.
От седмица-две вече се мъча да намеря такъв скрипт, но не успявам... Пробвам различни, но те са или само с upload на снимки, или имат някакви бъгове! Моля тези, които разбират повече от мен да помогнат!
Предварително мерси!
-
Ето:
<?php
// Максимална големина на файла за качване (сега е 2 ГБ)
$MAX_SIZE = 268435456;
$FILE_EXTS = array('.zip','.jpg','.png','.gif','.doc','.avi','.sub');
// Възможност за триене на качени файлове. При TRUE - може да се трият, при FALSE - не.
$DELETABLE = false;
$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";
if (!is_dir("files")) {
if (!mkdir($upload_dir))
die ("upload_files директорията не съществува и създаването и е невъзможно.");
if (!chmod($upload_dir,0755))
die ("change permission to 755 failed.");
}
if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]\n");
fclose($resource);
if (strpos($_REQUEST[del],"/.")>0);
else if (strpos($_REQUEST[del],$upload_dir) === false);
else if (substr($_REQUEST[del],0,6)==$upload_dir) {
unlink($_REQUEST[del]);
print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']."\n");
fclose($resource);
$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));
// Ако променята макс. големина на качващия се файл променети и по-долното съобщение.
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "Този файл е над 2 GB.";
else if (!in_array($file_ext, $FILE_EXTS))
$message = "Извинете, $file_name($file_type) не може да се качи(файла не е поддържан).";
else
$message = do_upload($upload_dir, $upload_url);
print "<script>window.location.href='$url_this?message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
$message = "Невалиден формат.";
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
if(!is_dir($file) && !is_link($file)) {
$filelist .= "<a href='$upload_dir$file'>".$file."</a> - URL: <b>$upload_url$file</b>";
if ($DELETABLE)
$filelist .= " Качен на ".date("d-m H:i", filemtime($upload_dir.$file))
."";
$filelist .= " <a style='text-decoration:none; font-weight:bold' href='?del=$upload_dir".urlencode($file)."' title='delete'>x</a>";
$filelist .="<br>";
}
}
function do_upload($upload_dir, $upload_url) {
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;
if ( $file_name =="") {
$message = "Грешно име";
return $message;
}
$result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0777))
$message = "change permission to 777 failed.";
else
$message = ($result)?"$file_name е качен успешно." :
"Има грешка с избрания файл.";
return $message;
}
?>
<html>
<head>
<title>Форма за качване</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<br><br>
<center>
<font color=red><?=$_REQUEST[message]?></font>
<br>
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
Качи файл <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="Upload">
</form>
<br><b><u>Качени файлове:</b></u><br><br>
По-долу е индексирането на файлове:
<?=$filelist?><br>Този скрипт е направен от
<a style="text-decoration:none" href="http://deam0n.hit.bg">deam0n</a>
</sup></small>
</center>
П.С. Не съм го правил аз, но го ползвам и е безгрешен. :arrow:
-
Трябва ли да се създава отделна папка за файловете?
-
ПЪРВО: Има една грешка!:
<font color=red><?=$_REQUEST[message]?></font> Това трябва да е:
<font color=red><? echo $_REQUEST[message] ?></font>
ВТОРО: Бориславе, нагласи кои разширения ще качваш вмомента са: '.zip','.jpg','.png','.gif','.doc','.avi','.sub' Отделяъ ги със запетая и им слагай Апострофи!
ТРЕТО: папката която трябва да направиш там където е файла е: files със cdmod(мисля че беше) 777
Поздрави и Успех със тая Не много хубава система за Ъплоад.
-
И последен въпрос... Не искам големината да е 2 GB, а да е примерно, 50 МВ... Как трябва да поправя цифрите тук:
<?php
// Максимална големина на файла за качване (сега е 2 ГБ)
$MAX_SIZE = 268435456;
-
Ами това за големината е елементарно:
1 kb = 1024 b
1 mb = 1024 kb
1 gb = 1024 mb
=> 2 gb = 1024 x 2 mb - 1024 x 4 kb и т.н.
т.е. ако искаш да е 10 kb слагаш 1024 x 10 = 10240 b
По тази логика 50 mb = 52428800 b
П.С. Сигурен съм, че разбра; единственото условие е големината да е зададена в байти (b)
Ето за улеснение един калкулатор :
<title>Провери един BYTES на колко (KB , MB , GB) e равно и обратното</title>
<body>
<form name="bandwidth">
<p><input type="text" name="original" size="20" value=> <select size="1" name="units">
<option value="Bytes">Bytes</option>
<option value="Kb">Kb</option>
<option value="Mb">Mb</option>
<option value="Gb">Gb</option>
</select> <input type="button" value="Провери" name="B1" onClick="calculate()"></p>
</form>
<p>
<script>
var bytevalue=0
function calculate(){
var invalue=document.bandwidth.original.value
var selectunit=document.bandwidth.units.options[document.bandwidth.units.selectedIndex].value
if (selectunit=="Bytes")
bytevalue=invalue
else if (selectunit=="Kb")
bytevalue=invalue*1024
else if (selectunit=="Mb")
bytevalue=invalue*1024*1024
else if (selectunit=="Gb")
bytevalue=invalue*1024*1024*1024
alert (invalue+" "+selectunit+" са равни на:\n\n- "+bytevalue+" Bytes\n- "+Math.round(bytevalue/1024)+" Kb\n- "+Math.round(bytevalue/1024/1024)+" Mb\n- "+Math.round(bytevalue/1024/1024/1024)+" Gb\n")
}
</script>
</body>
-
Вярно бе, как не се сетих... :D :oops: Не ми дойде на акъла да сметна байтовете...
-
Благодаря на всички!
Вече можете да изпробвате новата Upload система (http://www.robotics-bg.com/upload/) на портала! :)
-
Да ни е честита 8)
-
Браво :)