-1

подскажите почему не работает код?

<?php
    require "db.php";   
    $login = $_SESSION['logged_user']->login;
    $settings = R::findOne('users', 'WHERE `login`=?', [$login]);
if ($_FILES && $_FILES["file"]["error"] == UPLOAD_ERR_OK){
    if($_FILES['file']['size'] < 5242880){
        if($_FILES['file']['type'] == ('image/jpeg' || 'image/png') ){
        $Image = imagecreatefrompng($_FILES['file']['tmp_name']);

        $widthImg = imagesx($Image);
        $heightImg = imagesy($Image);

        if ($widthImg &lt; $heightImg){
            $ReadyImage = imagecrop($Image, ['x' =&gt; 0, 'y' =&gt; ($heightImg - $widthImg)/2, 'width' =&gt; $widthImg, 'height' =&gt; $widthImg]);
        }else{
            $ReadyImage = imagecrop($Image, ['x' =&gt; ($widthImg - $heightImg)/2, 'y' =&gt; 0, 'width' =&gt; $heightImg, 'height' =&gt; $heightImg]);
        }
        $filepath = "ava/" . $settings-&gt;id;
        move_uploaded_file($ReadyImage, $filepath);  /* Загружаем файл по указанному пути */

    }else{
        /* Учитывая accept в html, скорей всего попытка на инъекцию, начисление штрафных баллов в дальнейшем возможнен бан(ещё не реализована)*/        }
}else{
    echo 202; /* big size */
}

} ?>

Перестало работать после добавления вот этого кода:

$Image = imagecreatefrompng($_FILES['file']['tmp_name']);
        $widthImg = imagesx($Image);
        $heightImg = imagesy($Image);

        if ($widthImg &lt; $heightImg){
            $ReadyImage = imagecrop($Image, ['x' =&gt; 0, 'y' =&gt; ($heightImg - $widthImg)/2, 'width' =&gt; $widthImg, 'height' =&gt; $widthImg]);
        }else{
            $ReadyImage = imagecrop($Image, ['x' =&gt; ($widthImg - $heightImg)/2, 'y' =&gt; 0, 'width' =&gt; $heightImg, 'height' =&gt; $heightImg]);
        }</code></pre>
artemgh
  • 659
  • 5
  • 20
  • 1
    Надо воспользоваться отладкой! А также включить отображение ошибок! – Алексей Шиманский Oct 17 '21 at 19:06
  • Ошибка в строке move_uploaded_file. Путь правильный, значить что-то не так с обрезкой изображения – artemgh Oct 17 '21 at 19:14
  • 1
    А мне вот эта строчка понравилась $_FILES['file']['type'] == ('image/jpeg' || 'image/png'). Человек использует синтаксический сахар ещё до его введения в php. Мощно – ArchDemon Oct 17 '21 at 19:14
  • 1
  • Насчёт синтаксического сахара объясните пожалуйста, PHP серьезно не поддерживает такую запись? – artemgh Oct 18 '21 at 10:55
  • ('image/jpeg' || 'image/png') вам вернёт bool (true). Дальше вы сравниваете строку 'some text' == true что в свою очередь вернёт bool (true). Потому что сравнение на самом деле выглядеть так (bool) 'some text' == true или true == true – ArchDemon Oct 18 '21 at 15:31
  • Ну и к слову. Вы допускаете тип image/jpeg при этом делаете imagecreatefrompng. PNG, Карл! – ArchDemon Oct 18 '21 at 15:33
  • Тут я с Вами согласен, но вы написали это на тот момент времени когда уже был выложен новый код где эти тупыши устранены, посмотрите ответ – artemgh Oct 18 '21 at 16:07
  • Мне правда интересно Ваше мнение насчет нового способа проверки формата) – artemgh Oct 18 '21 at 16:08

1 Answers1

0

Вот итоговый(рабочий) код:

<?php
    require "db.php";   
    $login = $_SESSION['logged_user']->login;
    $settings = R::findOne('users', 'WHERE `login`=?', [$login]);
if ($_FILES && $_FILES["file"]["error"] == UPLOAD_ERR_OK){
    if($_FILES['file']['size'] < 5242880){
        if (in_array($_FILES['file']['type'], array('image/jpeg', 'image/png'))){
            $filepath = "ava/" . $settings->id;
            if($_FILES['file']['type'] == 'image/jpeg'){
                $Image = imagecreatefromjpeg($_FILES['file']['tmp_name']);
            }else{
                $Image = imagecreatefrompng($_FILES['file']['tmp_name']);
            }
            $widthImg = imagesx($Image);
            $heightImg = imagesy($Image);
            if ($widthImg != $heightImg){
                $ReadyImage = $_FILES['file']['tmp_name'];
                if ($widthImg < $heightImg){
                    $ReadyImage = imagecrop($Image, ['x' => 0, 'y' => ($heightImg - $widthImg)/2, 'width' => $widthImg, 'height' => $widthImg]);
                }
                if ($widthImg > $heightImg){
                    $ReadyImage = imagecrop($Image, ['x' => ($widthImg - $heightImg)/2, 'y' => 0, 'width' => $heightImg, 'height' => $heightImg]);
                }            
                if($_FILES['file']['type'] == 'image/jpeg'){
                    imagejpeg($ReadyImage, $_FILES['file']['tmp_name']);
                }else{
                    imagepng($ReadyImage, $_FILES['file']['tmp_name']);
                }
            }
        move_uploaded_file($_FILES['file']['tmp_name'], $filepath); 
        echo 101;
    }else{
    /* Учитывая accept в html, скорей всего попытка на инъекцию, начисление штрафных баллов в дальнейшем возможнен бан(ещё не реализована)*/        
    }
}else{
    echo 202; /* big size */
}

} ?>

artemgh
  • 659
  • 5
  • 20