Чат 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

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

studentDev Patron 12.04.2020 в 13:33

Перепутал width с height, а height с width.

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

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

noname11.11@icloud.com 31.01.2020 в 18:48

тут выдает варнинг при отсутствии файла для загрузки по переменной $fileSizeWidthHeight = getimagesize($filePatch);

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

Поправил

stokato 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

Супер!

eNergy 16.01.2020 в 12:50
<?php
    if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];

    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $allowedExtensions = ['jpg', 'gif', 'png'];
    $extension = pathinfo($newFilePath, PATHINFO_EXTENSION);
    $imgResolution = getimagesize($file['tmp_name']);

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

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

IgorG 24.01.2020 в 15:12
1) elseif ($_FILES['attachment']['size'] >= 8 * 1024 * 1024) {
       // $error = 'Файлик больше 8 мб.';
}

2) elseif ($file['error'] === UPLOAD_ERR_INI_SIZE) {
       // $error = 'Большой размер загружаемого файла (MAX 2 MB).';
}

3) $image = getimagesize($_FILES['attachment']['tmp_name']);
    $limitWidth  = 1280;
    $limitHeight = 720;

   elseif (($image[1] > $limitHeight) || ($image[0] > $limitWidth)){
        $error = 'Разрешение файла больше 1280 х 720.';
}
ivashkevich 25.01.2020 в 13:45

Отлично. Только переменной $image стоит дать более осмысленное название.

YuraG 26.01.2020 в 21:57
<?php
if (!empty($_FILES['attach'])){
    $file = $_FILES['attach'];

    $srcFileName = $file['name'];
    $newFilePath =  __DIR__. '/uploads/' . $srcFileName;
    @list($imageWidth, $imageHeight) = getimagesize($file['tmp_name']);

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

    if (!in_array($extension, $allowedExtension)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла привысил разрешенный сервером!';
    } elseif ($file['error'] != UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif ($imageWidth > 1280 || $imageHeight > 720) {
        $error = 'Файл привысил допустимую высоту или ширину !';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif ($file['size'] >= 8388608) {
        $error = 'Файл привысил допустимый размер в 8 MB ';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = __DIR__ .  DIRECTORY_SEPARATOR .'uploads' . DIRECTORY_SEPARATOR . $srcFileName;
    }
}
?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Upload File</title>
</head>
<body>
<?php if(!empty($error)): ?>
    <?= $error ?>
<?php elseif(!empty($result)): ?>
    <a href="<?= $result ?>"><?= $srcFileName ?></a>
<?php endif; ?>
<br>
<form action=<?= $_SERVER['REQUEST_URI'] ?> method="post" enctype="multipart/form-data">
    <input type="file" name="attach">
    <input type="submit">
</form>
</body>
</html>
ivashkevich 28.01.2020 в 18:50
@list($imageWidth, $imageHeight) = getimagesize($file['tmp_name']);

За собачек в 2020 бьют по рукам)

И на сегодняшний момент вот такой синтаксис актуален:

[$imageWidth, $imageHeight] = getimagesize($file['tmp_name']);

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

За DIRECTORY_SEPARATOR плюсик в карму от меня :)

YuraG 28.01.2020 в 22:30

<?php
define('FILE_SIZE', (8 * 1024 * 1024));

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

    $srcFileName = $file['name'];
    $newFilePath =  __DIR__. '/uploads/' . $srcFileName;
    [$imageWidth, $imageHeight] = getimagesize($file['tmp_name']);

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

    if (!in_array($extension, $allowedExtension)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла привысил разрешенный сервером!';
    } elseif ($file['error'] != UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif ($imageWidth > 1280 || $imageHeight > 720) {
        $error = 'Файл привысил допустимую высоту или ширину !';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
    } elseif ($file['size'] >= FILE_SIZE) {
        $error = 'Файл привысил допустимый размер в 8 MB ';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = __DIR__ .  DIRECTORY_SEPARATOR .'uploads' . DIRECTORY_SEPARATOR . $srcFileName;
    }
}
?>

[$imageWidth, $imageHeight] = getimagesize($file['tmp_name']);
вот тут получаю иногда: Warning: getimagesize(): Filename cannot be empty in upload.php on line 9
когда файл не грузится из - за ошибок при загрузке $_FILES['attach']['error']. Мне так кажется.
Как правильно обработать такой случай?
ivashkevich 29.01.2020 в 06:27

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

Salexandr 04.02.2020 в 00:30
$fileTmpName = $file['tmp_name'];
$imageSize = getimagesize($fileTmpName);

    if ($file['size'] >= 8 * 1024 * 1024) {
        $error = 'Загружаемый файл не должен превышать 8 Мб';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла больше значения upload_max_filesize в php.ini';
    } elseif ($imageSize[1] > 768 || $imageSize[0] > 1280) {
        $error = 'Разрешение изображения не должно превышать 1280х768';
ivashkevich 04.02.2020 в 13:18

Отлично

lexx115@mail.ru 22.03.2020 в 15:17

Первое задание:

elseif ($file['size'] > 8 * 1024 * 1024) {
        $error = 'Размер загружаемого файла больше 8 МБ.';
    }

Второе задание:

elseif ($file['error'] === 1) {
        $error = 'Размер принятого файла превысил максимально допустимый размер.';
    }

Третье задание:

    $sizeImage = getimagesize($file['tmp_name']);
      elseif ($sizeImage['0'] > 1280 || $sizeImage['1'] > 720) {
        $error = 'Ширина или высота изображения больше 1280px или 780px соответственно';
    }

Но не могу понять с 3-им заданием. При загрузке изображения с шириной и высотой больше указанных, пишется сообщение об ошибке, но всё равно файл загружается в папку. Такого же не должно быть?

ivashkevich 22.03.2020 в 17:50

Смотря о какой папке речь. О временной, или о папке, в которую мы в итоге картинки сохраняем?

lexx115@mail.ru 22.03.2020 в 18:06

В папку uploads, в которую мы в итоге картинки сохраняем.

ivashkevich 22.03.2020 в 18:08

Ну конечно это неправильно) Разбирайтесь с отладчиком, что не так

lexx115@mail.ru 22.03.2020 в 18:29

Разобрался всё-таки))
Было:

    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла!!!';
    } elseif ($sizeImage['0'] > 1280 || $sizeImage['1'] > 720) {
        $error = 'Ширина или высота изображения больше 1280px или 780px соответственно';
    }

Стало:

    } elseif ($sizeImage['0'] > 1280 || $sizeImage['1'] > 720) {
        $error = 'Ширина или высота изображения больше 1280px или 780px соответственно';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) { //функция загрузки и проверки файла
        $error = 'Ошибка при загрузке файла!!!';
    }

Теперь не загружает того, чего не надо))

pollaltermann@gmail.com 31.03.2020 в 22:08
<?
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;
    }
}
?>
ivashkevich 01.04.2020 в 04:41

Отлично

gizbreht.e@yandex.ru 09.04.2020 в 10:41
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/upload/' . $srcFileName;
    $allowedExtentions = ['gif', 'png', 'jpg'];
    $extention = pathinfo($newFilePath, PATHINFO_EXTENSION);
    $fileSize = $file['size'] / 1024 ** 2;
    $imageSize = getimagesize($file['tmp_name']);

    if(!in_array($extention, $allowedExtentions)) {
      $error = 'Недопустимое расширение файла';
    }  else {
      if($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла';
      }
      elseif($imageSize[0] > 1200 || $imageSize[1] > 720) {
        $error = "Превышены допустимые размеры изображения";
      }
      elseif($fileSize > 8){
        $error = 'Превышен допустимый размер файла';
      }
      elseif(file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
      } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
          $error = 'Ошибка при загрузке файла';
      } else {
          $result = 'http://myproject.loc/upload/' . $srcFileName;
      }
    }

}
?>
ivashkevich 09.04.2020 в 10:50

Отлично!

studentDev Patron 12.04.2020 в 15:32
<?php
        if(isset($_FILES)) {
            $file = $_FILES['attachment'];
            $fileName = $file['name'];
            $fileDir = __DIR__ . '/uploads/' . $fileName;
            $fileTmp = $_FILES['attachment']['tmp_name'];
            $maxWidthImage = 1024;
            $maxHeightImage = 400;
            $sizeInMb = 8;
            $size = $sizeInMb * 1024 * 1024;

            $allowed = ['png', 'jpg', 'gif', 'mp3'];
            $lookFormat = pathinfo($fileName, PATHINFO_EXTENSION);

            $image = @getimagesize($fileTmp);

            if (!in_array($lookFormat, $allowed)) {
                $error = 'Ошибка, разрешены только форматы .jpg .png .gif !';
            } elseif($image[0] > $maxWidthImage || $image[1] > $maxHeightImage) {
                $error = 'Недопустимое разрешение изображения!';
            } elseif ($file['size'] > $size) {
                $error = 'Этот файл больше 8 мб!';
            } elseif ($file['error'] === 1) {
                $error = 'Ваша файл слишком велик!';
            } elseif ($file['error'] === 2) {
                $error = 'Ваш файл превысил размер стандартного значения!';
            } elseif ($file['error'] === 3) {
                $error = 'Файл был загружен частично!';
            } elseif ($file['error'] === 4) {
                $error = 'Файл не был загружен, попробуйте ещё раз!';
            } elseif ($file['error'] === 6) {
                $error = 'Отсутствует временная папка на сервере, обратитесь в тех. поддержку!';
            } elseif ($file['error'] === 7) {
                $error = 'Не удалось записать файл на диск сервера!';
            } elseif ($file['error'] == 8) {
                $error = 'Ошибка сервера!';
            } elseif (file_exists($fileDir)) {
                $error = 'Файл с таким именем ' . $fileName . ' существует!';
            } elseif (!move_uploaded_file($file['tmp_name'], $fileDir)) {
                $error = 'Файл не загружен...';
            } else {
                $result = 'http://upload.com/uploads' . $fileName;
            }
        }

Я прописал подавление ошибки у функции getimagesize(), потому что меня ругали что имя файла не может быть пустым (filename cannot be empty), я уже пытался самостоятельно создавать временный файл и нечего не получилось :(
Есть ли какие-нибудь способы устранение данной ошибки?

ivashkevich 13.04.2020 в 14:42

По коду всё ок, с ошибкой такой ранее не сталкивался, погуглите

mornind@gmail.com 14.04.2020 в 08:57

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

Добавил

if ($file['size'] > 8 * 1024 * 1024) {
        $error = 'Файл слишком большой!';

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

Не увидел особой необходимости в этой проверке, если мы контролируем размер файла, как в первом задании.
Единственный вариант применения, который пришел в голову, - если мы пока что не знаем, что задано в php.ini. Поэтому:

if ($file['size'] > 8 * 1024 * 1024) {
        $error = 'Файл слишком большой!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Я то согласен, что файл небольшой, а вот сервер считает иначе <br> Обратитесь к администратору сервера!';

В целом обработчик ошибок у меня выглядит так:

//Обрабатываем ошибки:
    if ($file['size'] > 8 * 1024 * 1024) {
        $error = 'Файл слишком большой!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        $error = 'Я то согласен, что файл небольшой, а вот сервер считает иначе <br> Обратитесь к администратору сервера!';
    } 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;
    }

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

$file = $_FILES['attachment'];
$srcFileName = $file['name'];
$newFilePath = __DIR__ . '/uploads/' . $srcFileName;
$size = getimagesize($newFilePath);
if ($size[0] > 1280 or $size[1] > 720) {
$error = 'Разрешено загружать картинки размером не более чем 1280х720.<br>Проверьте размер загружаемой картинки и попробуйте еще раз';
}
ivashkevich 14.04.2020 в 19:30

Отлично!

Fill Patron 14.04.2020 в 12:45
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

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

    $allowedExtensions = ['JPG', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    //получаем ширину и высоту изображения
    $imgWidth = getimagesize($file['tmp_name'])['0'];
    $imgHeight = getimagesize($file['tmp_name'])['1'];
    //получаем размер файла
    $fileSize = $_FILES['attachment']['size'];

    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
        //проверка на размер файла по ограничению сервер, в php.ini менял на 2М и вернул на 50М
    } elseif ($file['error'] == 1) {
        $error = 'Ошабка при загрузке файла, на сервере разрешены файлы не больше 50 МБ';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Ошибка при загрузке файла.';
    } elseif (file_exists($newFilePath)) {
        $error = 'Файл с таким именем уже существует';
        //проверка на размер файла
    } elseif ($fileSize > 8388608) {
        $error = 'Ошабка при загрузке файла, файл , больше 8 МБ';
        //проверка на ширину изображения
    } elseif ($imgWidth > 1280) {
        $error = 'Ошибка при загрузке файла, ширина изображения больше 1280';
        //проверка на высоту изображения
    } elseif ($imgHeight > 720) {
        $error = 'Ошибка при загрузке файла, высота изображения больше 720';
    } elseif (!move_uploaded_file($file['tmp_name'], $newFilePath)) {
        $error = 'Ошибка при загрузке файла';
    } else {
        $result = 'http://myproject.loc/uploads/' . $srcFileName;
    }
}
ivashkevich 14.04.2020 в 19:41

Отлично

X-Nick 17.04.2020 в 23:29
<?php
    if(!empty($_FILES)) {
        $attachment = $_FILES['attachment'];
        $path = __DIR__.'/uploads';
        $newFile = $path.'/'.$attachment['name'];
        $allowedExtensions = ['jpg', 'jpeg'];
        $extension = pathinfo($attachment['name'], PATHINFO_EXTENSION);
        $size = getimagesize($attachment['tmp_name']);
            switch($attachment['error']) {
                case UPLOAD_ERR_INI_SIZE:
                    $error = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
                    break;
                case UPLOAD_ERR_FORM_SIZE:
                    $error = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
                    break;
                case UPLOAD_ERR_PARTIAL:
                    $error = "The uploaded file was only partially uploaded";
                    break;
                case UPLOAD_ERR_NO_FILE:
                    $error = "No file was uploaded";
                    break;
                case UPLOAD_ERR_NO_TMP_DIR:
                    $error = "Missing a temporary folder";
                    break;
                case UPLOAD_ERR_CANT_WRITE:
                    $error = "Failed to write file to disk";
                    break;
                case UPLOAD_ERR_EXTENSION:
                    $error = "File upload stopped by extension";
                    break;
                case UPLOAD_ERR_OK:
                    if(file_exists($newFile)) {
                        $error = 'File '.$attachment['name'].' is already in UPLOADS folder';
                        break;
                    }
                    elseif (!in_array($extension, $allowedExtensions)) {
                        $error = 'File extension is not allowed';
                        break;
                    }
                    elseif ($attachment['size'] > 8388608) {
                        $error = 'File size cannot be more than 8MB';
                        break;
                    }
                    elseif ($size[0] > 1280 || $size[1] > 720) {
                        $error = 'Image size cannot be more than 1024*720 px';
                        break;
                    }
                    else {
                        move_uploaded_file($attachment['tmp_name'], $newFile);
                        $loadedFileAddress = 'http://localhost:63342/upload/uploads/'.$attachment['name'];
                        break;
                    }

                default:
                    $error = "Unknown upload error";
                    break;
            }
    }
    else {
        $error = 'Choose a file and press the SUBMIT button';
    }

?>
<html lang="">
<head>
    <title>Files upload</title>
</head>
<body>
<?php
if (isset($loadedFileAddress)) {
    echo '<a href ='.$loadedFileAddress.'>Loaded file is here</a>';
}
elseif (isset($error)) {
    echo $error;
}
?>
<form action="upload.php" method = "post" enctype="multipart/form-data">
<label>
    File:
</label>
    <input type = file name="attachment">
    <input type="submit" value="SIBMIT">
</form>
</body>
</html>
ivashkevich 18.04.2020 в 06:12

Всё ок, кроме форматирования. Ну и вот тут дичь какая-то: http://localhost:63342/upload/uploads/

Вы что, до сих пор не настроили веб-сервер? С дебаггером тоже не работали до сих пор?

X-Nick 18.04.2020 в 11:47

кроме форматирования

PSR? Вижу только в нескольких местах между if и открывающей скобкой нет пробела.

Ну и вот тут дичь какая-то: http://localhost:63342/upload/uploads/

У меня на каждый урок отдельный домен. Открываю странички из шторма, поэтому через внутренний сервер. Чтобы не настраивать каждый раз деплоймент в шторме, использую стандартные настройки. Хотя согласен, нужно привыкать делать правильно. Уже переделал)

О каких настройках веб-сервера речь?
Дебаггер без проблем работает, только какое он имеет отношение к этому?

Еще и ошибку нашел)):

$extension = pathinfo($attachment['name'], PATHINFO_EXTENSION);
$size = getimagesize($attachment['tmp_name']);

Нужно сделать как-то так:

$extension = !empty($attachment['name']) ? pathinfo($attachment['name'], PATHINFO_EXTENSION) : null;
$size = !empty($attachment['tmp_name']) ? getimagesize($attachment['tmp_name']) : null;

а далее уже провеверять, если не нулл

elseif ($extension !== null && !in_array($extension, $allowedExtensions)) {
    $error = 'File extension is not allowed';
    break;
}
elseif ($size !== null && $size[0] > 1280 || $size[1] > 720) {
    $error = 'Image size cannot be more than 1024*720 px';
    break;
}
ivashkevich 18.04.2020 в 20:01

Вижу только в нескольких местах между if и открывающей скобкой нет пробела.

А должны быть! И свитч ещё уехал.

У меня на каждый урок отдельный домен.

А не проще файлики просто разные в одном проекте создавать.

О каких настройках веб-сервера речь?

О PHP в связке с Apache, а не штормовском "веб-сервере".

а далее уже провеверять, если не нулл

А откуда там нулл возьмётся?

X-Nick 18.04.2020 в 21:07

О PHP в связке с Apache, а не штормовском "веб-сервере".

Все что делали в рамках уроках - настроено и даже больше.

А откуда там нулл возьмётся?

Я же его туда и установливаю, если там нет значения:

$size = !empty($attachment['tmp_name']) ? getimagesize($attachment['tmp_name']) : null;
ivashkevich 19.04.2020 в 15:31

Я имел в виду, для чего вы это делаете? С чего взяли, что там может быть empty?

X-Nick 19.04.2020 в 16:51

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

ivashkevich 19.04.2020 в 17:12

Если файл не был выбран самая первая проверка не выполнится

if(!empty($_FILES))
Timurik Patron 18.04.2020 в 12:16

У меня получилось как-то так:

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

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

    $allowedExtensions = ['jpg', 'png', 'gif']; //Разрешенные расширение
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    $maxSize = 8388608; //Максимальный размер в байтах

    $maxWidth = 1280; //Максимальная ширина
    $maxHeight = 720; //Максимальная высота

    $heightWidth = getimagesize($file['tmp_name']); //Параметры картинки
    $fileWidth = $heightWidth[0]; //Ширина файла
    $fileHeight = $heightWidth[1]; //Высота файла

    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] === UPLOAD_ERR_INI_SIZE) {
        $error = 'Размер файла привышает заданный в upload_max_filesize.';
    } elseif ($file['error'] === UPLOAD_ERR_FORM_SIZE) {
        $error = 'Размер файла привышает заданный в MAX_FILE_SIZE.';
    } 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['size'] > $maxSize) {
        $error = 'Размер файла больше разрешенного.';
    } elseif ($fileWidth > $maxWidth) {
        $error = 'Ширина больше разрешенной.';
    } elseif ($fileHeight > $maxHeight) {
        $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 18.04.2020 в 20:03
$maxSize = 8388608;

Лучше представить как количество мегабайт, умноженное на количество килобайт в мегабайте, умноженное на количество байт в килобайте.

В остальном ОК.

Timurik Patron 18.04.2020 в 21:13

так:

$maxSize = 8*1024*1024; //Максимальный размер в байтах

или лучше так:

$maxSize = 8*(2^10)*(2^10); //Максимальный размер в байтах
ivashkevich 19.04.2020 в 15:31

Первый вариант)

mar4ello19922@gmail.com 19.04.2020 в 19:15

После часа мучений вроде получилось)

<?php
$allowedExtensions = ['jpg', 'png', 'jpeg', 'gif', 'PNG', 'JPG'];
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $fileName = $file['name'];
    $filePath = __DIR__ . '/uploads/' . $fileName;
    $extension = pathinfo($fileName, PATHINFO_EXTENSION);
    $size = getimagesize($file['tmp_name']);

    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Uploading files with this ' . $extension . 'extension is prohibited!';
    } elseif ($file['error'] === UPLOAD_ERR_INI_SIZE) {
        $error = 'Change conf of php.ini, variable - upload_max_filesize';
    } elseif ($size[0] >= 1280 || $size[1] >= 720) {
        $error = 'Width or height of image are too BIG!';
    } elseif ($file['size'] > 8192000) {
        $error = 'Too big, > 8Mb!';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'Error uploading file';
    } elseif (file_exists($filePath)) {
        $error = 'File already exists, man!';
    } elseif (!move_uploaded_file($file['tmp_name'], $filePath)) {
        $error = 'A VERY BIG ERROR';
    } else {
        $result = 'File is successfully written by a path: uploads/' . $fileName;
    }
}
?>
<html>
<head>
    <title>Upload window</title>
</head>
<body>
<?php if (!empty($error)): ?>
    <?= $error ?>
<?php elseif (!empty($result)): ?>
    <?= $result ?>
<?php endif; ?>
<form action="/upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="attachment">
    <input type="submit" value="Approve downloading">
</form>
</body>
</html>
ivashkevich 19.04.2020 в 19:44

8192000 лучше записать как 8*1024*1024

n.yurasheva 21.04.2020 в 18:40
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];
    $srcFileName = $file['name'];
    $file['tmp_name'] == '' ? $error = 'Картинка не выбрана' : $imgWidthHeight = getimagesize($file['tmp_name']);
    if (empty($error)) {
        $newFilePath = __DIR__ . '\uploads\\' . $srcFileName;
        $allowedExtensions = ['jpg', 'png', 'gif'];
        $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
        if (!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 = 'Ошибка при загрузке файла';
        } elseif ($file['size'] > 8388608) {
            $error = 'Размер файла должен быть меньше 8Мб';
        } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
            $error = 'Размер файла превысил максимально допустимый размер';
        } elseif ($imgWidthHeight[0] > 1280 || $imgWidthHeight[1] > 720) {
            $error = 'Ширина должны быть не более 1280px, а высота - не более 720px.';
        } else {
            $result = '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 21.04.2020 в 19:00
    $file['tmp_name'] == '' ? $error = 'Картинка не выбрана' : $imgWidthHeight = getimagesize($file['tmp_name']);

Некорректное использование тернарного оператора. Он используется для возврата одного из значений в правой части в левую часть выражения. У вас же он применяется для побочного вызова кода в случае выполнения или невыполнения условия. Используйте в таких случаях if-else.

        $newFilePath = __DIR__ . '\uploads\\' . $srcFileName;

Лучше использовать обычные слеши вместо обратных, не будет проблем при переходе на Linux.

8388608 лучше записать как 8 * 1024 * 1024

В остальном ОК.

tsaruk4356@gmail.com Patron 30.04.2020 в 11:55
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    $size = $_FILES['attachment']['size'];
    $limitWidth = 1280;
    $limitHeight = 720;
    $imageSize = getimagesize($file['tmp_name']);

    if ($imageSize[0] > $limitWidth || $imageSize[1] > $limitHeight) {
        $error = 'Превышена ширина или высота загружаемого файла';
    } elseif ($size > 8388608) {
        $error = 'Превышен размер загружаемого файла';
    } elseif (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] === UPLOAD_ERR_INI_SIZE || $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://localhost/test/uploads/' . $srcFileName;
    }
}
ivashkevich 30.04.2020 в 19:03

8388608 лучше записать как 8 * 1024 * 1024

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

happyviolence Patron 30.04.2020 в 18:59

ставлю в дз ограничение 8 Мб, файлы не загружаются, но не из-за моего ограничения, а хз почему. в консоли выводится warning о том что файл превышает 8 Мб, но при этом в php.ini ограничение установлено на 2 Мб. Где может быть вообще еще это ограничение и как в php.ini его поменять, если линукс не дает сохранить изменения, файл доступен только для чтения?

ivashkevich 30.04.2020 в 19:17

В какой консоли?

happyviolence Patron 30.04.2020 в 20:07

ой, то есть в терминале выводится: PHP Warning: POST Content-Length of 10885169 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

ivashkevich 01.05.2020 в 14:59

Как вы оказались в терминале, если речь шла о запуске скрипта через веб?

happyviolence Patron 01.05.2020 в 15:42

я в терминале запускаю команду php -s localhost:8000 для запуска сервера. Далее в браузере загружаю файл размером более 8 Мб через форму согласно кода с урока. Файл не загружается, но ошибка ,прописанная мной в коде, не выводится, в терминале выводится PHP Warning: POST Content-Length of 10885169 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
Всё, разобралась. Проблема была в том, что в php.ini по умолчанию был установлен post_max_size = 8 Мб. Извиняюсь, что побеспокоила.

ivashkevich 02.05.2020 в 06:56

Почему не пользуешься нормальным веб-сервером? Отладчик тоже не настраивала?

titelivus 03.05.2020 в 14:04
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES['attachment'];

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

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

    $allowedSize = 8 * 1024 * 1024;
    $allowedImageSize = [1280, 720];
    $uploadImageSize = getimagesize($file['tmp_name']);

    if (!in_array($extension, $allowedExtensions)) {
        $error = 'Загрузка файлов с таким расширением запрещена!';
    } elseif ($file['error'] == UPLOAD_ERR_INI_SIZE) {
        // upload_max_filesize = 2M в php.ini
        $error = 'Размер принятого файла превысил максимально допустимый размер 2МБ.';
    } elseif ($file['size'] > $allowedSize) {
        // Это условие не нужно, но оставил его для ответа на первую задачу.
        $error = 'Размер файла должен быть меньше 8 мб!';
    } elseif ($uploadImageSize['0'] > $allowedSize['0']
        || $uploadImageSize['1'] > $allowedSize['1']) {
        $error = 'Ширина изображения не должна превышать 1200px и высоту 720px!';
    } 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 03.05.2020 в 21:01

Супер

titelivus 04.05.2020 в 10:29

Почему имя файла написанный кириллицей сохраняется с кракозябрами?)

ivashkevich 06.05.2020 в 13:31

Видимо с кодировкой проблемы

NR Patron 14.05.2020 в 00:44
<?php
if (!empty($_FILES['attachment'])) {
    $file = $_FILES ['attachment'];

    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;
    $fileSize = $file['size'];
    $fileTmp = $file ['tmp_name'];
    $imageSize = getimagesize ($fileTmp);
    $limitWidth  = 1280;
    $limitHeight = 720;
    $limitBytes = 8 * 1024 * 1024;
    $allowedExtensions = ['JPG', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);

    if (empty ($srcFileName)) {
        $error = 'Пожалуйста, выберите файл.';
    } elseif ($imageSize > $limitHeight) {
        $error = 'Высота изображения не должна превышать 720px.';
    } elseif ($imageSize > $limitWidth) {
        $error = 'Ширина изображения не должна превышать 1280px.';
    // Установите значение upload_max_filesize в файле php.ini, равное 2M
    } elseif ($file['error'] = UPLOAD_ERR_INI_SIZE) {
        $error = 'Загружаемый файл не может превышать 2 МБ';

    // Позвольте загружать только файлы размером меньше 8Мб.
    } elseif ($fileSize > $limitBytes) {
        $error = 'Загружаемый файл не может превышать 8МБ.';
    } 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/index.php/uploads/' . $srcFileName;
    }
}
?>

<html>
<head>
    <title>upload</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 14.05.2020 в 13:10

Отлично!

IePyton Patron 18.05.2020 в 17:36
<?php
if (!empty($_FILES['attachment'])) {

    $file = $_FILES['attachment'];

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

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

    $maxFileSize = 8000000;
    $uploadFileSize = $file['size'];

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

    if ($parametrs[0] > 1280 || $parametrs[1] > 720) {
        $error = 'Размеры изображения превышают 1280х720';
    } elseif ($file['error'] == 1) {
        $error = 'Размер загружаемого файла больше допустимого';
    } elseif ($uploadFileSize > $maxFileSize) {
        $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://localhost:8888/phplearn.my/' . $newFilePath;
    }

}
?>
<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 19.05.2020 в 06:07
    $maxFileSize = 8000000;

Это не 8 Мб

        $result = 'http://localhost:8888/phplearn.my/' . $newFilePath;

Это ещё что за зверь? Дебаггером есть возможность пользоваться?

IePyton Patron 19.05.2020 в 09:36
$maxFileSize = 8*1024*1024;

Это ещё что за зверь? Дебаггером есть возможность пользоваться?

это у меня через MAMP сайты с локального сервера по такому урлу открываются. xDebug работает (но чтобы он заработал нужно было совершить танец с бубном)))

janybekova56@mail.ru 20.05.2020 в 17:08

У меня все время выдает ошибки. Ошибка при загрузке файла. Невозможно переместить файл. Файл не найден.

ivashkevich 20.05.2020 в 18:41

Какой у вас сервер? Дебажить пробовали?

garetziro@gmail.com Patron 06.06.2020 в 22:57

1

if ($file['size'] > 8388608) {
        $error = 'Загрузка файлов более 8 мб запрещена!';

2

if ($file['error'] === 1) {
        $error = 'Загрузка файлов более 2 мб запрещена!';

3

  $widthWeight = getimagesize($newFilePath);
 if($widthWeight[0] > 1280 || $widthWeight[1] > 720){
        $error = 'Можно загружать картинки с шириной не более 1280px и высотой не более 720px';
    }

А вот задача конечно ступорит.

ivashkevich 07.06.2020 в 13:03

8388608 лучше записать как 8 * 1024 * 1024

Задача на ваше усмотрение остаётся

garetziro@gmail.com Patron 08.06.2020 в 21:29

Действительно хочу сделать домашку, но не могу понять условие.
Если разъясните, буду признаетелен...

Следующая строка содержит число элементов в комбинации (k).
1 ≤ k ≤ количество elements
ivashkevich 09.06.2020 в 12:48

Число комбинаций (k) может быть от нуля до числа, равному количеству элементов

Hellbound Patron 12.06.2020 в 16:56
<?php
if (!empty($_FILES)) {
    $file = $_FILES['attachment'];

    $imageSizeArray = getimagesize($file['tmp_name']);
    $srcFileName = $file['name'];
    $newFilePath = __DIR__ . '/uploads/' . $srcFileName;

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $extension = pathinfo($srcFileName, PATHINFO_EXTENSION);
    if ($imageSizeArray[0] > 1280 || $imageSizeArray[1] > 720) {
        $error = 'Ошибка, картинка слишком большая';
    } elseif ($file['error'] == 1) {
        $error = 'Ошибка, размер файла превышает разрешенный (2МБ)';
    } elseif ($file['size'] > 8*1024*1024) {
        $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;
    }
}
echo $file['error'];
?>

У меня почему-то ошибки в браузере не выводятся, хотя в .ini я поставил display_errors = On и error_reporting = E_ALL. Также пробовал в самом коде прописывать error_reporting(E_ALL); и ini_set("display_errors", 1);. Да и если убрать в коде вот эту часть

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

то файлы выше 8 МБ грузятся без проблем и значение error в массиве равно 0, хотя в .ini файле у меня upload_max_filesize = 2M. Не могу понять в чем дело

Задачу пока не решил

ivashkevich 13.06.2020 в 09:06

Привет! А сервер перезапускал после изменения php.ini? Файл точно сохранил?

У меня почему-то ошибки в браузере не выводятся

О каких конкретно ошибках речь?

Hellbound Patron 13.06.2020 в 15:36

Да, файл я сохранил и перезапустил, потом опять открывал и проверил, изменения сохранились

  • О каких конкретно ошибках речь?

Ну, я просто подумал, что вот здесь

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

при превышении разрешенного размера должна выводиться какая-то ошибка. Если это не так, то прошу прощения, немного глупый. Но у меня также не выводилась ошибка из урока про подключение файлов (когда подключаемый файл не находится директивами require и include). Хотя тогда я был еще на PHP 7.0, может в этом дело. Но сейчас я точно менял ini файл 7.4

ivashkevich 14.06.2020 в 13:29

Ну это не ошибка программы, а просто текст ошибки, который мы сформировали.

Да, у каждой версии PHP свой php.ini, при переключении нужно вносить изменения заново.

Hellbound Patron 14.06.2020 в 19:47

С выводом ошибок я наконец-то смог совладать.

Да, про текст я понял, просто думал, что если не прописывать код, обрабатывающий ошибку, то вылезет какая-нибудь ошибка по типу тех же из урока про подключение файлов. Но я все еще не понимаю, почему файл грузится, хотя превышает размер, написанный в php.ini. И судя по всему, из-за этого же значение error в массиве $_FILES у меня всегда 0. Или так и должно быть? Извиняюсь, конечно, что так прикопался, просто в документации простенькое описание, что эта директива отвечает за максимальный размер закачиваемого файла, а нагуглить внятно ничего не смог.

ivashkevich 15.06.2020 в 20:39

В выводе phpinfo() какое значение у этой директивы?

Hellbound Patron 18.06.2020 в 23:51

50M

ivashkevich 19.06.2020 в 07:38

Ну, значит не там поменяли) Посмотрите, может там еще одна такая же строка, но с другим значением?

Hellbound Patron 19.06.2020 в 13:05

Но проблема в том, что я не только в ini файле пытался менять, но и в самом коде прописывать как ini_set('upload_max_filesize', '2M'), но значение error так же равно 0 при загрузке файла весом 11 МБ. Нашел примерно такой же вопрос на stackoverflow, но там как раз советуют написать в коде ini_set(). Пока больших проблем это не приносит, так что оставлю как есть, наверное.

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