Передайте $ _FILES в класс для обработки - PullRequest
0 голосов
/ 23 августа 2011

В настоящее время у меня есть форма отправки запроса, которую могут заполнять только зарегистрированные пользователи.

Часть формы позволяет пользователю загрузить файл, который будет прикреплен к запросу.

ЧтоЯ пытаюсь сделать, это передать переменную $_FILES в файл класса для обработки (используя class.upload.php ), так как я хочу, чтобы имя файла было в следующем формате:

enquiryID_userID_fileName.ext

Можно ли передать данные формы $_POST в класс вместе с данными $_FILES?

Примером того, чего я пытаюсь достичь, является следующий:

if (isset($_POST['submit_enquiry'])) {
    $enquiry = new Enquiry();
    $enquiry->newEnquiry($_POST, $_FILES);
}

Затем в классе запросов:

class Enquiry {

    private function _processFiles($_FILES, $caseID) {
        ...
    }

    private function _processForm($_POST) {
        ...
    }

    public function newEnquiry($_POST, $_FILES) {
        $caseID = $this->_processForm($_POST); // returns caseID
        $this->_processFiles($_FILES, $caseID);
    }
}

Печать $_FILES дает мне следующее:

Array
(
    [file] => Array
        (
            [name] => Array
                (
                    [0] => Blue hills.jpg
                    [1] => Sunset.jpg
                    [2] => 
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                    [2] => 
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/phpwyLp86
                    [1] => /tmp/phpKJa4iw
                    [2] => 
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 4
                )

            [size] => Array
                (
                    [0] => 28521
                    [1] => 71189
                    [2] => 0
                )

        )

)

При попытке обработатьфайл почти так же, как если бы файл tmp был потерян, так как он не может обработать файл для загрузки.Есть какие-то очевидные проблемы, которые я пропустил, пытаясь реализовать это решение?

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Загрузка tmp файлов будет удалена после завершения вашего скрипта.Пока это не закончено, файлы все еще там.

Однако, если вы перемещаете их или если форма переходит по нескольким запросам (например, многоэтапная форма, проверка, которая требует повторной отправки),вам нужно создать свои собственные файлы tmp.

0 голосов
/ 23 августа 2011

Вам просто нужно добавить значения записей к имени файла:

foreach($_FILES as $file){
   $file['name']=$_POST['enquiryID'].'_'.$_POST['userID'].'_'.$file['name'];
}

// do upload

И если у вас есть только несколько входов $ _POST, сохраните их как очищенные переменные и отправьте их по отдельности через вашу функцию в качестве параметров.(как сказал Фил).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...