Я использовал этот код в течение многих лет без проблем. Недавно сервер моего клиента был обновлен с PHP 5 до PHP 7, что привело к поломке множества элементов. Я думал, что все это было решено, но это все еще сохраняется.
Вот моя функция.
function imageupload($filearray, $maxsize=0, $itemid=0){
$validtype=1;
$avalidtype=0;
$randfilename=sha1(microtime().rand(0,99999));
global $uploadDir;
global $dbh;
$fileid=0;
if ( (is_uploaded_file($filearray['tmp_name'])) && ($validtype==1)) {
$src=$filearray['name'];
$randfilename.=".jpg";
$file_name = $uploadDir . $randfilename;
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
copy($filearray['tmp_name'],$file_name);
if(preg_match('.jpeg',$src)||preg_match('.jpg',$src)) {
$src=imagecreatefromjpeg($filearray['tmp_name']);
}
elseif(preg_match('.png',$src)) {
$src = imagecreatefrompng($filearray['tmp_name']);
}
$src2=$file_name;
list($width,$height)=getimagesize($src2);
$thumbsize=getThumbSize($width, $height, 450);
$newwidth=$thumbsize[0];
$newheight=$thumbsize[1];
$awidth=$width;
$aheight=$height;
$new_name = $uploadDir . $randfilename;
$tmp= imagecreatetruecolor($newwidth,$newheight)
or croak("Cannot Initialize new GD image stream");
// list($twidth,$theight)=getimagesize($tmp);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagejpeg($tmp,$new_name,100);
imagedestroy($tmp);
}//end function
Я подтвердил, что передаваемый массив файлов заполнен достоверными данными. Я подтвердил, что функция изменения размера работает правильно. Я проверил, что подпапка, в которой должны быть сохранены измененные изображения, имеет соответствующие разрешения (я даже установил его и родительскую папку на 777).
Неважно, если я загружу JPEG или PNG, я все еще получаю пустые черные ящики (правильных размеров). Это работало безупречно в PHP 5 - и фактически работает на нескольких других серверах.
Что очевидного мне не хватает?