------------------
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. Всеки
един е показан долу с кратко описание.