Вы проверили, что блок изменения размера изображения действительно используется? Рассмотрим также некоторый отладочный вывод. Я не вижу ничего явно неправильного
if ($width > $maxWidth || etc...) {
echo "Hey, gotta shrink that there image";
... do the resizing ...
$resizedImage = getimagesize($newname);
var_dump($resizedImage); // see if the new image actually exists/what its stats are
etc....
} else {
echo "Woah, that's a small picture, I'll just make a straight copy instead";
}
Возможно, вы также захотите округлить $ newheight / $ newwidth до целочисленных значений. Почти во всех случаях вы получите дробный результат, а у изображений нет дробных пикселей.
Кроме того, у вас есть состояние гонки с генератором идентификационного номера:
$query = mysql_query("SELECT MAX(PicId) AS number FROM userpictures");
$row = mysql_fetch_array($query);
$imagenumber = $row['number']+1;
Рассмотрим случай, когда две загрузки завершаются практически одновременно. Они оба получат один и тот же идентификационный номер (скажем, 25). И тогда, какой бы процесс загрузки не занимал больше времени, он «выиграет» и перезапишет более быстрый.
Попробуйте переписать часть базы данных для использования транзакции, используя следующую логику:
1. start transaction
2. insert skeleton record into the db and get its ID
3. do image processing, copying, saving, etc...
4. update record with the new image's stats
5. commit the transaction
Таким образом, транзакция будет «скрывать» запись, так как она еще не зафиксирована, для двух или более одновременных загрузок невозможно получить один и тот же идентификационный номер, и в случае сбоя во время обработки изображения (недостаточно памяти, места на диске, испорченный исходный образ и т. д.) вы просто откатываете транзакцию и убираете беспорядок.
I