Автор Тема: Молба за помощ по PHP!  (Прочетена 24026 пъти)

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Молба за помощ по PHP!
« -: Юли 31, 2007, 09:13:09 am »
Здравейте на всички!
Искам да направя Upload-система за файлове с определен тип разширение! Не е необходима База данни, а само папка, в която да се съхраняват файловете на сървъра.
От седмица-две вече се мъча да намеря такъв скрипт, но не успявам... Пробвам различни, но те са или само с upload на снимки, или имат някакви бъгове! Моля тези, които разбират повече от мен да помогнат!
Предварително мерси!
Роботиката не е хоби - тя е начин на живот!

kanadeca

  • Робо-Новак
  • *****
  • Публикации: 32
    • Профил
Молба за помощ по PHP!
« Отговор #1 -: Юли 31, 2007, 10:11:58 am »
Ето:

<?php 
// Максимална големина на файла за качване &#40;сега е 2 ГБ&#41; 
$MAX_SIZE 268435456


$FILE_EXTS = array&#40;'.zip','.jpg','.png','.gif','.doc','.avi','.sub'&#41;; 


// Възможност за триене на качени файлове. При TRUE - може да се трият, при FALSE - не. 
$DELETABLE false



$site_name $_SERVER['HTTP_HOST'&#93;; 
$url_dir "http&#58;//".$_SERVER['HTTP_HOST'&#93;.dirname&#40;$_SERVER['PHP_SELF'&#93;&#41;; 
$url_this "http&#58;//".$_SERVER['HTTP_HOST'&#93;.$_SERVER['PHP_SELF'&#93;; 

$upload_dir "files/"
$upload_url $url_dir."/files/"
$message =""


if &
#40;!is_dir&#40;"files"&#41;&#41; &#123; 
if &#40;!mkdir&#40;$upload_dir&#41;&#41; 
die &#40;"upload_files директорията не съществува и създаването и е невъзможно."&#41;; 
if &#40;!chmod&#40;$upload_dir,0755&#41;&#41; 
die &#40;"change permission to 755 failed."&#41;; 
&#125; 


if &#40;$_REQUEST[del&#93; && $DELETABLE&#41; &#123; 
$resource fopen&#40;"log.txt","a"&#41;; 
fwrite&#40;$resource,date&#40;"Ymd h&#58;i&#58;s"&#41;."DELETE - $_SERVER[REMOTE_ADDR&#93;"."$_REQUEST[del&#93;\n"&#41;; 
fclose&#40;$resource&#41;; 

if &#40;strpos&#40;$_REQUEST[del&#93;,"/."&#41;>0&#41;; 
else if &#40;strpos&#40;$_REQUEST[del&#93;,$upload_dir&#41; === false&#41;; 
else if &#40;substr&#40;$_REQUEST[del&#93;,0,6&#41;==$upload_dir&#41; &#123; 
unlink&#40;$_REQUEST[del&#93;&#41;; 
print "<script>window.location.href='$url_this?message=deleted successfully'</script>"
&
#125; 
&#125; 
else if &#40;$_FILES['userfile'&#93;&#41; &#123; 
$resource fopen&#40;"log.txt","a"&#41;; 
fwrite&#40;$resource,date&#40;"Ymd h&#58;i&#58;s"&#41;."UPLOAD - $_SERVER[REMOTE_ADDR&#93;" 
.$_FILES['userfile'&#93;['name'&#93;." " 
.$_FILES['userfile'&#93;['type'&#93;."\n"&#41;; 
fclose&#40;$resource&#41;; 

$file_type $_FILES['userfile'&#93;['type'&#93;; 
$file_name $_FILES['userfile'&#93;['name'&#93;; 
$file_ext strtolower&#40;substr&#40;$file_name,strrpos&#40;$file_name,"."&#41;&#41;&#41;; 

// Ако променята макс. големина на качващия се файл променети и по-долното съобщение. 
if &#40; $_FILES['userfile'&#93;['size'&#93; > $MAX_SIZE&#41; 
$message "Този файл е над 2 GB."

else if &
#40;!in_array&#40;$file_ext, $FILE_EXTS&#41;&#41; 
$message "Извинете, $file_name&#40;$file_type&#41; не може да се качи&#40;файла не е поддържан&#41;."
else 
$message do_upload&#40;$upload_dir, $upload_url&#41;; 

print "<script>window.location.href='$url_this?message=$message'</script>"
&
#125; 
else if &#40;!$_FILES['userfile'&#93;&#41;; 
else 
$message "Невалиден формат."


$handle=opendir&#40;$upload_dir&#41;; 
$filelist ""
while &
#40;$file = readdir&#40;$handle&#41;&#41; &#123; 
if&#40;!is_dir&#40;$file&#41; && !is_link&#40;$file&#41;&#41; &#123; 
$filelist .= "<a href='$upload_dir$file'>".$file."</a> - URL&#58; <b>$upload_url$file</b>"
if &
#40;$DELETABLE&#41; 

$filelist .= " Качен на ".date&#40;"d-m H&#58;i", filemtime&#40;$upload_dir.$file&#41;&#41; 
.""
$filelist .= " <a style='text-decoration&#58;none; font-weight&#58;bold' href='?del=$upload_dir".urlencode&#40;$file&#41;."' title='delete'>x</a>"; 
$filelist .="<br>"
&
#125; 
&#125; 

function do_upload&#40;$upload_dir, $upload_url&#41; &#123; 

$temp_name $_FILES['userfile'&#93;['tmp_name'&#93;; 
$file_name $_FILES['userfile'&#93;['name'&#93;; 
$file_name str_replace&#40;"\\","",$file_name&#41;; 
$file_name str_replace&#40;"'","",$file_name&#41;; 
$file_path $upload_dir.$file_name


if &
#40; $file_name ==""&#41; &#123; 
$message "Грешно име"
return 
$message
&
#125; 

$result move_uploaded_file&#40;$temp_name, $file_path&#41;; 
if &#40;!chmod&#40;$file_path,0777&#41;&#41; 
$message "change permission to 777 failed."
else 
$message = &#40;$result&#41;?"$file_name е качен успешно." &#58; 
"Има грешка с избрания файл."
return 
$message
&
#125; 

?>



<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:

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Молба за помощ по PHP!
« Отговор #2 -: Юли 31, 2007, 10:35:32 am »
Трябва ли да се създава отделна папка за файловете?
Роботиката не е хоби - тя е начин на живот!

zipopro

  • Зомбиран Роботостроител
  • *****
  • Публикации: 178
    • Профил
    • http://ziporpo.org/
Молба за помощ по PHP!
« Отговор #3 -: Юли 31, 2007, 10:53:03 am »
ПЪРВО: Има една грешка!:

<font color=red><?=$_REQUEST[message]?></font>  Това трябва да е:
<font color=red><? echo $_REQUEST[message] ?></font>

ВТОРО: Бориславе, нагласи кои разширения ще качваш вмомента са:  '.zip','.jpg','.png','.gif','.doc','.avi','.sub' Отделяъ ги със запетая и им слагай Апострофи!
ТРЕТО: папката която трябва да направиш там където е файла е: files със cdmod(мисля че беше) 777
Поздрави и Успех със тая Не много хубава система за Ъплоад.
Лъчезар Петров Лечев - Стара Загора - 14 години


Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Молба за помощ по PHP!
« Отговор #4 -: Юли 31, 2007, 11:38:01 am »
И последен въпрос... Не искам големината да е 2 GB, а да е примерно, 50 МВ... Как трябва да поправя цифрите тук:

<?php
// Максимална големина на файла за качване (сега е 2 ГБ)
$MAX_SIZE = 268435456;
Роботиката не е хоби - тя е начин на живот!

kanadeca

  • Робо-Новак
  • *****
  • Публикации: 32
    • Профил
Молба за помощ по PHP!
« Отговор #5 -: Юли 31, 2007, 11:47:43 am »
Ами това  за големината е елементарно:

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>

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Молба за помощ по PHP!
« Отговор #6 -: Юли 31, 2007, 12:10:28 pm »
Вярно бе, как не се сетих... :D  :oops: Не ми дойде на акъла да сметна байтовете...
Роботиката не е хоби - тя е начин на живот!

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Молба за помощ по PHP!
« Отговор #7 -: Юли 31, 2007, 12:20:26 pm »
Благодаря на всички!

Вече можете да изпробвате новата Upload система на портала! :)
Роботиката не е хоби - тя е начин на живот!

kanadeca

  • Робо-Новак
  • *****
  • Публикации: 32
    • Профил
Молба за помощ по PHP!
« Отговор #8 -: Юли 31, 2007, 12:42:25 pm »
Да ни е честита  8)

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Молба за помощ по PHP!
« Отговор #9 -: Юли 31, 2007, 02:14:40 pm »
Браво :)
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания