Написване на клас за File Upload. Част 2
Продължение от Част 1 Function #5 (Екстракт на Max File Size)

<?php
function get_max_size() {
$max_file_size = trim($this->max_file_size);
$kb = 1024;
$mb = 1024 * $kb;
$gb = 1024 * $mb;
$tb = 1024 * $gb;

if ($max_file_size) {
if ($max_file_size < $kb) {
$max_file_size = "max_file_size Bytes";
}
elseif ($max_file_size < $mb) {
$final = round($max_file_size/$kb,2);
$max_file_size = "$final KB";
}
elseif ($max_file_size < $gb) {
$final = round($max_file_size/$mb,2);
$max_file_size = "$final MB";
}
elseif($max_file_size < $tb) {
$final = round($max_file_size/$gb,2);
$max_file_size = "$final GB";
} else {
$final = round($max_file_size/$tb,2);
$max_file_size = "$final TB";
}
} else {
$max_file_size = "ERROR: NO SIZE PARAMETER PASSED TO get_max_size()";
}
return $max_file_size;
}
?>




Няма да разбиваме функцията на секции, защото тя е почти като горната функция. Единственото различно нещо е, че връща maximum file size на юзера. Тази функция е яка за извикване в случай, че юзерът се опитва да upload-не file, който е прекалено голям. Бихте могли да напишете error върху монитора и да използувате тази функция да покаже maximum file size, допустим в readable format. Отново в края на този tutorial, ще покажем, как да извикаме class-а и всяка функция, както и защо трябва да извиквате функциите индивидуално.

----------------------------

Function #6 (Validation of The User)
<?php
function validate_user() {
//SECTION #1
$banned_array = $this->banned_array;
$ip = trim($_SERVER['REMOTE_ADDR']);
$cpu = gethostbyaddr($ip);
$count = count($banned_array);

//SECTION #2
if ($count < 1) {
return true;
} else {
foreach($banned_array as $key => $value) {
if ($value == $ip ."-". $cpu) {
return false;
} else {
return true;
}
}
}
}
?>


Тази функция, ще validate срещу user trying to upload. Силното в този class е, че можете да блокирате юзери да ъплоудват на Вашия server, без значение на username, без значение на каквото и да е. Използува се техниката на прихващане на IP адреса, както и на user's host. Комбинират се и дават комбиниран собствен id. Всеки път, когато юзер upload-ва файл, тази информация, както и file name, size, date, и time, се записват в text файл на server. Ако Ви се случи да имате проблем с някой, upload-ващ viruses, можете да изтриете файла, да проверите, кой е upload-вал файла, и да добавите IP - Host Name във Вашият списък със забранени юзери. Ако юзерът е открит в този списък, той или тя, няма да имат възможност за upload на файлове. Кода е разбит в две части и да разгледаме.

<?php
function validate_user() {
//SECTION #1
$banned_array = $this->banned_array;
$ip = trim($_SERVER['REMOTE_ADDR']);
$cpu = gethostbyaddr($ip);
$count = count($banned_array);
?>


Section #1
Тази част дефинира, всички Ваши променливи, които ще бъдат използувани в тази функция. Първо дефинираме banned array. Ако никой не попада във Вашия списък на забрана съдържан във масив за забрана, можете да изпратите празен масив или не изпращайте тази променлива със class. Ако масива за забрана не е открит , функцията ще предположи, че upload-а е разрешен за всички и никакви проверки няма да произтекат. Второ взимаме юзерския IP адрес открит в REMOTE_ADDR. След това взимаме юзерския хост. Взетия хост се предполага да бъде юзерския интернет сървис провайдър (ISP). Нашата последна променлива, определя броя на елементите в юзерския масив за забрана .

<?php
//SECTION #2
if ($count < 1) {
return true;
} else {
foreach($banned_array as $key => $value) {
if ($value == $ip ."-". $cpu) {
return false;
} else {
return true;
}
}
}
}
?>


Section #2
Втората секция стартира процеса на потвърждаване. Първо се проверява има ли някой във Вашия списък за забрана на юзери. Ако няма функцията връща true, означаващо, че юзера има право на upload. Иначе казано цикъла forach() е стартиран за масива и стойността на всеки ключ в масива се сравнява с $ip - $cpu name. Ако тези две (2) стойности съвпадат, функцията връща false и юзерът няма да има възможност за upload на файлове

--------------------------
Function #7 (Verify The Upload Directory)
<?php
function get_upload_directory() {
//SECTION #1
$upload_dir = trim($this->upload_dir);

//SECTION #2
if ($upload_dir) {
$ud_len = strlen($upload_dir);
$last_slash = substr($upload_dir,$ud_len-1,1);
if ($last_slash <> "/") {
$upload_dir = $upload_dir."/";
} else {
$upload_dir = $upload_dir;
}

//SECTION #3
$handle = @opendir($upload_dir);
if ($handle) {
$upload_dir = $upload_dir;
closedir($handle);
} else {
$upload_dir = "ERROR";
}
} else {
$upload_dir = "ERROR";
}
return $upload_dir;
}
?>



Тази функция ще вземе upload directory, която зададохте по-преди и ще я validate. Първо иска да види дали директорията, която сте въвели е форматирана коректно и тогава ще направи проверка да види, дали директорията съществува. Разделихме кода на (3) части, за по-лесно обяснение на ключовите секции.

<?php
//SECTION #1
$upload_dir = trim($this->upload_dir);
?>


Section #1
Това което дефинираме тук е upload директорията, която трябва да е зададена от Вас.

<?php
//SECTION #2
if ($upload_dir) {
$ud_len = strlen($upload_dir);
$last_slash = substr($upload_dir,$ud_len-1,1);
if ($last_slash <> "/") {
$upload_dir = $upload_dir."/";
} else {
$upload_dir = $upload_dir;
}
?>


Section #2
Тази секция отново стартира нашия процес на валидация за потвърждаване, че upload директорията е в работна кондиция. Първо проверява дали upload директорията присъства. Ако е така функцията ще продължи, иначе отива накрая и връща invalid file directory . След това намираме directory length използувайки PHP функцията strlen(). Причината за извършване на това действие, е че се нуждаеме да откриеме дължината на низа, за да екстрактнеме последния character от низа. След това използуваме PHP функцията substr(), за да екстрактнеме последния character от upload directory string. Ще забележите ($last_slash = substr($upload_dir,$ud_len-1,1);) че субстрактнахме (1) от дължината на низа на директорията и имаме добри причини да направим това. Забележете, че желаеме да екстрактнем последния character off of the upload directory. strlen() функцията пресмята броя на characters starting with '1', но когато пресмятате мястото на character в низа стартирате с '0', и оттук minus '1' от цялата дължина. Ако не направиме това, не бихме селектирали последния character и в крайна сметка нищо.

Причината да селектираме последния character е проста. Искаме да видим дали завършва с backslash. Ако не завършва, трябва да добавиме за да работи функцията нормално. Така че настройваме променливата $last_slash, която селектира последния character и ако последния character не съответства на backslash, добавяме, в противен случай не правиме нищо.


<?php
//SECTION #3
$handle = @opendir($upload_dir);
if ($handle) {
$upload_dir = $upload_dir;
closedir($handle);
} else {
$upload_dir = "ERROR";
}
} else {
$upload_dir = "ERROR";
}
return $upload_dir;
}
?>



Section #3
В тази финална секция валидираме upload директорията. Настройваме handle за отваряне на directory. След това виждаме дали handle ще отвори наистина. Ако да, затваряме directory и връщаме upload directory name, иначе връщаме error, за да уведомим юзера, че directory is invalid. След като validations са заели местата си, затваряме скобите и продължаваме.

*Забелязвате символа @ пред opendir() функцията. Този символ е използуван да подтисне всички errors асоциирани с функцията. Забележете, ако upload директорията е invalid, opendir() функцията ще произведе error, защото тя се обърква, но не желаеме юзера да види тази error и ние я подтискаме за да няма конфликт с нашия код. (СЛЕДВА ПРОДЪЛЖЕНИЕ)



/ Трябва да сте регистриран за да напишете коментар /