Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ввод фотографий. Контроль
 
 автор: tavila2009   (01.11.2010 в 19:46)   письмо автору
 
 

Человек вводит фотографию в фотоальбом на сервер.
Как проверить размер фотографии высоту не более 500 пикселей перед загрузкой на сайт.

  Ответить  
 
 автор: psychomc   (01.11.2010 в 19:51)   письмо автору
 
   для: tavila2009   (01.11.2010 в 19:46)
 

хотите защититься от лукавого? :)

  Ответить  
 
 автор: Slo_Nik   (01.11.2010 в 19:51)   письмо автору
 
   для: tavila2009   (01.11.2010 в 19:46)
 

getimagesize();

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 19:53)   письмо автору
 
   для: Slo_Nik   (01.11.2010 в 19:51)
 

но фотография ещё не введена и не записана на сайт

<input type="file" name="image" />
так ввожу её в форме.

  Ответить  
 
 автор: sim5   (01.11.2010 в 19:56)   письмо автору
 
   для: tavila2009   (01.11.2010 в 19:53)
 

И что вы тогда хотите? Можно с клиента эти данные передать посредством Ajax, но ведь его можно и отключить, если вы о защите. А иным способом только загрузив и проверив временный файл на это условие, принимаете решение о его пермещении в каталог или нет.

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 19:59)   письмо автору
 
   для: sim5   (01.11.2010 в 19:56)
 

но фотография ещё не введена и не записана на сайт

<input type="file" name="image" />
так ввожу её в форме.
в принимающей проверяю вводил ли посетительфотографию

if (!empty($_FILES['image']['tmp_name']))
{... }

Вот тут бы и проверить перед перезаписью на сервер какая она по размеру.
Пока проверяю только вес и .ext

$ext = strrchr($_FILES['image']['name'], ".");
$ext = strtolower($ext);
echo $ext."<br />";
if ($_FILES["image"]["size"] > 300*1024){ .... }

  Ответить  
 
 автор: sim5   (01.11.2010 в 20:33)   письмо автору
 
   для: tavila2009   (01.11.2010 в 19:59)
 

Значит так - if (!empty($_FILES['image']['tmp_name'])) вы можете сделать тогда и только тогда, когда изображение уже на сервере, то есть закачано. То что вы его не переместили еще в папку свою, совсем не означет, что оно еще у пользователя. Поэтому getimagesize($_FILES['image']['tmp_name']), а $_FILES["image"]["size"] - это не размер изображения в пикселях, а размер его в байтах! Прочтите еще раз и внимательней мануал, и книгу свою.

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 20:55)   письмо автору
 
   для: sim5   (01.11.2010 в 20:33)
 

Вы невнимательно прочитали -
if ($_FILES["image"]["size"] > 300*1024){ .... } - вот так я проверяю . Пикселей здесь и в помине нет. Это вес. Интересует как записать проверку в пикселях.

  Ответить  
 
 автор: Киналь   (01.11.2010 в 20:57)   письмо автору
 
   для: tavila2009   (01.11.2010 в 20:55)
 

Вам же ответили  — getimagesize()

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 21:00)   письмо автору
 
   для: Киналь   (01.11.2010 в 20:57)
 

Для временных файлов в учебнике есть только такое:

echo ($_FILES["filename"]["name"]);
echo "размер файла: ";
echo ($_FILES["filename"]["size"]);
echo "каталог: ";
echo ($_FILES["filename"]["tmp_name"]);
echo "тип файла: ";
echo ($_FILES["filename"]["type"]);

Проверки в пикселях не предусмотрено наверно для временного.

  Ответить  
 
 автор: Киналь   (01.11.2010 в 21:31)   письмо автору
 
   для: tavila2009   (01.11.2010 в 21:00)
 

Учебник — это хорошо, но ни один учебник не заменит практики. Экспериментируйте, не бойтесь.

Вот и сейчас: что значит «нет в учебнике проверки на пиксели»? У вас есть временный файл, есть функция, которая возвращает размеры любого изображения. Так примените одно к другому и посмотрите, что получится.

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 21:39)   письмо автору
 
   для: Киналь   (01.11.2010 в 21:31)
 

Спасибо. Вдохновили. Щас попробую. :)))))

  Ответить  
 
 автор: psychomc   (02.11.2010 в 10:39)   письмо автору
 
   для: tavila2009   (01.11.2010 в 21:39)
 

с богом...

  Ответить  
 
 автор: sim5   (02.11.2010 в 04:06)   письмо автору
 
   для: tavila2009   (01.11.2010 в 20:55)
 

Я внимательно прочел, потому и написал, что if ($_FILES["image"]["size"] > 300*1024) никак вам не вернет желаемого. Нет ключа у массива $_FILES передающего размеры изображения. Самое смешное, что вы приняв изображение, тем не менее говорите, что оно еще не загружено. Чтобы действительно узнать размеры до загрузки, нужно их узнать у клиента, и передать на сервер:
<script> 
function imgVal(s) { 
  var ims = new Image(); 
  ims.src = s; 
  ims.onload = function() { 
    var val = ims.width + ";" + ims.height; //вот это передать на сервер 
  } 

</script> 

<input type="file" name="image" onchange="imgVal(this.value)">
А далее уж что хотите, предупреждайте, ругайте.... но это никак не остановит пользователя от передачи формы вам.

  Ответить  
 
 автор: captain-america   (02.11.2010 в 10:03)   письмо автору
 
   для: sim5   (02.11.2010 в 04:06)
 

А есть какие-либо настройки сервера apache или php, где можно указать max количество байт в передаче данных на сервер?

  Ответить  
 
 автор: Slo_Nik   (02.11.2010 в 10:11)   письмо автору
 
   для: captain-america   (02.11.2010 в 10:03)
 

[поправлено модератором]

  Ответить  
 
 автор: captain-america   (02.11.2010 в 10:32)   письмо автору
 
   для: Slo_Nik   (02.11.2010 в 10:11)
 

Вы не поняли, скажем я указываю в настройках загрузить не более 50 Кб, и скажем когда файл будет грузиться на сервер во временное хранилище, то закачка обрубилась бы на 50 кб..
Просто услвоия некоторых хостеров по траффику, чтобы исходящий был в 4 раза больше входящего, и мне бы хотелось, чтобы входящий был минимален.

  Ответить  
 
 автор: sim5   (02.11.2010 в 10:41)   письмо автору
 
   для: captain-america   (02.11.2010 в 10:32)
 

Это в php.ini максимальный размер загружаемого файла указывается, в мегабайтах.

  Ответить  
 
 автор: captain-america   (02.11.2010 в 10:59)   письмо автору
 
   для: sim5   (02.11.2010 в 10:41)
 

То есть, я могу там указать 0.5 и скажем мне на сервер от клиента передастся не больше 05. мегабайт?

  Ответить  
 
 автор: sim5   (02.11.2010 в 11:06)   письмо автору
 
   для: captain-america   (02.11.2010 в 10:59)
 

Не знаю, десятичные значения я не пробовал указывать, пробуйте сами. А по умолчанию указаны единицы мегабайты:
upload_max_filesize = 2M
так что можете попробовать указать килобайты, байты.

  Ответить  
 
 автор: psychomc   (02.11.2010 в 11:08)   письмо автору
 
   для: captain-america   (02.11.2010 в 10:59)
 

вы не captain-america, вы captain-evidence

без обид :)

upload_max_filesize integer
http://www.php.ru/manual/ini.core.html

а, хотя можно, просто вместо M на конце пишите K (килобайты), например upload_max_filesize = 500K

  Ответить  
 
 автор: captain-america   (02.11.2010 в 11:18)   письмо автору
 
   для: psychomc   (02.11.2010 в 11:08)
 

Суть была не в цифрах, а в процессе)

Вырезка из ссылки
>Устанавливает максимальный допустимый размер POST-данных

Так мне надо знать как он их определяет? Вопрос связан с входящим траффиком, Скажаем я загружаю 2 мб, а лимит загрузки стоит 1МБ.

И вот мой главный вопрос)) Какой у меня будет входящий траффик? 2МБ(то есть php скажет постфактум, я загрузил, но чета много) или 1МБ( в процессе загрузке php скажет, брателло ты превысил лимит, забирай пост данные обратно?)))

  Ответить  
 
 автор: sim5   (02.11.2010 в 11:39)   письмо автору
 
   для: captain-america   (02.11.2010 в 11:18)
 

Файл просто загрузиться не до конца и вы получите ошибку. Попробуйте загрузить, и все вопросы отпадут.

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 20:00)   письмо автору
 
   для: sim5   (01.11.2010 в 19:56)
 

я не нашла в учебнике о проверке временного файла перед записью на высоту.

  Ответить  
 
 автор: tavila2009   (01.11.2010 в 20:17)   письмо автору
 
   для: sim5   (01.11.2010 в 19:56)
 

как это записать.?

  Ответить  
 
 автор: Slo_Nik   (01.11.2010 в 22:54)   письмо автору
 
   для: tavila2009   (01.11.2010 в 20:17)
 

прочтите в руководстве пользователя о функции getimagesize(); и поймёте, как проверить высоту, ширину файла.

  Ответить  
 
 автор: Commander   (02.11.2010 в 08:29)   письмо автору
 
   для: tavila2009   (01.11.2010 в 19:46)
 

<?php
    
list($width$height) = getimagesize($_FILES["image"]["tmp_name"]);
    if (
$height 500) exit("Высота изображения больше 500 пикселей");
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования