Владимир

Владимир

С нами с 16 февраля 2018; Место в рейтинге пользователей: #1720

Отправка файла через ajaxform

Создал в линуксовом редакторе (libreoffice) файл в формате odt. Размер 3 Мб. Отправляю через ajaxform файл. В списке разрешённых этот формат прописал. Ограничение у меня — 8 Мб. Но в ответ выдаёт ошибку «Произошла ошибка при загрузке файла на сервер».
такую же ошибку выдаёт при попытке загрузить docx-файл, сохранённый в том же libreoffice. Тут документ 15 Мб. По идее в этом случае должен выдавать ошибку, что размер больше разрешённого.

вот вызов ajaxform:
[[!AjaxForm?
    &snippet=`FormIt`
    &form=`etclimateFeedBackFormTpl`
    &hooks=`email`
    &customValidators=`etclimateCheckForm`
    &emailSubject=`Заявка на бесплатную консультацию`
    &emailTo=`my@e-mail.ru`
    &emailFrom=`no-reply@e-mail.ru`
    &emailFromName=`Company`
    &emailTpl=`etclimateMailTpl`
    &validate=`name:required,phone:required,files:etclimateCheckForm`
    &validationErrorMessage=`Пожалуйста, исправьте ошибки!`
    &successMessage=`Ваше сообщение успешно отправлено!`
]]
вот сниппет:
<?php
// инициализируем переменную output, отвечающую за результат работы хука, со значением true
$output = true;
// разрешённые расширения файлов
$allowedExt = array('docx','doc','txt','pdf', 'odt', 'odf');
// максимальный размер файла (8 Мбайт)
$maxFileSize = 8 * 1024 * 1024;
// если ассоциатианый массив $_FILES[$keys] существует, то
if(isset($_FILES[$key]["error"])) {
    // переберём все файлы (изображения)
    foreach ($_FILES[$key]["error"] as $fkey => $error) {
        // если ошибок не возникло, т.е. файл был успешно загружен на сервер, то...
        if ($error == UPLOAD_ERR_OK) {
            // имя файла
            $fileName = basename($_FILES[$key]['name'][$fkey]);
            // расширение файла
            $fileExt = mb_strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
            // размер файла
            $fileSize = filesize($_FILES[$key]['tmp_name'][$fkey]);
            // проверка расширения файла
            if(!in_array($fileExt, $allowedExt)) {
                // файл имеет недопустимый тип
                $errorMsg = 'Файл ' . $fileName . ' имеет не разрешённый тип. ';
                $validator->addError($key, $errorMsg);
                $output = false; // возвращаем false
                break;
            }
            if($fileSize > $maxFileSize) {
                // файл имеет размер больше максимального
                $errorMsg = 'Файл '. $fileName .' имеет не разрешённый размер.';
                $validator->addError($key,$errorMsg);
                $output = false; // возвращаем false
                break;
            }
        } else {
            // произошла ошибка при загрузке файла на сервер
            $errorMsg = 'Произошла ошибка при загрузке файла ' . $fileName .' на сервер.';
            $validator->addError($key,$errorMsg);
            $output = false; // возвращаем false
            break;
        }
    }
}
return $output;
Владимир
16 февраля 2018, 09:15
modx.pro
1 935
0