Всем привет!!! Есть скрипт ajax uploader. Не совсем понимаю как он грузит в первой части. Нужно перед сохранением получить хешь файла во временной папке и сравнить с базой. Если совпадает не копировать в дирректорию.
Загрузчик состоит из трех классов, с 2мя последними понятно, а вот с первой нет. От чего зависит получим мы $_GET['qqfile'] или $_FILES['qqfile']? Что происходит когда получаем $_GET['qqfile'] (логика первой части)? Как получить в первой части url + имя файла для md5_file()?
Заранее спасибо...
Первая часть:
| Код | class qqUploadedFileXhr { /** * Save the file to the specified path * @return boolean TRUE on success */ function save($path) { $input = fopen("php://input", "r"); $temp = tmpfile(); $realSize = stream_copy_to_stream($input, $temp); fclose($input);
if ($realSize != $this->getSize()){ return false; }
$target = fopen($path, "w"); fseek($temp, 0, SEEK_SET); stream_copy_to_stream($temp, $target); fclose($target);
return true; } function getName() { return $_GET['qqfile']; } function getSize() { if (isset($_SERVER["CONTENT_LENGTH"])){ return (int)$_SERVER["CONTENT_LENGTH"]; } else { throw new Exception('Getting content length is not supported.'); } } }
|
Вторая:
| Код | class qqUploadedFileForm { /** * Save the file to the specified path * @return boolean TRUE on success */ function save($path) { if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){ return false; } return true; } function getName() { //$_FILES['qqfile']['name'] = TranslateText::translate($_FILES['qqfile']['name']); return $_FILES['qqfile']['name']; } function getSize() { return $_FILES['qqfile']['size']; } function getTmpName() { return $_FILES['qqfile']['tmp_name']; } }
|
Кусок третьей:
| Код | Выбираем по какому пути идти: if (isset($_GET['qqfile'])) { $this->file = new qqUploadedFileXhr(); } elseif (isset($_FILES['qqfile'])) { $this->file = new qqUploadedFileForm(); } else { $this->file = false; }
|
|