![]() |
Логика if - else PHP нужна помощь
День добрый.
Помогите, пожалуйста, разобраться с логикой многоуровнего if - else. Есть код загрузки картинок на сервер + пути в базу. Многочисленные проверки работают и всю грузиться куда надо, если проходит проверки. Но вот текст ошибки по проверке размера фаила в Кб не выдаётся, а выдается ошибка по пикселям. Хотя фаил большого чем надо размера не пропускает. В общем хочу понять почему не выдаёт ошибку по размеру. :idontnow: Заранее спасибо. PHP код:
|
хммм
Цитата:
<font color=#FF0000>Размер... |
Спасибо.
Однако вопрос до конца не решён. Проверил еще раз. Дано два тестовых фаила: первый - маленький 150*112 (по геометр. размерам подходит). Сохранён специально без сжатия - 44 Кб (по Кб не подходит) - загружаем только его - PHP честно пишет - не подходит - ура! второй - большой 600*450 (по геометр. размерам подходит). Сохранён специально без сжатия - 323 Кб (по Кб не подходит) - загружаем только его - PHP пишет - "Размеры картинки слишком большие. Для фото-миниатюры ширина = 150px, высота максимально - 300px, для полной фотографии ширина максимально 800px, высота максимально - 1000px." - не то - косяк! Грузим оба - PHP честно пишет - не подходит - ура! (ссылаясь скорее всего на первый фаил) Жмем фаилы по размеру - ошибок нет - грузим на сервер и в базу. Всё бы ничего, если бы делал интерфейс для себя. А так пользователь будет биться головой о стенку (хоть весь лист испиши help'ом) почему размеры большой картинки по пикселям верны, а картинка не грузится и выдаёт что неправильные размеры по пикселям. P.S. Сделал то же самое для одного фаила При выполнение условий всё грузиться. Если взять картинку меньшую по пикселям, но большую по Кб, пишет большая по Кб. Если взять нужную по пикселям, но большую по Кб, пишет неправильные размеры по пикселям.:idontnow: PHP код:
|
бррр. многа букф. особенно для третьего часа ночи. я честно пытался трижды прочесть и собрать в кучу. ниасилил.
файл a - проходит по dimension и не проходит по size файл b - проходит по dimension и не проходит по size дальше что? |
Сделал дополнение на один фаил.
По вопросам, да именно так. Оба фаила правильно проверяются на условия, но первый выдаёт правильные else (dimension, size). Второй выдает только dimension, на проверку как dimension, так и size. |
Делай рядом с каждой проверкой выписку в хтмл. Чтобы видеть что там скрипт реально насчитал.
|
Сделал.
Проверял скрипт одного фаила. Взял фаил 150*105, т.е. размеры подходят, но 30 Кб (не подходит). Дальше началось странное: три загрузки этого фаила - выводит неправильные размеры по ширине и высоте и не выводит echo размера по Кб и по ширине. Четвертая и далее загрузки пишет большой размер по Кб и выводит echo filesize($filename2_1); 30150 как и должен. Т.е. получается первые три загрузки getimagesize вообще не сработал. Я правильно понимаю? Если это так, то как можно с этим бороться - это же код, а не гадание на кофейной гуще :biggrin: |
Версия php какая?
формат картинок разный или один? |
Проверяю на локальном компе
Apache/2.0.59 PHP/4.3.4 Картинка одна (если рассматривать скрипт загрузки одного фаила), формат .jpg (обработка в Photoshop) |
Хм, скажу честно, код жуткий (начиная с прямых проверок, странных получений имени файла и расширения и copy вместо move_uploaded_file ну и других конечно), но суть Вашей проблемы полагаю что Вы просто не проверяете ошибку аплоада ($_FILES['image_path']['error']) в Вашем случае получается, когда размер больше указанного в MAX_FILE_SIZE, php выставляет ошибку 2 ( UPLOAD_ERR_FORM_SIZE ), и соответственно $filename2_1 = $_FILES['image_path']['tmp_name']; пустые.
Правда getimagesize потом честно говорит об этом: Код:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /home/hubbitus/_SITES/ru.bir.ru/_temp/imho.ws/Upload/1.php on line 35 |
Т.е. надо ввести проверку на размер временного фаила, чтобы не ноль.
Понял, спасибо. И ещё вопрос в контексте :) Все мы в общем-то учимся постоянно. Вот сейчас я изучаю php, мне интересно почему код жуткий :biggrin: Дело в том, что пытаюсь таким образом максимально обезопасить загрузку картинок пользователями (там есть еще ограничения на вывод информации из БД). Однако, буду признателен любой ссылки на мануал или пример максимально безопасной загрузки картинок на сервер :beer: |
Цитата:
Про жуткий код, ну я частично в скобках уже указал, ну например, что за велосипед: Код:
$name=substr($filename1_1, 0, strrpos($filename1_1, ".")); |
Вот вариант с учётом, анализа ошибок загрузки и проверки временного фаила на ноль. Всё работает.
Кстати фаил a.b.c.d.jpg тоже правильно грузится :) Поясню про 8 символов - сделано по двум причинам: 1. ограничить имя конечного фаила после bin2hex() 2. можно было и 5,7; 8 символов просто небольшая хитрость и пыль в глаза :) PHP код:
Пойду выяснять про отличие copy и move_uploaded_file в аспекте безопасности. |
| Часовой пояс GMT +4, время: 08:38. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.