Последние пару месяцев я создавал сайт продвижения событий на PHP и MySQL, где каждый мог зарегистрироваться и добавить подробности о своем локальном событии вместе с постером, размер которого я изменил.
В настоящее время у меня весь процесс работает нормально локально и на хостинге, но прежде чем сайт заработает, у меня есть пара вопросов о том, как я это делаю.
Это код функции, который я использую для обработки загрузки изображений. Я проверяю размер файла перед этим разделом.
$extension = substr($filename, strpos($filename,'.'), strlen($filename)-1);
$filetypes = array('.jpg', '.jpeg', '.gif', '.bmp', '.png', '.JPG', '.PNG', '.JPEG', '.GIF', '.BMP');
if($_FILES['image']['error'] == 4){
$error = "No image";
return $error;
}
else if(($_FILES['image']['error'] == 2) || ($_FILES['image']['error'] == 1)){
$error = "File size too big";
return $error;
}
else if(!in_array($extension, $filetypes)){
$error = "This isn't an image that is supported";
return $error;
}
else if(($_FILES['image']['error'] == 7) || ($_FILES['image']['error'] == 3)){
$error = "Error occurred. Try again";
return $error;
}
else{
if(($extension == '.jpg') || ($extension == '.jpeg')){
$source = imagecreatefromjpeg($uploaded);
}
else if($extension == '.png'){
$source = imagecreatefrompng($uploaded);
}
else{
$source = imagecreatefromgif($uploaded);
}
list($width, $height) = getimagesize($uploaded);
$ratio = $width / $height;
$new_width = 300;
$new_height = round(300 / $ratio);
$canvas = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($canvas, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$name = date("dmyHis").rand(0, 9);
$path = $_SERVER[ 'DOCUMENT_ROOT' ] . '/images/uploaded/'.$name.'.jpg';
$new_image = imagejpeg($canvas, $path, 100);
$poster['name'] = $name.'.jpg';
$poster['width'] = $new_width;
$poster['height'] = $new_height;
return $name.'.jpg';
}
Насколько я понимаю, есть пара ошибок, о которых я знаю, или о которых я не до конца изучил, например, некоторые изображения выдают ошибку из imagecreate от чего бы то ни было, и если имя изображения имеет «.» в нем также будет выдано сообщение об ошибке.
Как только процесс будет завершен, я сохраню имя изображения в поле 'poster' в MySQL, которое будет использоваться для получения правильного изображения из папки при просмотре.
Что я действительно хотел знать, так это то, есть ли другие проблемы, с которыми я могу столкнуться при загрузке изображений?
- Я ожидаю достаточного количества трафика, поэтому этот код будет работать нормально при интенсивном использовании?
- Есть ли еще какие-нибудь подводные камни или вещи, на которые я должен обратить внимание?
- Использую ли я лучший метод для работы?
- В настоящее время мой размер файла составляет 2 МБ, это слишком много?
- Даже если пользователь загрузит что-то более 2 МБ, скрипт все равно будет работать, и я предполагаю, что файл будет загружен на сервер для разборки имен, сравнения размеров файлов и т. Д., Как это повлияет на использование моей пропускной способности?
- Как долго оригинальные файлы остаются на сервере?
Если у кого-то есть хорошее прочтение на эту тему, я был бы очень признателен!
Спасибо.
редактировать: форматирование.
edit 2: Я не давал понять, что такое исходные файлы. Я имею в виду исходные файлы, для доступа к которым я использую переменную $ _FILES. Скажем, это 1,9 МБ, будет ли изображение на сервере в 1,9 МБ сидеть на сервере все время, пока я возился с расширениями и так далее? Должен ли я очистить это после создания нового изображения?