Гриша К.
Новичок
Пример (краткий) формы и скрипта для проверки и записи файла на сайт. Вопросы.
Здравствуйте.
Изучая и используя найденную информацию по загрузке файлов на сайт, в итоге получилась следующая форма для загрузки файлов и соответсвующий скрипт для проверки и записи файла на сайт (только для зарегестрированных пользователей).
Уважаемые модераторы. Я надеюсь приведенный пример кода, вы не посчитаете таким большим, чтобы закрыть тему. Я посторался сделать код максимально кратким и удобным для чтения. И возможно данный пример с комментариями, будет кому-то полезен.
-------------------------------
form.php?city=1264 - пример формы для загрузки файлов на сайт
-------------------------------
form.php?city=1264 - пример скрипта для проверки и обработки файлов
-------------------------------
Вопросы:
(1) На сайт предполагается загружать фотграфии. Например мой фотоаппарат делает снимки (без приближения) имеющие расширение 2560 x 1920 (ширина x высота), максимальный размер файла ~ 2,5 МБ. Если сжимать такую фотографию, например в photoshop, то ее уменьшинные размеры соответсвуют размерам расширения экрана в windows (800 x 600, 1024 x 768 и т.д.), в итоге такие фотографии для просмотра я вывожу в формате 330 x 247, а при нажатии на них открывается оригинал.
Я вот хотелбы узнать рекомендуются ли ограничения на какое-то максимальное расширение и размер загружаемого файла? И возможно вы знаете, все ли фотографии соотвествуют при сжатии размерам экрана в windows и будут ли они пропорциональны формату 330 x 247.
(2) Если будут загружаться файлы размером 2,5 МБ, стоит ли увеличить время выполнения сценария: ini_set('max_execition_time', 120);?
(3) Я читал, что раньше формат jpeg соотвествовал MIME-типу image/jpeg, я пробовал делать проверку типа файла так ($userfile_type != 'image/pjpeg' || $userfile_type != 'image/jpeg'), но тогда файлы *.jpeg не проходят такую проверку, стоит ли проверять тип файла 'image/jpeg' и если да, как это сделать правильно.
(4) Напишите пожалуйста учтены ли все основные проверки загружаемого файла, и возможно вы увидите какие-то критические ошибки в приведенных примерах.
Здравствуйте.
Изучая и используя найденную информацию по загрузке файлов на сайт, в итоге получилась следующая форма для загрузки файлов и соответсвующий скрипт для проверки и записи файла на сайт (только для зарегестрированных пользователей).
Уважаемые модераторы. Я надеюсь приведенный пример кода, вы не посчитаете таким большим, чтобы закрыть тему. Я посторался сделать код максимально кратким и удобным для чтения. И возможно данный пример с комментариями, будет кому-то полезен.
-------------------------------
form.php?city=1264 - пример формы для загрузки файлов на сайт
PHP:
/* Извещаю сервер о то, что посылаю файл enctype="multipart/form-data" */
<form enctype="multipart/form-data" method="post" action="form.php?city=1264">
/* Максимальный размер загружаемого файла ~ 1 МБ */
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="file" name="userfile">
</form>
form.php?city=1264 - пример скрипта для проверки и обработки файлов
PHP:
/* Использую следующие данные о файле */
$userfile = $_FILES['userfile']['tmp_name']; // Временное имя
$userfile_name = $_FILES['userfile']['name']; // Исходное имя;
$userfile_size = $_FILES['userfile']['size']; // Размер;
$userfile_type = $_FILES['userfile']['type']; // MIME-тип;
$userfile_error = $_FILES['userfile']['error']; // Код ошибки
/* userfile_error - Проверка ошибок. Вывод сообщений об ошибках */
if ($userfile_error > 0) {
switch ($userfile_error) {
case 1: $error='Превышение размера файла в php.ini'; break;
case 2: $error='Превышение размера файла в форме'; break;
case 3: $error='Загружена только часть файла'; break;
case 4: $error='Файл не загружен'; break;
}
}
/* Проверка MIME-типа. Для IE - pjpeg, для остальных - jpeg */
elseif ($userfile_type != 'image/pjpeg' && $userfile_type != 'image/jpeg') {
$error = 'Файл не формата jpeg';
}
else {
/* Помещаем файл туда, куда нужно */
$upfile = './'.$_GET['city'].'.jpg';
/* Проверяем существует ли такой файл */
if (file_exists($upfile)) {
$error = 'Файл уже существует';
}
/* Проверяем, что обрабатываемый файл действительно загружен и не является локальным */
elseif (is_uploaded_file($userfile)) {
if (filesize($userfile) > 2000000) {
$error = 'Файл превышает размер в 2 МБ';
}
elseif (!move_uploaded_file($userfile, $upfile)) {
$error = 'Невозможно переслать файл в каталог назначения';
}
else {
/* Здесь у меня осуществляется запись данных в БД, если записать не удалось,
то вывожу об этом сообщение и удаляю файл unlink($upfile);
В противном случае пересылаю пользователя на нужную страницу для просмотра файла
*/
header('Location: [url]http://[/url]'.$_SERVER['HTTP_HOST']);
exit;
}
else {
$error = 'Возможна атака через загрузку файла.';
}
}
}
Вопросы:
(1) На сайт предполагается загружать фотграфии. Например мой фотоаппарат делает снимки (без приближения) имеющие расширение 2560 x 1920 (ширина x высота), максимальный размер файла ~ 2,5 МБ. Если сжимать такую фотографию, например в photoshop, то ее уменьшинные размеры соответсвуют размерам расширения экрана в windows (800 x 600, 1024 x 768 и т.д.), в итоге такие фотографии для просмотра я вывожу в формате 330 x 247, а при нажатии на них открывается оригинал.
Я вот хотелбы узнать рекомендуются ли ограничения на какое-то максимальное расширение и размер загружаемого файла? И возможно вы знаете, все ли фотографии соотвествуют при сжатии размерам экрана в windows и будут ли они пропорциональны формату 330 x 247.
(2) Если будут загружаться файлы размером 2,5 МБ, стоит ли увеличить время выполнения сценария: ini_set('max_execition_time', 120);?
(3) Я читал, что раньше формат jpeg соотвествовал MIME-типу image/jpeg, я пробовал делать проверку типа файла так ($userfile_type != 'image/pjpeg' || $userfile_type != 'image/jpeg'), но тогда файлы *.jpeg не проходят такую проверку, стоит ли проверять тип файла 'image/jpeg' и если да, как это сделать правильно.
(4) Напишите пожалуйста учтены ли все основные проверки загружаемого файла, и возможно вы увидите какие-то критические ошибки в приведенных примерах.