Чат Telegram
Группа ВКонтакте
Новый комментарий


fantasyz 24.04.2018 в 21:28
$srcFileName = $file['name'];
$sizeFile = $file['size'];
$filePath = $file['tmp_name'];
$newFilePath = __DIR__ . '/upload/' . $srcFileName;
$image = getimagesize($filePath);
$limitWidth = 1280;
$limitHeight = 720;

1.

if ($sizeFile > 8000000) {
    $error = 'размер файла слишком большой';
}

2.

elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
    $error = 'размер файла слишком большой';
}

3.

else if ($image['1'] > $limitWidth || $image['0'] > $limitHeight) {
    $error = 'разрешение картинки слишком велико';
}
ivashkevich 25.04.2018 в 08:51

Очень хорошо!

Замечание по первому заданию - 8МБ это всё-таки 8 * 1024 * 1024. Можно прямо так в коде и записать.

А в третьем задании стоит воспользоваться функцией getimagesize(), она более надёжна, так как позволяет узнать размеры картинки на стороне сервера. Кроме того, она может вернуть false, что будет говорить о том, что картинка мягко говоря "неправильная". Цифры в вашем примере пришли из браузера - это менее надежно. Они могут прийти от клиента какими угодно. А могут и вовсе не прийти, и тогда будет warning, так как ключей 0 и 1 в массиве не окажется.

fantasyz 25.04.2018 в 20:37

так я же применяю функцию getimagesize() к временному файлу вот тут $image = getimagesize($filePath); и беру из полученого массива соответствующие данные для сравнения с задаными

ivashkevich 25.04.2018 в 20:44

Прошу прощения, не увидел. Тогда всё отлично. Единственное - переменную лучше назвать $imageSize.

fantasyz 25.04.2018 в 20:47

Спасибо, исправлю)

Bogdan 30.12.2018 в 09:20
$image = getimagesize($filePath);
$limitWidth = 1280;
$limitHeight = 720;
else if ($image['1'] > $limitWidth || $image['0'] > $limitHeight) {
    $error = 'разрешение картинки слишком велико';
}
разве этот код верный? ($image['1'] > $limitWidth) здесь идет сравнение Height с Width; ($image['0'] > $limitHeight) - а здесь Width с Height... или я что-то перепутал?
ivashkevich 01.01.2019 в 10:02

Видимо и правда ошибка

1nSide 17.05.2018 в 13:14

Почитал разобрался)

<?php

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '\upload' . $srcFileName;
    $fileSize = $file['size'];
    $limitBytes  = 1024 * 1024 * 8;
    $limitWidth  = 1280;
    $limitHeight = 768;
    $filePath = $file['tmp_name'];
    $image = getimagesize($filePath);

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    if ($fileSize > $limitBytes) {
        $error = 'Размер файла слишком большой';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла слишком большой';
    } elseif ($image[1] > $limitHeight || $image[0] > $limitWidth){
        $error = 'Привышенно допустимое разрешение картинки';
    } elseif (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($filePath, $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/upload/upload.php' . $srcFileName;
    }
}

?>

<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 17.05.2018 в 19:37

Отлично! :)

Nikolas 13.07.2018 в 11:14

у меня вопрос, проверка условия if (!move_uploaded_file($file['tmp_name'], $newFilePath)) и сразу выполнит саму функцию move_uploaded_file и использует ее же в проверке условия?Мне казалось,что нужно ее сначала выполнить,после чего она вернет true или false и только потом использовать ее в проверке условия?

ivashkevich 14.07.2018 в 09:30

Да, отработает именно так, как вы и написали. Сначала выполнится и вернёт результат, который сразу будет проверен в условии. Можно и в переменную положить, $isUploaded, например, а затем проверять её.

Fox-24 15.08.2018 в 16:38

Еще один замечательный урок пройден :)

<?php

// Позвольте загружать только файлы размером меньше 8Мб. Сделайте это с помощью сравнения с $_FILES['attachment']['size'].
// Изучите директиву upload_max_filesize в файле php.ini. Установите её значение, равное 2M. Перезапустите веб-сервер.
// Попробуйте теперь загрузить файл, размером в 5Мб. Теперь обработайте соответствующую ошибку с помощью проверки значения $_FILES['attachment']['error'].
// Разрешите загружать картинки с шириной не более 1280px и высотой не более 720px.

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $errorCode = $_FILES['attachment']['error'];
    $filePath = $_FILES['attachment']['tmp_name'];
    $fileSize = $_FILES['attachment']['size'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION); //

    // Проверка на ошибки из $_FILES
    if ($errorCode !== UPLOAD_ERR_OK) {
        $error = [
            UPLOAD_ERR_INI_SIZE => 'Размер файла превысил значение upload_max_filesize в конфигурации PHP.',
            UPLOAD_ERR_FORM_SIZE => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE в HTML-форме.',
            UPLOAD_ERR_PARTIAL => 'Загружаемый файл был получен только частично.',
            UPLOAD_ERR_NO_FILE => 'Файл не был загружен.',
            UPLOAD_ERR_NO_TMP_DIR => 'Отсутствует временная папка.',
            UPLOAD_ERR_CANT_WRITE => 'Не удалось записать файл на диск.',
            UPLOAD_ERR_EXTENSION => 'PHP-расширение остановило загрузку файла.',
        ];
        // Зададим неизвестную ошибку
        $unknownMessage = 'При загрузке файла произошла неизвестная ошибка.';
        // Если в массиве нет кода ошибки, скажем, что ошибка неизвестна
        $outputMessage = isset($error[$errorCode]) ? $error[$errorCode] : $unknownMessage;
        // Выведем название ошибки
        die($outputMessage);

    }

// Зададим ограничения для картинок
    $limitBytes = 1024 * 1024 * 2;
    $limitWidth = 1280;
    $limitHeight = 720;

    $image = getimagesize($filePath);   // В переменной $image массив с информацией о размерах картинки
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($fileSize > $limitBytes) {
        $error = 'Размер изображения не должен превышать 2 Мбайт.';     // Если прквышает ограничение из $limitBytes
    } elseif ($image[1] > $limitHeight) {
        $error = 'Высота изображения не должна превышать 1280 точек.';  // Если прквышает ограничение из $limitWidth
    } elseif ($image[0] > $limitWidth) {
        $error = 'Ширина изображения не должна превышать 720 точек.';   // Если прквышает ограничение из $limitHeight
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}

?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="./upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 16.08.2018 в 21:52

Неплохо) Из улучшений - можно в текстах ошибок подставлять значения переменных с максимальным размером, высотой и шириной. Переделывать не надо - просто для размышления.

ArtemijeKA 11.09.2018 в 18:57

1.

    $fileSize = $_FILES['attachment']['size'];

    if ($fileSize > 8000000) { // ############################################ 1
        $error = 'Загрузка файлов более чем 8Мб запрещена!';
    } elseif ...

3.

    } elseif ($file['error'] === UPLOAD_ERR_INI_SIZE) { // ################### 3
        $error = 'Размер принятого файла превысил максимально допустимый размер, который задан директивой 
        upload_max_filesize конфигурационного файла php.ini.';
    } elseif ...

4.

    $fileWidth = getimagesize($file['tmp_name'])['0'];
    $fileHeight = getimagesize($file['tmp_name'])['1'];

...

    } elseif ($fileWidth > 1280 && $fileHeight > 720) { // #################### 4
        $error = 'Загрузите картинку в пределах ширины не более 1280px и высотой не более 720px! Пожалуйста)';
    } else ...
ivashkevich 22.09.2018 в 09:58

8 Мбайт это не 8000000 байт. Это 8 * 1024 * 1024.

ArtemijeKA 08.10.2018 в 13:59

Cпасибо. Это я грубо округлил 8,388,608 байт

ivashkevich 22.09.2018 в 10:00
} elseif ($fileWidth > 1280 && $fileHeight > 720) {

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

ArtemijeKA 08.10.2018 в 13:57

Надо наверно

} elseif ($fileWidth > 1280 || $fileHeight > 720) {
ivashkevich 08.10.2018 в 23:08

Верно

Benya 23.09.2018 в 11:47
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $filePatch = $file['tmp_name'];

$srcFileName = $file['name'];
$scrFileSize = $file['size'];
$fileSizeMax =  8*1024*1024;
$fileMaxWidth = 1280;
$fileMaxHeight = 720;
    $fileSizeWidthHeight = getimagesize($filePatch);
$newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if ($fileSizeWidthHeight[0] > $fileMaxHeight || $fileSizeWidthHeight[1] > $fileMaxWidth) {
        $error = 'Не допустимая ширина или высота!';
    }elseif ($scrFileSize > $fileSizeMax || ($file['error'] == UPLOAD_ERR_INI_SIZE)) {
        $error = 'Файл слишком большой!';
    }elseif (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    }elseif ($file['error'] !== UPLOAD_ERR_OK) {
    $error = 'Ошибка при загрузке файла.';
}elseif (file_exists(($newFilePath))) {
    $error = 'Файл с таким именем существует';
}elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
    $error = "Ошибка при загрузке файла";
}else {
    $result = 'http://myproject.loc/uploads/' . $srcFileName;
}
}

?>
ivashkevich 24.09.2018 в 22:57

Хорошо! Только отступы нужно исправить, а то всё на одном уровне.

SBTesla 30.09.2018 в 10:55
<?php
// проверяем получение  ключевых значений
if (!empty($_FILES['attachment'] ['size'] ['tmp_name'])) {
    // Проверяем размер файла
$maxFile = 1024*1024*8;
        if($_FILES['attachment'] ['size'] > $maxFile) {
            $error = 'Файл превышает допустимый размер';
            echo $error;
 } else {
             $file = $_FILES['attachment'];
        }
        /* Определяем переменные с размерами*/
        $image = getimagesize($filePatch);
        $limitWidth = 1280;
        $limitHeight = 720;
        // Проверяем загружаемый файл на размеры
        if ($image[1] > $limitWidth) {
            $error = 'Высота изображения не должна превышать 720 точек';
        }
        if ($image[0] > $limitHeight) {
            $error = 'Ширина изображения не должна превышать 1280 точек';
        }
}

$fileName = $file['name'];
$filePatch = __DIR__ . '/fileUpload/' . $fileName;

$allowedExtension = [ 'ipg' , 'png' , 'gif'];
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($extension, $allowedExtension)) {
    $error = 'Загрузка фалов с таким расширением запрещена';
}

// проверяем файл ли это и временный ли он
if ($file['error'] !== UPLOAD_ERR_OK){
    $error = 'ошибка при загрузке фала';
}
elseif (file_exists($filePatch)) {
    $error = 'Файл с таким именем существует';
}elseif
     (!move_uploaded_file($file['tmp_name'], $filePatch)){
     $error = 'Ошибка при загрузке';
} else {
          $result = 'http://site/upload/fileUpload' . $fileName;
     }

?>

Только у меня вопрос по getimagesize, В официальной документации предупреждают что бы не использовать ее для проверки изображения, а использовать Fileinfo.Отсюда вопрос может я неправильно написал и есть смысл использовать проверку getimagesize после того как проверим расширение файла?

ivashkevich 30.09.2018 в 10:58

отлично!!! только дважды "http://" повторяется

SBTesla 30.09.2018 в 11:07

Поправил

demyanovpaul@yandex.ru 05.11.2018 в 15:56

Позвольте загружать только файлы размером меньше 8Мб. Сделайте это с помощью сравнения с $_FILES['attachment']['size'].

const MAX_FILE_SIZE = 8 * 1024 * 1024;
 if($file['size'] > MAX_FILE_SIZE ) {
        $error = 'Размер файла слишком свыше 8мб!';
    }

Изучите директиву upload_max_filesize в файле php.ini. Установите её значение, равное 2M. Перезапустите веб-сервер. Попробуйте теперь загрузить файл, размером в 5Мб. Теперь обработайте соответствующую ошибку с помощью проверки значения $_FILES['attachment']['error'].

if ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла слишком большой';
    }

Разрешите загружать картинки с шириной не более 1280px и высотой не более 720px.

const MAX_HEIGHT_SIZE_IMG = 720;
const MAX_WIDTH_SIZE_IMG = 1280;

if ($imageUploadInfo[0] > MAX_WIDTH_SIZE_IMG || $imageUploadInfo[1] > MAX_HEIGHT_SIZE_IMG) {
        $error = 'Размер изображения не должен превышать ' . MAX_WIDTH_SIZE_IMG . 'x' . MAX_HEIGHT_SIZE_IMG . '!';
    }

Весь код

<?php
const MAX_FILE_SIZE = 8 * 1024 * 1024;
const MAX_HEIGHT_SIZE_IMG = 720;
const MAX_WIDTH_SIZE_IMG = 1280;

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    $imageUploadInfo = getimagesize($file['tmp_name']);

    if($file['size'] > MAX_FILE_SIZE ) {
        $error = 'Размер файла слишком свыше 8мб!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла слишком большой';
    } elseif ($imageUploadInfo[0] > MAX_WIDTH_SIZE_IMG || $imageUploadInfo[1] > MAX_HEIGHT_SIZE_IMG) {
        $error = 'Размер изображения не должен превышать ' . MAX_WIDTH_SIZE_IMG . 'x' . MAX_HEIGHT_SIZE_IMG . '!';
    } elseif (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 05.11.2018 в 21:51

Отлично!

virtual2018 22.11.2018 в 14:41
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>

почему в данном случае используется именно альтернативный синтаксис управляющих структур, ведь стандартная форма не намного длиннее?

ivashkevich 22.11.2018 в 22:19

На мой взгляд так в шаблонах смотрится лучше, но это вкусовщина, я не настаиваю чтобы вы писали так же.

Bogdan 30.12.2018 в 08:47

также зациклился по данному вопросу, но мне сказали что можно писать и обычно и вообще это мало когда понадобиться, а может и вовсе )

lig7771991@list.ru 24.11.2018 в 11:06

У меня не работает данный скрипт из примера, пишет -

Объект не найден!
Запрашиваемый ресурс не найден. Ссылка на странице неверна или устарела. Пожалуйста, сообщите автору этой страницы об ошибке.

Если Вы считаете, что это ошибка сервера, пожалуйста, сообщите об этом веб-мастеру.

И вообще некоторые скрипты из заданий. Может быть это из-за того что я использую XAMP а не OpenServer??

virtual2018 24.11.2018 в 18:09

Вы очень мало предоставили информации по Вашей проблеме, однозначно могу сказать, что проблема не в XAMP. Рекомендую воспользоваться инструментом разработчика Хрома, чтобы определить какой именно объект не найден, а так же внимательно проверить правильно ли указано местоположение каталога uploads из задания.

ivashkevich 24.11.2018 в 21:53

В самом начале курса я предупредил, что работаем в OpenServer. Выбираете что-то другое - разбирайтесь сами.

virtual2018 24.11.2018 в 18:25
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $srcFileName = $file['name'];
    $maxFileSize = 8 * 1024 * 1024; 
    $maxWidth = 1280;
    $maxHeight = 768;
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['size'] > $maxFileSize) {
        $error = 'Размер файла превышает допустимое значение 8Mб';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла превышает допустимое значение ' . ini_get('upload_max_filesize');
    } elseif ($file['error'] == UPLOAD_ERR_PARTIAL) {
        $error = 'Файл не загрузился полностью. Повторите попытку';
    } elseif ($file['error'] == UPLOAD_ERR_NO_FILE) {
        $error = 'Файл не удалось загрузить';
    } elseif ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) {
        $error = 'Недоступна временная папка для сохранения файла';
    } elseif ($file['error'] == UPLOAD_ERR_CANT_WRITE) {
        $error = 'Ошибка записи на диск';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (getimagesize($file['tmp_name'])[0] > $maxWidth || getimagesize($file['tmp_name'])[1] > $maxHeight) {
        $error = 'Некорректное разрешение файла';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 24.11.2018 в 21:53

Отлично!

Pavel-Tonk 07.12.2018 в 23:49
$extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

я извиняюсь, но ведь переменная $srcFileName хранит имя файла, а $newFilePath - путь, но работает и с той и с той переменной функция правильно или я что-то не понял >_<.

ivashkevich 09.12.2018 в 01:16

Приведи конкретный пример с путями. Не понял пока вопроса.

Pavel-Tonk 09.12.2018 в 23:46

Во всех примерах используется данная переменная, хранящая имя файла.

$srcFileName = $file['name'];

в проверке расширения файла Вы используете её же, передавая функции pathinfo();

$extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

Хотя первым аргументом должен передаваться путь к файлу.

ivashkevich 09.12.2018 в 23:50

Имя файла - это тоже путь к файлу, просто он относительный (не полный). Получить от такого пути расширение - не проблема.

Pavel-Tonk 10.12.2018 в 00:09

Спасибо за объяснение, теперь все понятно)

Pavel-Tonk 08.12.2018 в 00:08
<?php 
if (!empty($_FILES['file'])) {
    $file = $_FILES['file'];
    $name = $file['name'];
    $tmp = $file['tmp_name'];
    $path = __DIR__.'/uploads/'.$name;
    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($path, PATHINFO_EXTENSION);
    $image = getimagesize($tmp);
    print_r($image);
    if ($file['error'] !== 0) {
        switch ($file['error']) {
            case 1:
            case 2:
                $error = 'Размер загружаемого файла превысил лимит';
                break;
            case 3:
            case 4:
                $error = 'Файл загружен частично или не загружен';
                break;
            case 6:
                $error = 'Отсутствует временная папка';
                break;
            case 7:
                $error = 'Не удалось записать файл на диск';
                break;
            default:
                $error = 'Ошибок не установлено';
                break;
        };
    } else if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } else if ($image['0'] !== '900' || $image['1'] !== '900') {
        $error = 'Разрешение картинки превысило допустимые';
    } else if (file_exists($path)) {
        $error = 'Файл с таким именем существует';
    } else if (!move_uploaded_file($tmp, $path)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = $path;
    }
}

как-то так.

ivashkevich 09.12.2018 в 01:17

Отличная обработка ошибок в switch-case!

Bogdan 29.12.2018 в 17:03

Позвольте загружать только файлы размером меньше 8Мб. Сделайте это с помощью сравнения с $_FILES['attachment']['size'].

$file = $_FILES['attachment'];
$maxFileSize = 8 * 1048576;

if ($file['size'] > $maxFileSize) { 
    $error = 'Превышен максимально допустимый обьем файла';
}

Изучите директиву upload_max_filesize в файле php.ini. Установите её значение, равное 2M. Перезапустите веб-сервер. Попробуйте теперь загрузить файл, размером в 5Мб. Теперь обработайте соответствующую ошибку с помощью проверки значения $_FILES['attachment']['error'].

    $errorExeptions= ['Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.',
        'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. ',
        'Загружаемый файл был получен только частично. ',
        'Файл не был загружен.',
        'Отсутствует временная папка. Добавлено в PHP 5.0.3. ',
        'Не удалось записать файл на диск. Добавлено в PHP 5.1.0. ',
        'PHP-расширение остановило загрузку файла. PHP не предоставляет способа определить, какое расширение остановило загрузку файла; в этом может помочь просмотр списка загруженных расширений с помощью phpinfo(). Добавлено в PHP 5.2.0. '];
$file = $_FILES['attachment'];

if (!in_array( $file['error'], $errorExeptions)){
    $index = $file['error'];
    $error = $errorExeptions[$index];
}

Разрешите загружать картинки с шириной не более 1280px и высотой не более 720px.

$file = $_FILES['attachment'];
$imageSize = getimagesize($file['tmp_name']);

if ($imageSize[0] > 1280 || $imageSize[1] > 720){
    $error = 'Высота или ширина картинки привышает допустимое ';
}
ivashkevich 01.01.2019 в 09:59

Хорошо. Вместо 1048576 лучше явно написать 1024*1024

Bogdan 02.01.2019 в 10:22

понял, спасибо, остался вопрос, на который я пока не нашел ответа

if (!in_array( $file['error'], $errorExeptions)){
    $index = $file['error'];
    $error = $errorExeptions[$index];
}

почему мы в if ставим "!", у нас же функция проверяет на совпадение и если оно есть, то выдает TRUE, а в блок if переходит при TRUE

ivashkevich 02.01.2019 в 20:57

А я не знаю, почему у Вас так написано, выглядит как ошибка. Вы проверяли код на работу перед отправкой?

Bogdan 03.01.2019 в 10:10

да, проверял, работает только когда стоит !

ivashkevich 03.01.2019 в 11:18

Подебажьте, посмотрите что не так.

o.i.popovich 08.01.2019 в 12:23

Добрый день. Подскажите как реализовать такой случай.

  • После оповещения, что Файл с таким именем уже существует, все равно его заменить.
ivashkevich 09.01.2019 в 21:29

Варианта 2:

  1. Удалить его и повторить операцию
  2. Перед копированием сразу проверить, не существует ли уже такого. Если существует, то удалить его.
N9PIX 30.01.2019 в 14:28
<?php
$allowedExtensions = ['jpg', 'png', 'gif'];
$extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
$filePath = $file['tmp_name'];
$file = $_FILES['attachment'];
if (!empty($_FILES['attachment'] ['size'] ['tmp_name'])) {
    $maxFile = 1024 * 1024 * 8;
    if ($_FILES['attachment'] ['size'] > $maxFile) {
        $error = 'Файл превышает допустимый размер';
        echo $error;
    } else {
        $file = $_FILES['attachment'];
    }
    $image = getimagesize($filePatch);
    $limitWidth = 1280;
    $limitHeight = 720;
    if ($image[1] > $limitWidth) {
        $error = 'Высота изображения не должна превышать 720 точек';
    }
    if ($image[0] > $limitHeight) {
        $error = 'Ширина изображения не должна превышать 1280 точек';
    }
}
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $sizeFiel = $file['size'];
} elseif ($file['error'] !== UPLOAD_ERR_OK) {
    $error = 'Ошибка при загрузке файла';
} elseif ($file['error'] !== UPLOAD_ERR_FORM_SIZE) {
    $error = 'Не допустимый размер файла';
} elseif ($file['error'] !== UPLOAD_ERR_PARTIAL) {
    $error = 'Файл загружен не полностью';
} elseif ($file['error'] !== UPLOAD_ERR_NO_FILE) {
    $error = 'Файл не был загружен';
} elseif ($file['error'] !== UPLOAD_ERR_NO_TMP_DIR) {
    $error = 'Отсутствует временная папка';
} elseif ($file['error'] !== UPLOAD_ERR_CANT_WRITE) {
    $error = 'Не удалось записать файл на диск';
} elseif ($file['error'] !== UPLOAD_ERR_EXTENSION) {
    $error = 'PHP-расширение остановило загрузку файла';
} elseif (file_exists($newFilePath)) {
    $error = 'Файл с таким именем уже существует';
} elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
    $error = 'Ошибка при загрузке файла';
} else {
    $result = 'http://myproject.loc/uploads/' . $srcFileName;
}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
<
ivashkevich 01.02.2019 в 23:46

ОК!

tigr 30.01.2019 в 17:35

У меня почему-то коды ошибок возвращаются в цифровом формате, а не в текстовом. Можете подсказать, почему так происходит?

$file = {array} [5]
 name = "1540109472475_default.jpg"
 type = "image/jpeg"
 tmp_name = "D:\Server\OSPanel\userdata\temp\php8A67.tmp"
 error = 0
 size = 125495
ivashkevich 01.02.2019 в 23:47

Они и должны быть числами)

babls2332@gmail.com 12.03.2019 в 21:42
if ($_FILES['attachment']['size'] < 80000) {
    echo $_FILES['attachment']['tmp_name'];
}
else{
    echo 'Размер файла больше 8 МБ';
}

if ($_FILES['attachment']['error'] === 1) {
    echo 'Превышен допустимый размер файла';
} else {
    echo $_FILES['attachment']['tmp_name'];

}

$allowedExtensions = ['jpg', 'png', 'gif'];
$extension = pathinfo($_FILES['attachment']['name'], PATHINFO_EXTENSION);
if (in_array($extension, $allowedExtensions)) {
    $size = getimagesize($_FILES['attachment']['tmp_name']);
    if ($size[0] < 1280 && $size[1] < 720) {
        echo 'Загрузка картинки разрешена';
    } else {
        echo 'Размеры изображения недопустимы';
    }
}
ivashkevich 14.03.2019 в 09:10

8Мб это 810241024.

babls2332@gmail.com 14.03.2019 в 09:12

Но алгоритм верный?

ivashkevich 14.03.2019 в 09:18

Алгоритм в порядке, но из-за некорректного значения код работает неправильно.

ashfedor 16.03.2019 в 10:56

Становится все интересней!

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $srcFileName = $file['name']; // определяем название файла
    $fileTmp = $file['tmp_name']; // файл в временном каталоге
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName; // определяем путь сохранения файлов
    $allowedExtensions = ['jpg', 'png', 'gif']; // задаем расширения файлов на загрузку
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION); //  проверка расширения файла
    $img = getimagesize($fileTmp);

    if ($file['size'] > 8 * 1024 * 1024) { // ограничиваем размер загружаемых файлов
        $error = 'Файл больше 8mb';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) { //  проверяем может ли сервер загрузить предлагаемый размер файла
        $error = 'Ограничение размера файла на стороне сервера';
    } elseif (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($img[0] > 1280 || $img[1] > 720){
        $error = 'Размеры сторон файла превышаеют заданные значения';
    }elseif ($file['error'] !== UPLOAD_ERR_OK) { //  проверяем на загрузуку
        $error = 'Ошибка Загрузки';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует!';

    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) { // проверяем файл в временном каталоге
    } else {
        $result = '/uploads/' . $srcFileName;// перемещаем файл по заданному адресу
    }
}
ivashkevich 17.03.2019 в 23:47

Отлично

Grewi 25.03.2019 в 01:37

Добавил функцию преобразования имени файла в более корректное и сделал вывод уже загруженных фото в каталоге.

<?php
$fileImg = ['jpg', 'png', 'gif']; //Разрешенные файлы
$fileSize = 2 * 1024 * 1024; //Максимально допустимый размер файла
$maxW = 1024; //Максимальная ширина изображения
$maxH = 1024; // Максимальная высота Изображения

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    function translit($s)
    {
        $s = (string)$s; // преобразуем в строковое значение
        $s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
        $s = trim($s); // убираем пробелы в начале и конце строки
        $s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
        $s = strtr($s, array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'y', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'ъ' => '', 'ь' => ''));
        $s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
        return $s; // возвращаем результат
    }

    $srcFileName = translit($file['name']); //С помощью фукнкции преобразуем имя файла
    $newFilePath = __DIR__ . '/upload/' . $srcFileName;
    $path_parts = pathinfo($file['name']);
    if ($file['tmp_name'] !== '') { //Если сервер не загрузил файл функции нечего проверять
        $maxSize = getimagesize($file['tmp_name']);
    }

    //Проверяем ошибки сервера
    if ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер принятого файла превысил максимально допустимый размер';
    } elseif ($file['error'] == UPLOAD_ERR_FORM_SIZE) {
        $error = 'Размер принятого файла превысил максимально допустимый размер';
    } elseif ($file['error'] == UPLOAD_ERR_PARTIAL) {
        $error = 'Файл загружен не полностью';
    } elseif ($file['error'] == UPLOAD_ERR_NO_FILE) {
        $error = 'Файл не загружен';
    } elseif ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) {
        $error = 'Отсутствует временная папка';
    } elseif ($file['error'] == UPLOAD_ERR_CANT_WRITE) {
        $error = 'Не удалось записать файл на диск';
    } elseif ($file['error'] == UPLOAD_ERR_EXTENSION) {
        $error = 'расширение остановило загрузку файла';
    } else {

        //Если временный файл загружен делаем остальные проверки

        if ($file['size'] > $fileSize) {
            $error = 'Файл слишком большой';
        } elseif (!in_array($path_parts['extension'], $fileImg)) {
            $error = 'Недопустимый тип файла';
        } elseif ($maxSize['0'] > $maxW || $maxSize['1'] > $maxW) {
            $error = 'Максимальный размер изображения: ' . $maxW . 'px X ' . $maxH . 'px ';
        } elseif (file_exists($newFilePath)) {
            $error = 'Такой файл уже существует!';
        } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
            $error = 'Ошибка при загрузке файла';
        } else {
            $result = $newFilePath;
        }
    }
}
//Вывод изображений из upload
$dir = scandir(__DIR__ . '/upload');
$path_parts = '';
foreach ($dir as $j) {
    $a = pathinfo($j);
    if (in_array($a['extension'], $fileImg)) {
        $path_parts .= '
        <a href="/upload/' . $a['basename'] . '"><img style="height: 100px;" src="/upload/' . $a['basename'] . '" alt=""></a>';
    }
}
//Список допустимых файлов в строку
foreach ($fileImg as $i) {
    $fileImgTxt .= $i . ', ';
}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Загрузка файлов</title>
</head>
<body>
<p style="margin: 25px 0; color: red;">К загрузке допустимы файлы: <?php echo $fileImgTxt; ?> размером не более: <?php echo $maxH; ?>
    на <?php echo $maxW; ?> пикселей. </p>
<?php if (empty($error)): ?>
    <form action="/upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="attachment">
        <input type="submit">
    </form>
<?php endif; ?>
</br></br>
<?php if (!empty($error)): ?>
    <?= $error ?> <a href="<?php echo '/upload.php' ?>">Вернуться</a>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
    </br></br>
    <a href="/upload/<?= $srcFileName ?>"><img src="/upload/<?= $srcFileName ?>" style="width: 100px;"></a>
<?php endif; ?>
<div style="margin-top: 25px;">
    <?php echo $path_parts; ?>
</div>
</body>
</html>
ivashkevich 25.03.2019 в 11:47

Не надо функции внутри условий объявлять, можно выстрелить себе в ногу.

$error = 'Такой файл уже существует!';

На самом деле не такой, а с таким же именем.

В остальном - отлично.

Grewi 25.03.2019 в 12:22

Спасибо, исправил.

<?php
$fileImg = ['jpg', 'png', 'gif']; //Разрешенные файлы
$fileSize = 2 * 1024 * 1024; //Максимально допустимый размер файла
$maxW = 1024; //Максимальная ширина изображения
$maxH = 1024; // Максимальная высота Изображения
function translit($s)
{
    $s = (string)$s; // преобразуем в строковое значение
    $s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
    $s = trim($s); // убираем пробелы в начале и конце строки
    $s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
    $s = strtr($s, array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'y', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'ъ' => '', 'ь' => ''));
    $s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
    return $s; // возвращаем результат
}

if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $srcFileName = translit($file['name']); //С помощью фукнкции преобразуем имя файла
    $newFilePath = __DIR__ . '/upload/' . $srcFileName;
    $path_parts = pathinfo($file['name']);
    if ($file['tmp_name'] !== '') { //Если сервер не загрузил файл функции нечего проверять
        $maxSize = getimagesize($file['tmp_name']);
    }

    //Проверяем ошибки сервера
    if ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер принятого файла превысил максимально допустимый размер';
    } elseif ($file['error'] == UPLOAD_ERR_FORM_SIZE) {
        $error = 'Размер принятого файла превысил максимально допустимый размер';
    } elseif ($file['error'] == UPLOAD_ERR_PARTIAL) {
        $error = 'Файл загружен не полностью';
    } elseif ($file['error'] == UPLOAD_ERR_NO_FILE) {
        $error = 'Файл не загружен';
    } elseif ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) {
        $error = 'Отсутствует временная папка';
    } elseif ($file['error'] == UPLOAD_ERR_CANT_WRITE) {
        $error = 'Не удалось записать файл на диск';
    } elseif ($file['error'] == UPLOAD_ERR_EXTENSION) {
        $error = 'расширение остановило загрузку файла';
    } else {

        //Если временный файл загружен делаем остальные проверки

        if ($file['size'] > $fileSize) {
            $error = 'Файл слишком большой';
        } elseif (!in_array($path_parts['extension'], $fileImg)) {
            $error = 'Недопустимый тип файла';
        } elseif ($maxSize['0'] > $maxW || $maxSize['1'] > $maxW) {
            $error = 'Максимальный размер изображения: ' . $maxW . 'px X ' . $maxH . 'px ';
        } elseif (file_exists($newFilePath)) {
            $error = 'Файл с таким именем уже существует!';
        } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
            $error = 'Ошибка при загрузке файла';
        } else {
            $result = $newFilePath;
        }
    }
}
//Вывод изображений из upload
$dir = scandir(__DIR__ . '/upload');
$path_parts = '';
foreach ($dir as $j) {
    $a = pathinfo($j);
    if (in_array($a['extension'], $fileImg)) {
        $path_parts .= '
        <a href="/upload/' . $a['basename'] . '"><img style="height: 100px;" src="/upload/' . $a['basename'] . '" alt=""></a>';
    }
}
//Список допустимых файлов в строку
foreach ($fileImg as $i) {
    $fileImgTxt .= $i . ', ';
}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Загрузка файлов</title>
</head>
<body>
<p style="margin: 25px 0; color: red;">К загрузке допустимы файлы: <?php echo $fileImgTxt; ?> размером не более: <?php echo $maxH; ?>
    на <?php echo $maxW; ?> пикселей. </p>
<?php if (empty($error)): ?>
    <form action="/upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="attachment">
        <input type="submit">
    </form>
<?php endif; ?>
</br></br>
<?php if (!empty($error)): ?>
    <?= $error ?> <a href="<?php echo '/upload.php' ?>">Вернуться</a>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
    </br></br>
    <a href="/upload/<?= $srcFileName ?>"><img src="/upload/<?= $srcFileName ?>" style="width: 100px;"></a>
<?php endif; ?>
<div style="margin-top: 25px;">
    <?php echo $path_parts; ?>
</div>
</body>
</html>
ivashkevich 25.03.2019 в 12:55

Отлично

XXX 06.04.2019 в 17:01
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $maxSize = $_FILES['size'];
    $filePath = $file['tmp_name'];
    $imageSize = getimagesize($filePath);

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем существует!';
    } elseif ($_FILES['attachment']['size'] > 8 * 1024 * 1024) {
        $error = 'файл слишком болььшой';
    } elseif ($imageSize['0'] > 768 || $imageSize['1'] > 1280) {
        $error = 'Недопустумый размер изображения';
    } elseif (move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $result = 'http;//myproject.log/www/uploads' . $srcFileName;
    } else {
        $error = 'Ошибка при загрузке файла!';
    }
    /*
    elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {               // Первый вариант ошибок
    $error = 'Недопустимый размер файла.';
    } elseif ($file['error'] == UPLOAD_ERR_FORM_SIZE) {
    $error = 'Недопустимый размер файла.';
    } elseif ($file['error'] == UPLOAD_ERR_PARTIAL) {
    $error = 'Загружаемый файл был получен только частично.';
    } elseif ($file['error']== UPLOAD_ERR_NO_FILE) {
    $error = 'Файл не был загружен.';
    } elseif ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) {
    $error = 'Отсутствует временная папка.';
    } elseif ($file['error'] == UPLOAD_ERR_CANT_WRITE) {
    $error = 'Не удалось записать файл на диск.';
    } elseif ($file['error'] == UPLOAD_ERR_EXTENSION) {
    $error = 'PHP-расширение остановило загрузку файла.';
    }
    */
    switch ($file['error']) {                                     // Второй вариант ошибок
        case 1:
            $error = 'Недопустимый размер файла.';
            break;
        case 2:
            $error = 'Недопустимый размер файла.';
            break;
        case 3:
            $error = 'Загружаемый файл был получен только частично.';
            break;
        case 4:
            $error = 'Файл не был загружен.';
            break;
        case 6:
            $error = 'Отсутствует временная папка.';
            break;
        case 7:
            $error = 'Не удалось записать файл на диск.';
            break;
        case 8:
            $error = 'PHP-расширение остановило загрузку файла.';
            break;
    }

}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 06.04.2019 в 17:59

Супер! Второй вариант ошибок выглядит лучше.

polvanovv 07.04.2019 в 13:46
$srcFileName = $file['name'];
$fileResolution = getimagesize($file['tmp_name']);

1.

elseif ($file['size'] > 1024*1024*8){
        $error = 'Слишком большой размер файла.';
    }

2.

elseif ($file['error'] == UPLOAD_ERR_INI_SIZE){
        $error = 'Размер файла привышает 2Mb';
    }

3.

elseif ($fileResolution[0] > 1280 || $fileResolution[1] > 720){
        $error = 'Слишком большой размер изображения';
    }
ivashkevich 08.04.2019 в 21:37

Отлично =)

Boodoo 07.04.2019 в 21:30
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $maxWidth = 1280;
    $maxHeight = 720;
    $width = getimagesize($file['tmp_name'])[0];
    $height = getimagesize($file['tmp_name'])[1];

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif($width > $maxWidth || $height > $maxHeight) {
        $error = 'Разрешение файла превышено.';
    } elseif($file['size'] > 8388608) {
        $error = 'Размер файла должен быть не больше 8 мб.';
    } elseif ($file['error'] !== UPLOAD_ERR_INI_SIZE) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
ivashkevich 08.04.2019 в 21:39

Все хорошо, но вот такие числа - 8388608, лучше записывать в виде произведения исходных чисел (1024*1024*8), или выносить в константы с комментарием, что это за значение такое:

// 8Mb
const SIZE_LIMIT = 1024*1024*8;
Boodoo 08.04.2019 в 21:48

Ок

Dram 25.04.2019 в 17:56

Странно, куда пропадают мои ответы? Пропали более 5 комментов к прошлым урокам и я вчера на этой странице оставлял решение домашки №1 - тоже пропало.

повторяю, домашка №1

elseif ($file['size'] > 5120) {
        $error = 'Ограничение при загрузке файло - 5 кб.';
    } 
ivashkevich 25.04.2019 в 17:58

Почему не 8мб? 5кб это 5*1024

Dram 25.04.2019 в 18:00

Ну лень было картинку искать такого размера - по сути же правильно ?

ivashkevich 25.04.2019 в 18:02

Да

Dram 25.04.2019 в 18:09

№2

      elseif ($_FILES['attachment']['error']) {
        $error = 'Ограничение при загрузке файлов - блаблабла';
    }
ivashkevich 29.04.2019 в 11:27

Что ещё за блабла?

Dram 29.04.2019 в 11:29

Вы оцениваете коммент или правильность кода?

ivashkevich 29.04.2019 в 11:44

Я оцениваю в целом, годится такое решение или нет. Непонятно, что именно за ошибка произошла.

Dram 25.04.2019 в 19:35

Понимаю что задание №3 нужно делать через getimagesize но блин 3 часа убил чтобы вывести ее var_damp

<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $image = getimagesize($newFilePath);
     var_dump($image);

получаю ошибки типа
Warning: getimagesize(C:\OSPanel\domains\localhost/uploads/6a9399f6562218e96dfd352e3b3868fc.jpg): failed to open stream: No such file or directory in C:\OSPanel\domains\localhost\index.php on line 8
Что не так - не нравятся слеши в пути к картинке?

ivashkevich 29.04.2019 в 11:28

Ну так там нет ещё этого файла. Вы же его ещё не скопировали.

artemship 04.05.2019 в 13:10
<?php
if (!empty($_FILES)) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    $valueMB = 8;
    $allowedFileSize = $valueMB * 1024 * 1024;
    $allowedImageWidth = 1280;
    $allowedImageHeight = 720;

    if (file_exists($file['tmp_name'])){
        $imageParams = getimagesize($file['tmp_name']);
        $imageWidth = $imageParams[0];
        $imageHeight = $imageParams[1];
    }

    if ($file['error'] !== UPLOAD_ERR_OK) {
        switch ($file['error']) {
            case UPLOAD_ERR_INI_SIZE:
                $error = 'Размер файла превысил максимально допустимый размер в '
                    . get_cfg_var('upload_max_filesize')
                    . ', который задан директивой конфигурационного файла php.ini';
                break;
            case UPLOAD_ERR_FORM_SIZE:
                $error = 'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме';
                break;
            case UPLOAD_ERR_PARTIAL:
                $error = 'Загружаемый файл был получен только частично';
                break;
            case UPLOAD_ERR_NO_FILE:
                $error = 'Файл не был загружен';
                break;
            case UPLOAD_ERR_NO_TMP_DIR:
                $error = 'Отсутствует временная папка';
                break;
            case UPLOAD_ERR_CANT_WRITE:
                $error = 'Не удалось записать файл на диск';
                break;
            case UPLOAD_ERR_EXTENSION:
                $error = 'Загрузка файла остановлена расширением';
                break;
            default:
                $error = 'Неизвестная ошибка при загрузке файла';
                break;
        }
    } elseif ($file['size'] > $allowedFileSize) {
        $error = 'Размер файла не может превышать ' . $valueMB . ' мб!';
    } elseif (!in_array(strtolower($extension), $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($imageWidth > $allowedImageWidth || $imageHeight > $allowedImageHeight) {
        $error = 'Изображение должно быть не больше, чем ' . $allowedImageWidth . 'x' . $allowedImageHeight . 'px';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует!';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузки файла!';
    } else {
        $result = 'http://phpbeg4.loc/uploads/' . $srcFileName;
    }
}
?>

<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>

getimagesize выдавал ошибку, когда нажимал "отправить", не выбрав файл. Или когда размер файла превышал заданный размер в php.ini (файл не приходил). Поэтому пришлось предварительно обернуть в условие:

    if (file_exists($file['tmp_name'])){
        $imageParams = getimagesize($file['tmp_name']);
        $imageWidth = $imageParams[0];
        $imageHeight = $imageParams[1];
    }

Но теперь PHPStorm меня предупреждает о том, что переменные $imageWidth и $imageHeight могут быть не объявлены. Можно просто проигнорировать?)
А еще функция strtolower помогла учитывать файлы, у которых расширение было прописано верхним регистром :)

ivashkevich 04.05.2019 в 14:24

Отличное домашнее задание!
А вот шторм правильно говорит. В случае, когда временного файла нет, то нужно сразу об этом написать и выдать ошибку: не удалось загрузить файл. После чего сразу завершать скрипт.

if (!file_exists($file['tmp_name'])) {
    // тут формируем ошибку и дальше уже ничего не проверяем
} else {
    // тут уже ваш код
}
artemship 04.05.2019 в 14:55

Спасибо! Вроде все понятно, но предупреждение шторма все равно осталось, т.к. переменные используются в проверке ниже (после switch):

} elseif ($imageWidth > $allowedImageWidth || $imageHeight > $allowedImageHeight) {
        $error = 'Изображение должно быть не больше, чем ' . $allowedImageWidth . 'x' . $allowedImageHeight . 'px';

И вроде никаким образом скрипт не сработает в этом месте, если файл не пришел, но шторм все равно предупреждает :D

ivashkevich 04.05.2019 в 14:59

Вот этот блок:

        $imageParams = getimagesize($file['tmp_name']);
        $imageWidth = $imageParams[0];
        $imageHeight = $imageParams[1];

Вот этот код должен быть не внутри какого-то условия. Он должен гарантированно выполниться перед if-ом, про который вы говорили.

artemship 05.05.2019 в 12:08

Разобрался, спасибо!

krollik1000000@gmail.com 16.05.2019 в 21:47
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $filePath = $file['tmp_name'];
    $srcFileName = $file['name'];
    $image = getimagesize($filePath);
    $newFilePath = __DIR__ . '/uplode/' . $srcFileName;
    $sizeFiles = $_FILES['attachment']['size'];
    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    $maxWith = 1280;
    $maxHeight = 720;
    if ($file['error'] === UPLOAD_ERR_INI_SIZE) {
        $error = 'превышен размер файла';
    } else if ($file['error'] === UPLOAD_ERR_NO_FILE) {
        $error = 'файл не обнаружен';
    } else if ($file['error'] === UPLOAD_ERR_NO_TMP_DIR) {
        $error = 'отсутствует директория для сохранения фалов';
    } else if (!in_array($extension,$allowedExtensions)) {
        $error = 'не допустимый формат';
    } else if ($image[0] > $maxHeight && $image[1] > $maxWith) {
        $error = 'недопустимые параметры изображения ширина или высота';
    } else if ($sizeFiles> 8 * 1024 * 1024) {
      $error = 'превышен размер файла';
    } else if (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = $newFilePath;
    }
}
ivashkevich 17.05.2019 в 21:46

Ок. Но elseif слитно пиши)

Moskva 11.06.2019 в 11:14
if(!empty($_FILES)){
    $file = $_FILES['attachment'];
    $sizeImage = getimagesize($file['tmp_name']);
}

1.

if ($_FILES['attachment']['size'] > 8388608){
    $error = 'Размер файла не должен превышать 8 мбайт';
}

2.

}elseif ($file['error'] !== UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла превышает 2 мб';
    }

3.

} elseif(($sizeImage[0] > 1280 ) || ($sizeImage[1] > 720)){
    $error = 'Размер изображения превышает 1280*720';
}
ivashkevich 11.06.2019 в 11:16

Отлично!

esqrx 16.06.2019 в 03:07
$fileSize = getimagesize($file['tmp_name']);

...

} elseif ($file['size'] >= 8388608){
        $error = 'Размер превышает 8M';
} elseif ($file['error'] == 1){
        $error = 'Значение: 1; Размер принятого файла и т. д.';
} elseif ($fileSize['0'] > 1280 and $fileSize['1'] > 720) {
        $error = 'Нельзя загружать картинки с шириной более 1280px и высотой более 720px';
ivashkevich 17.06.2019 в 09:58

8388608 - вот такое лучше записывать как 1024 1024 8 + выносить в константы.

$fileSize - лучше назвать imageSize, чтобы было понятнее, что там не мегабайты.

В остальном - отлично

Reechniy 15.07.2019 в 07:06
<?php
if(!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtensions = ['jpg', 'png', 'gif', 'pdf'];
    $maxSize = $file['size'];
    $limitBytes = 8*1024*1024;
    $limitWidth = 1280;
    $limitHeight = 768;
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    $filePath = $file['tmp_name'];
    $image = getimagesize($filePath);

    if ($maxSize > $limitBytes) {
        $error = 'Файл слишком большого размера';
    } elseif ($file ['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла слишком большой';
    } elseif ($image[1]>$limitHeight || $image[2]>$limitWidth) {
        $error = 'Расширение файла слишком большое';
    }
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    }
       if ($file['error'] !==UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 15.07.2019 в 08:13
$image = getimagesize($filePath);

Переменную лучше назвать imageSize.

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

В остальном отлично.

AlexxxEy 20.07.2019 в 01:43
<?php
if(!empty($_FILES)){
    var_dump($_FILES);
}
if (!empty($_FILES['attachment'])){
    $file = $_FILES['attachment'];
    $filepath = $file['tmp_name'];
    $image = getimagesize($filepath);
    $MaxWidth = 1280;
    $MaxHeight = 720;
    $srcNameFile = $file['name'];
    $newFileName = __DIR__ . '/uploads' . $srcNameFile;
$allowedExtensions = ['jpg', 'png', 'gif'];
$extension = pathinfo($srcNameFile, PATHINFO_EXTENSION);
if($file['error'] == UPLOAD_ERR_INI_SIZE){
    $error = 'Размер файла превышает 1 М';
}elseif(!in_array($extension, $allowedExtensions)){
    $error = 'Загрузка файла с таким расширением запрещена';
}elseif($file['size'] > 10 ** 8 ){
    $error = 'Размер файла превышает доступный';
}elseif($file['error']!== UPLOAD_ERR_OK){
    $error = 'Ошибка при загрузке файла';
}elseif($image > $MaxWidth || $image > $MaxHeight){
    $error = "Разрешение файла слишком велико";
}elseif(file_exists($newFileName)) {
    $error = 'Файл с таким именем уже существует';
}elseif(!move_uploaded_file($file['tmp_name'], $newFileName)){
        $error = 'Файл не найден';
    }else{
        $result = 'http://localhost/uploads/' . $srcNameFile;
    }
}
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if(!empty($error)): ?>
<?= $error ?>
<?php elseif(!empty($result)): ?>
<?= $result ?>
<?php endif; ?>
<form action="/uploads/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 20.07.2019 в 14:43

Всё отлично, кроме

}elseif($file['size'] > 10 ** 8 ){

Откуда это значение?

Dreft 03.09.2019 в 09:17
<?php
    if (!empty($_FILES['attachment'])) {
        $file = $_FILES['attachment'];
        $srcFileName = $file['name'];
        $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
        $maxFileSize = 1024 * 1024 * 8;
        $fileSize = $_FILES['attachment']['size'];
        $imageSize = getimagesize($file['tmp_name']);
        $maxWidth = 1280;
        $maxHeight = 720;
        $allowedExtensions = ['jpg', 'png', 'gif', 'wmv'];
        $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
        if (!in_array($extension, $allowedExtensions)) {
            $error = 'Загрузка файлов с таким расширением запрещена!';
        } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
            $error = 'Размер файла слишком большой';
        } elseif ($imageSize[0] > $maxWidth || $imageSize[1] > $maxHeight) {
            $error = 'Максимальное разрешение изображения - 1280x720 <br>
                       Текущее разрешение -  ' . $imageSize[0] . 'x' . $imageSize[1];
        } elseif ($file['error'] !== UPLOAD_ERR_OK) {
            $error = 'Ошибка при загрузке файла.';
        } elseif (file_exists($newFilePath)) {
            $error = 'Файл с таким именем уже существует';
        } elseif ($fileSize > $maxFileSize) {
            $error = 'Нельзя загружать файлы более 8МБ';
        } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
            $error = 'Ошибка при загрузке файла';
        } else {
            $result = 'http://myproject.loc/uploads/' . $srcFileName;
        }
    }
?>
<html>
<head>
    <title>Загрузка файла</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<br>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 03.09.2019 в 09:43

Отлично

XXX 08.09.2019 в 19:43
elseif ($file['size'] > 8 * 1024 * 1024) {
    $error = 'Файл слишком большой.';
}
elseif ($file['error'] !== UPLOAD_ERR_OK) {
    switch ($file['error']) {
        case 1:
            $error = 'Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.';
            break;
        case 2:
            $error = 'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.';
            break;
        case 3:
            $error = 'Загружаемый файл был получен только частично.';
            break;
        case 4:
            $error = 'Файл не был загружен.';
            break;
        case 6:
            $error = 'Отсутствует временная папка.';
            break;
        case 7:
            $error = 'Не удалось записать файл на диск..';
            break;
        case 8:
            $error = 'PHP-расширение остановило загрузку файла.';
            break;
        default:
            $error = 'Неизвестная ошибка';
    }
}
$filePath = $file['tmp_name'];
$sizeImage = getimagesize($filePath);

elseif ($sizeImage[0] > 1280 || $sizeImage[1] > 720) {
    $error = 'Недопустимые габариты изображения';
}
ivashkevich 09.09.2019 в 20:33

Отлично

Vladimir96 14.09.2019 в 04:29
<?php
    if (!empty($_FILES['attachment'])) {
        $file = $_FILES['attachment'];

        $srcFileName = $file['name'];
        $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

        $allowedExtensions = ['jpg' , 'png', 'gif'];
        $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

        $image = getimagesize($file['tmp_name']);
        $width = 1280;
        $height = 720;

        if(!in_array($extension, $allowedExtensions)){
            $error = 'Загрузка файлов с таким расширением запрещена';
        } elseif ($image[0] > $width || $image[1] > $height) {
            $error = 'Загрузите файл с расширением не более 1280x720';
        } elseif($file['error'] === 1) {
            $error = 'Загрузите на сервер файл меньше 2МБ';
        } elseif ($file['size'] > (1024 * 1024 * 8)){
            $error = 'Загрузите файл меньше 8МБ';
        } elseif($file['error'] === UPLOAD_ERR_INI_SIZE) {
            $error = ' Размер принятого файла превысил максимально допустимый размер';
        } elseif($file['error'] === UPLOAD_ERR_FORM_SIZE) {
            $error = 'Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.';
        } elseif($file['error'] === UPLOAD_ERR_PARTIAL) {
            $error = 'Загружаемый файл был получен только частично.';
        } elseif($file['error'] === UPLOAD_ERR_NO_FILE) {
            $error = ' Файл не был загружен.';
        } elseif($file['error'] === UPLOAD_ERR_NO_TMP_DIR) {
            $error = 'Отсутствует временная папка.';
        } elseif($file['error'] === UPLOAD_ERR_CANT_WRITE) {
            $error = 'Не удалось записать файл на диск.';
        } elseif($file['error'] === UPLOAD_ERR_EXTENSION) {
            $error = 'PHP-расширение остановило загрузку файла.';
        } elseif(file_exists($newFilePath)){
            $error = 'файл с таким именем уже существует';
        } elseif($file['error'] !== UPLOAD_ERR_OK) {
            $error = 'Ошибка при запуске файла.'; 
        } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
            $error = 'Ошибка при загрузке файла';
        } else {
            $result = 'http://textfiletwo/uploads/' . $srcFileName;
        }
    }
ivashkevich 14.09.2019 в 19:26

Отлично

Ooleg 24.09.2019 в 18:16
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    // собираем путь до нового файла - папка uploads в текущей директории
    // в качестве имени оставляем исходное файла имя во время загрузки в браузере
    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $fileSize = $file['size'];
    $allowedFileSize = 8388608;
    if (file_exists($file['tmp_name'])) {
        $fileHW = getimagesize($file['tmp_name']);
    }
    $maxFileWidth = 1280;
    $maxFileHeight = 720;

    if (!is_dir(__DIR__ . '/' . 'uploads')) {
        mkdir(__DIR__ . '/' . 'uploads');
    }

    $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким разрешением запрещена!';
    }
    elseif ($fileSize > $allowedFileSize || $file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Превышен максимальный размер файла!';
    }
    elseif ($maxFileWidth < $fileHW[0] || $maxFileHeight < $fileHW[1]) {
        $error = "Допустимое разрешение файла не больше $maxFileWidth на $maxFileHeight";
    }
    elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка призагрузке файла';
    }
    elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    }
    elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
ivashkevich 24.09.2019 в 20:20

Отлично

prinzplanloser0514@gmail.com 28.09.2019 в 12:49

Cтранно,я 10 раз проверил пути по которым записываю файл,но у меня он не хочет сохраняться в директории (пользуюсь убунту)


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

ivashkevich 29.09.2019 в 12:03

Молодец)

prinzplanloser0514@gmail.com 28.09.2019 в 15:10

В последнем,завершённом коде,каким образом мы файл из временной директории переносим в окончательную? Из урока я понял,что нужно вызывать move_uploaded_file,но я не вижу,чтобы мы его где-то вызывали.

ivashkevich 29.09.2019 в 12:06

А ты получше посмотри) он там есть

prinzplanloser0514@gmail.com 29.09.2019 в 12:28

Он там есть только в виде проверки условия !move_uploaded_file($file['tmp_name']


Почитал комменты выше,понял как работает) С первого раза и не поймёшь.

dliashchenko 02.10.2019 в 22:19
<?php
if(!empty($_FILES['attachment'])) {

    $file = $_FILES['attachment'];
    $srcFileName = $file['name'];
    $srcSize = $file['size'];
    $maxSize = 8 * 1024 * 1024;
    $maxWidth = 1280;
    $maxHeight = 768;
    $filePath =  $file['tmp_name'];
    $img = getimagesize($filePath);
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtension = ['jpg', 'pdf', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    if(!in_array($extension, $allowedExtension)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE){
        $error = 'Файл превысил максимально допустимый размер.';
    } elseif ($srcSize >= $maxSize) {
        $error = 'Файл не должен быть больше 8MB.';
    } elseif ($img[0] > $maxWidth && $img[1] > $maxHeight ){
        $error = 'Ширена и высота изображения привышают допустимый размер';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif (!move_uploaded_file($filePath, $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}

Исправил.

ivashkevich 03.10.2019 в 00:43
$maxSize = 8388608

лучше представлять такие числа в виде исходных чисел (8 * 1024 * 1024), и выносить в константы. Или хотя бы комменировать. Потому что сходу непонятно, что это такое.

H3licoptero 10.10.2019 в 16:46
if (!empty($_FILES['attachment'])) {
    $file = ($_FILES['attachment']);

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtension = ['jpg', 'png', 'gif', 'JPG'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    $sizeFile = $file['size'];
    $shortTimeFile = $file['tmp_name'];
    $widthMax = 1280;
    $heightMax = 780;
    $imageResolve = getimagesize($shortTimeFile);

    if ($_FILES['attachment']['error'] === UPLOAD_ERR_INI_SIZE) {
        $error = 'Превышен размер файла.';
    } elseif ($_FILES['attachment']['error'] === UPLOAD_ERR_NO_FILE) {
        $error = 'Не передан файл.';
    } elseif ($sizeFile > 1024 * 1024 * 8) {
        $error = 'Файл превышает размер по умолчанию.';
    } elseif ($imageResolve['1'] > $widthMax || $imageResolve['0'] > $heightMax) {
        $error = 'Превышено максимальное разрешение файла.';
    } elseif (!in_array($extension, $allowedExtension)) {
        $error = 'Загрузка файлов с таким расширением недоступна.';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует.';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла.';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
ivashkevich 10.10.2019 в 17:01

Супер!

Логические задачи с собеседований