Помогни ни да направим Uroci.net по - богат! Добави урок

Написване на клас за File Upload

PHP » PHP
nma   трудност:    видян: 13775



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

<?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 директорията, която зададохте по-преди и ще я провери. Първо иска да види дали директорията, която сте въвели е форматирана коректно и тогава ще направи проверка да види, дали директорията съществува. Разделихме кода на (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". След това намираме дължината на името на директорията използувайки PHP функцията strlen(). Причината за извършване на това действие, е че се нуждаем да открием дължината на низа, за да изведем последния символ от низа. След това използуваме PHP функцията substr(), за да изведем последния символ от името на директорията. Ще забележите ($last_slash = substr($upload_dir,$ud_len-1,1);) че извеждаме (1) от дължината на низа на директорията и имаме добри причини да направим това. Забележете, че желаем да изведем последния символ от името на директорията. strlen() функцията пресмята броя на символа започвайки от '1', но когато пресмятате мястото на символа в низа стартирате с '0', и оттук минус '1' от цялата дължина. Ако не направим това, не бихме селектирали последния character и в крайна сметка нищо.

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

<?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) за отваряне на директорията. След това виждаме дали дръжката (handle) ще се отвори наистина. Ако да, затваряме директорията и връщаме името и, иначе връщаме съобщение за грешка, за да уведомим потребителя, че има проблем с директорията. След като проверките са заели местата си, затваряме скобите и продължаваме.

*Забелязвате символа @ пред opendir() функцията. Този символ е използван да скрие всички грешки асоциирани с функцията. Забележете, ако upload директорията е невалидна, opendir() функцията ще произведе съобщение за грешка, защото тя се обърква, но не желаем потребителя да види това съобщение и ние я потискаме, за да няма конфликт с нашия код.

Function #8 (Verify The Upload Log Directory)

<?php
function get_upload_log_directory() {
$upload_log_dir = trim($this->upload_log_dir);
if ($upload_log_dir) {
$ud_len = strlen($upload_log_dir);
$last_slash = substr($upload_log_dir,$ud_len-1,1);
if ($last_slash <> "/") {
$upload_log_dir = $upload_log_dir."/";
} else {
$upload_log_dir = $upload_log_dir;
}
$handle = @opendir($upload_log_dir);
if ($handle) {
$upload_log_dir = $upload_log_dir;
closedir($handle);
} else {
$upload_log_dir = "ERROR";
}
} else {
$upload_log_dir = "ERROR";
}
return $upload_log_dir;
}
?>


Няма да разбиваме функцията. Причината е, защото това е същата функция през която преминахме, с изключение че тя проверява и връща директория, в която се писват логовете. Всеки път, когато потребителя ъплоудва файл, .txt файл е записван на сървъра с текущата дата. Ако файла вече съществува за текущата дата просто добавяме в края.

Причината: кой, какво и кога ъплоудва. Ако някой upload-не virus, ще имате възможност да проследите потребителя и да вкарате IP-то му в забранения списък. Това е идеална функция за всеки клас (да я притежава) или script поради това, че се занимава с взаимодействието между публиката и сървъра.


Страници: «1 2 3 4 5 6 »

Сподели урока:



Коментари (1)

yahoo на 24.02 2007 в 14:28ч.
Когато upload-вам файл в името на който има единична кавичка ' името се отрязва до кавичката. Самата $_FILES['upload']['name'] е отрязана и не мога да и приложа str_replace някакви идеи?

Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини