Я загружаю изображение. Делаю это в Yii2. В модели загрузки использую правила:
'extensions' => ['jpg', 'jpeg', 'png'],
'checkExtensionByMimeType' => true,
Сама функция загрузки
public function upload($var)
{
if ($this->validate()) {
$dir = 'uploads/' . $var . '/';
$name = $this->randomFileName($this->img->extension);
$path = $dir . $name;
$this->img->saveAs($path);
//reSizeImg
$imgProperty = getimagesize($path);
$imgWight = $imgProperty[0];
$imgHeight = $imgProperty[1];
$standardWight = 500;
//пропорции
$ratio = $imgWight / $standardWight;
$wightNewImg = round($imgWight / $ratio);
$heightNewImg = round($imgHeight / $ratio);
//cоздаем новое изображение заданных параметров
$newImg = imagecreatetruecolor($wightNewImg, $heightNewImg);
if($this->img->extension === 'jpg'|| $this->img->extension === 'jpeg') {
$uploadImg = imagecreatefromjpeg($path);
} else {
$uploadImg = imagecreatefrompng($path);
}
imagecopyresampled($newImg, $uploadImg, 0, 0, 0 ,0, $wightNewImg, $heightNewImg, $imgWight, $imgHeight);
imagejpeg($newImg, $path);
//уничтожаем данные
imagedestroy($newImg);
imagedestroy($uploadImg);
return $name;
} else {
return false;
}
}
private function randomFileName($extension = false)
{
$extension = $extension ? '.' . $extension : '';
do {
$name = md5(microtime() . rand(0, 1000));
$file = $name . $extension;
} while (file_exists($file));
return $file;
}
После сохранения все хорошо. НО если я пытаюсь повторно прикрепить изображение, которое уже было сохранено такой функцией, именно формата PNG ( с jpg все работает) вначале, вообще не проходит валидатор модели. А если я комментирую
'extensions' => ['jpg', 'jpeg', 'png'],
, то выскакивает ошибка
imagecreatefrompng ХХХХХХХХХХХХХХХХХХХХХ.png' is not a valid PNG file.
Почему так происходит ?