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

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

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



------------------
Function #9 (Upload The File With No Validation)

<?php
function upload_file_no_validation() {
//SECTION #1
$temp_file_name = trim($this->temp_file_name);
$file_name = trim(strtolower($this->file_name));
$upload_dir = $this->get_upload_directory();
$upload_log_dir = $this->get_upload_log_directory();
$file_size = $this->get_file_size();
$ip = trim($_SERVER['REMOTE_ADDR']);
$cpu = gethostbyaddr($ip);
$m = date("m");
$d = date("d");
$y = date("Y");
$date = date("m/d/Y");
$time = date("h:i:s A");

//SECTION #2
if (($upload_dir == "ERROR") OR ($upload_log_dir == "ERROR")) {
return false;
} else {
if (is_uploaded_file($temp_file_name)) {
if (move_uploaded_file($temp_file_name,$upload_dir . $file_name)) {
$log = $upload_log_dir.$y."_".$m."_".$d.".txt";
$fp = fopen($log,"a+");
fwrite($fp,"
$ip-$cpu | $file_name | $file_size | $date | $time");
fclose($fp);
return true;
} else {
return false;
}
} else {
return false;
}}}
?>

Това е една от двете ключови функции в този class. Тази функция и следващата са тези, които ще опитат uploat на Вашия файл.
След 8 предварителни функции и 'x' броя реда код, започваме да напипваме хубавата част. Тази функция ще upload-не Вашия файл. Единственото нещо, което утвърждава са (2) директории за upload. Ако са некоректни, файла няма да се upload-не. Ако не Ви "дреме" за размера на файла, типа му, потребителите, или дали файла съществува, тогава използувайте тази функция за upload.

Функцията е разделена на (2) части с цел по-лекото и усвояване. Да хвърлим един поглед, какво може да става вътре в една такава функция.

<?php
//SECTION #1
$temp_file_name = trim($this->temp_file_name);
$file_name = trim(strtolower($this->file_name));
$upload_dir = $this->get_upload_directory();
$upload_log_dir = $this->get_upload_log_directory();
$file_size = $this->get_file_size();
$ip = trim($_SERVER['REMOTE_ADDR']);
$cpu = gethostbyaddr($ip);
$m = date("m");
$d = date("d");
$y = date("Y");
$date = date("m/d/Y");
$time = date("h:i:s A");
?>


Section #1
Функцията трябва да дефинира (12) различни променливи, за да може партито да започне. Долу е показан списък с променливите, с кратко описание към тях.

$temp_file_name = Временното име на файла.
$file_name = Реалното име на файла.
$upload_dir = Името на директорията за качване взето от функцията get_upload_directory().
$upload_log_dir = Името на директорията за логове.
$file_size = Размерите на файла.
$ip = IP-то на потребителя.
$cpu = Интернет хоста на потребителя
$m = Текущия месец от 2числа (2)
$d = Текущия ден от 2числа (2)
$y = Текущата година 4-цифри (4)
$date = Днешната дата 01/01/2003
$time = Текущото време 11:12:56 AM


<?php
//SECTION #2
if (($upload_dir == "ERROR") OR ($upload_log_dir == "ERROR")) {
return false;
} else {
if (is_uploaded_file($temp_file_name)) {
if (move_uploaded_file($temp_file_name,$upload_dir . $file_name)) {
$log = $upload_log_dir.$y."_".$m."_".$d.".txt";
$fp = fopen($log,"a+");
fwrite($fp,"
$ip-$cpu | $file_name | $file_size | $date | $time");
fclose($fp);
return true;
} else {
return false;
}
} else {
return false;
}}}
?>

Section #2
Това е секцията от кода, в която магията се случва. Тя стартира процесите на валидация и upload. Първо прави проверка да се убеди че upload директориите са валидни, и ако не са, функцията връща false и exits, иначе продължаваме към следващия проверяващ процес.

Искаме да се убедим, че файла се е upload-нал в "temp" директория. Вижте във Вашият php.ini файл, секцията питаща за "temp upload directory" и където файла се upload-ва. След като е upload-нат, трябва да го вземаме от тази директория и да го преместим в коректната директория. Така че правим проверка, за да се убедим че файла се е upload-нал във временната директорията с използването на функцията is_uploaded_file(). Ако се е ъплоуаднал продължаваме, в противен случай функцията връща "false" и завършва.

Сега трябва да проверим дали файла е имал възможността да бъде преместен от временната директория в коректната, като използваме функцията move_uploaded_file(). Ако е, тогава upload-а е готов, функцията връща true, и е въведен запис в днешния (текущия) log файл. Log файл се съхранява за всеки ден, когато е ъплоудван файл. Всеки log файл ще бъде с името на текущата дата. (т.е. 07192003.txt) Ако файла вече съществува, добавяме дата към края му, иначе стартираме нов файл. Във всеки log файл информацията, която се съхранява е ip адреса, интернет провайдъра, името на файла, размера на файла, датата на upload, и времето на upload разделени с '|'.

Ако преместването на файла пропадне функцията ще върне "false" и след това "exit". Нека отидем сега на последната функция за този class.

Function #10 (Upload The File With Validation)

<?php
function upload_file_with_validation() {
//SECTION #1
$temp_file_name = trim($this->temp_file_name);
$file_name = trim(strtolower($this->file_name));
$upload_dir = $this->get_upload_directory();
$upload_log_dir = $this->get_upload_log_directory();
$file_size = $this->get_file_size();
$ip = trim($_SERVER['REMOTE_ADDR']);
$cpu = gethostbyaddr($ip);
$m = date("m");
$d = date("d");
$y = date("Y");
$date = date("m/d/Y");
$time = date("h:i:s A");
$existing_file = $this->existing_file(); //<-Add On
$valid_user = $this->validate_user(); //<-Add On
$valid_size = $this->validate_size(); //<-Add On
$valid_ext = $this->validate_extension(); //<-Add On

//SECTION #2
if (($upload_dir == "ERROR") OR ($upload_log_dir == "ERROR")) {
return false;
}
elseif ((((!$valid_user) OR (!$valid_size) OR (!$valid_ext) OR ($existing_file)))) {
return false;
} else {
if (is_uploaded_file($temp_file_name)) {
if (move_uploaded_file($temp_file_name,$upload_dir . $file_name)) {
$log = $upload_log_dir.$y."_".$m."_".$d.".txt";
$fp = fopen($log,"a+");
fwrite($fp,"
$ip-$cpu | $file_name | $file_size | $date | $time");
fclose($fp);
return true;
} else {
return false;
}
} else {
return false;
}}}
?>


Тази функция е същата, като една от тези които разгледахме, с изключение че добавя допълнителни 6 реда код. Имаме (4) допълнителни променливи в section #1. Всеки един е показан долу с кратко описание.


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

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



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

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

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


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