Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > PHP ajax uploader (объяснить)


Автор: MOTORIST 29.4.2011, 12:17
Всем привет!!!
Есть скрипт 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;
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)