Надо загрузить фото только jpeg или gif размером не более 500 кб, пишу: PHP: if ($_FILES['foto']["size"]>1) //проверяю есть ли фото { if ($_FILES['foto']["type"]=='image/pjpeg' || $_FILES['foto']["type"]=='image/gif') //проверяю тип { } else { echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$_FILES['foto']["type"]."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>"; } if ($_FILES['foto']["size"]>1024*500)//проверяю размер { $size=round($_FILES['foto']["size"]/1024); echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>"; } } с фотами небольшого размера вроде все работает, но стоит загрузить фоту мерта 2-3, сразу не определяет ни тип, ни вес фоты. Почему? В чем тут ошибка? И еще, в таком виде PHP: if ($_FILES['foto']["size"]>1) //проверяю есть ли фото { [b]if ($_FILES['foto']["type"]!=='image/pjpeg' || $_FILES['foto']["type"]!=='image/gif') //проверяю тип { echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$_FILES['foto']["type"]."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>"; }[/b] if ($_FILES['foto']["size"]>1024*500)//проверяю размер { $size=round($_FILES['foto']["size"]/1024); echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>"; } } даже тип не определяет. Опять не понятно почему?
все работает... по принципу второго... почти... index.php PHP: <?php @$foto = $HTTP_POST_FILES['foto']; if ($foto_size>1) //проверяю есть ли фото { if ($foto_type != 'image/jpeg' || $foto_type != 'image/gif') //проверяю тип { echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$foto_type."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>"; } } else { echo "the first \"if\" is ok<br>"; } if ($foto['size']>1024*500)//проверяю размер { $size=round($foto['size']/1024); echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла ".$size." kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>"; } else { echo "the second \"if\" is ok<br>"; } ?> <form action="index.php" method="POST" enctype="multipart/form-data"> <input type="file" name="foto"> <input type="submit" name="sumbit" value="Upload"> </form>
Вставил этот код, он у меня не работает так же как и мой код. PHP: if ($foto_size>1) //проверяю есть ли фото Он сразу говорит: нет у тебя никакой фоты, т.е. размер не определяется больших фот. Что за переменная $HTTP_POST_FILES? Насколько я понял переменные такого типа использовались в ранних версиях ПХП и на смену ей пришла переменная $_FILES? Если это так, разницы в коде нет. Если ошибаюсь, то подскажите где прочесть про $HTTP_POST_FILES. Может у меня в php.ini надо какую точказапятую убрать, а? И что это за собака (@) перед $foto ?
Что самое интересное, что имя файла $_FILES['foto']["name"] определяет четко, вне зависимости от размера и типа, а остальные параметры определяются только у небольших файлов. Ничего не понимаю! Почему так? У кого-нибудь есть чего-нибудь ядовитое?
псину я поставил для себя... можешь удалить её... не знаю у меня грузит любой размер файла... все ок...
убрал, сделал PHP: echo $foto_size." - ".$foto_type." - ".$foto['size']." - "; пишетчто ничего не видит! нет значений этих переменных! И еще вопрос почему в одном варианте $foto_size, а в другом $foto['size'] ?
у маленького файла определяет только $foto['size']=10043, у большого (в 2 мега) $foto['size']=0. Остальные вышеперечисленные переменные не видит.
post_max_size = 8M upload_max_filesize = 2M, блин понял! Никак не запомню надо комп или только апач перегрузить?
НЕ РАБОТАЕТ!!! Тип не определяется. alexeurodnepr делаю листинг массива print_r ($HTTP_POST_FILES['foto']); Array ( [name] => kitoboy.jpg [type] => image/pjpeg [tmp_name] => C:\Windows\Temp\phpD467.tmp [error] => 0 [size] => 2556 ) А результат таклй: Ошибка загрузки фото! Вы пытаетесь загрузить файл формата image/pjpeg. Загружаемый файл должен быть в формате .jpeg или .gif! Что за фигня такая? Вроде image/pjpeg и там и там одинаково пишется!
а можно чуть поразвернутей ответ, плиз. А то тут все-таки "Программирование на PHP для новичков" :roll:
1. ребут апатча достаточно 2. он говорит, что проверку не нужно делать такую как мы делали PHP: <?php if ($foto_type != 'image/jpeg' || $foto_type != 'image/gif') вот пример, пробуй так проверять на тип файла PHP: <?php $ext = array(".gif",".jpg"); if(in_array(strrchr($_FILES['foto']['name'], ".")),$ext)) { ... } else { echo "У вас не соответствующий формат "; }
вроде победил с помощью preg_match PHP: <? $foto = $HTTP_POST_FILES['foto']; $type_foto1=preg_match('<image/pjpeg>', $HTTP_POST_FILES['foto']["type"]); $type_foto2=preg_match('<image/gif>', $HTTP_POST_FILES['foto']["type"]); $type_foto3=preg_match('<image/jpeg>', $HTTP_POST_FILES['foto']["type"]); if ($foto['name']) //проверяю есть ли фото { if ($foto['size']>1024*500 || $foto['size']==0)//проверяю размер { echo "<b> Ошибка загрузки фото!</b></br> Размер загружаемого файла больше 500kb. Загружаемый файл должен быть размером не более 500 kb!<b></br>"; $mest=$mest+1; } else { if ($type_foto1==1 || $type_foto2==1 || $type_foto3==1) //проверяю тип { } else { echo "<b> Ошибка загрузки фото!</b></br> Вы пытаетесь загрузить файл формата <b>".$foto['type']."</b>. Загружаемый файл должен быть в формате .jpeg или .gif!<b></br>"; $mest=$mest+1; } } } ?> Пока все работает без проблем. Всем спасибо!!!
люди говорят применять регуляр только при необходимости т.к. он долго соображает... имхо мой пример лучше