Alekzzzander мне кажется вы нас обманываете. Сделайте вывод всех переменных и посмотрите, те ли они, которые вы ожидаете: PHP: var_dump($src_img); var_dump($name); $old_x=imageSX($src_img); $old_y=imageSY($src_img); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thum b_w,$thumb_h,$old_x,$old_y); imagedestroy($src_img);
PHP: if ($_FILES['img']['type'][$i]=="image/jpeg"){ $src_img=imagecreatefromjpeg($name);} $name - string(50) "img/05ee73e6f705720266dc0046dc4e3cfa.jpg $src_img - NULL как я понимаю проблема в $src_img но что с ним не так незнаю
Alekzzzander во первых - нельзя верить $_FILES['img']['type'], во вторых - откуда берется $name все таки? Не логичнее ли было использовать $_FILES['img']['tmp_name'][$i]. Подумав - $src_img - будет непроинициализирована, если ($_FILES['img']['type'][$i]=="image/jpeg") будет False. Логично что впоследствии все функции использующие непроинициализированную переменную будут возвращать ошибку
у меня есть функция: function createthumb($name,$filename,$new_w,$new_h) то есть я использую ее в скрипте так: createthumb($f,....) переменная $f это и есть пусть к изображению с самим изображением то есть img/05ee73e6f705720266dc0046dc4e3cfa.jpg верить или нет но я сам беру jpg изображение хочу повториться, что до того как сделать попытку загрузки нескольких изображений, я работал с одним изображением, и все прекрасно работало, вопрос, почему не хочет работать с несколькими? и почему нельзя верить $_FILES['img']['type'] с таким же успехом нельзя верить самому формату .jpg и как тогда проверять изображение?
Alekzzzander прочитайте по ссылке в моей подписи как правильно задавать вопросы. Пока вы не сказали ничего конкретного "сделал загрузку нескольких изображений" - как сделали, что сделали, что было до этого, после какого момента не работает? Задайте вопрос например так: "Есть функция, которая создает превью, вот ее код: [код] Вызывается отсюда и так: [код]. Для одиночного файла все работает. Сделал минимальные изменения, чтобы принимались несколько файлов так и вызываю функцию так: [код]. После этого работать перестало" $_FILES['img']['type'] - записывается браузером в пост запросе исходя из расширения файла (уточняю, ТОЛЬКО расширения, но не формата) - злоумышленник может подменить запрос так, что расширение файла будет например .php, а filetype передаваться image/jpeg (что например может привести к раскрытию путей, как минимум). Формату верить можно, например c помощью http://php.net/getimagesize можно узнать mime-type файла.
Есть функция, которая создает превью, вот ее код: PHP: function createthumb($name,$filename,$new_w,$new_h){ var_dump($name."|||"); if ($_FILES['img']['type'][$i]=="image/jpeg"){ $src_img=imagecreatefromjpeg($name); } if ($_FILES['img']['type'][$i]=="image/png"){ $src_img=imagecreatefrompng($name); } if ($_FILES['img']['type'][$i]=="image/gif"){ $src_img=imagecreatefromgif($name); } var_dump($src_img); $old_x=imageSX($src_img); $old_y=imageSY($src_img); if ($old_x > $old_y) { $thumb_w=$new_w; $thumb_h=$old_y*($new_h/$old_x); } if ($old_x < $old_y) { $thumb_w=$old_x*($new_w/$old_y); $thumb_h=$new_h; } if ($old_x == $old_y) { $thumb_w=$new_w; $thumb_h=$new_h; } $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); if ($_FILES['img']['type'][$i]=="image/png") { imagepng($dst_img,$filename); } if ($_FILES['img']['type'][$i]=="image/gif") { imagegif($dst_img,$filename); } if ($_FILES['img']['type'][$i]=="image/jpeg") { imagejpeg($dst_img,$filename); } imagedestroy($dst_img); imagedestroy($src_img); } Вызывается отсюда и так: createthumb($fi,$mimg.$nn.$type,$tsize,$tsize); где $fi это адрес изображения в формате img/05ee73e6f705720266dc0046dc4e3cfa.jpg $mimg.$nn.$type - уменьшиное изображение $tsize - размер изображения Для одиночного файла все работает. Сделал минимальные изменения, чтобы принимались несколько файлов, добавил цикл for ($i=0; $i < $ni; $i++) { Сами изображения на хост загружаются. но изменение размера не происходит
Есть файл например chislo.txt в нем записано число. Записываем число в переменную: PHP: $maxlength = 100; $open = fopen("chislo.txt", "r"); $string = fgets($open, $maxlength); fclose($open); $float = floatval($string); //Переделываем строку в число с плавающей точкой $A = $float; Пусть число в файле chislo.txt было 0. Потом оно изменилось на 1000. $A стала равна 1000. Потом 1000 сменилось например на 2000. Как сделать так, чтобы $A стала равна 3000?
Alekzzzander гораздо лучше, добавьте в начало функции createthumb строку: PHP: GLOBAL $i; почему и зачем - можно почитать тут: http://www.php.ru/manual/language.variables.scope.html гаррет-тень сформулируйте, пожалуйста, по какому принципу 0 записывается в $a как 0, 1000 записывается как 1000, а 2000 ВНЕЗАПНО записывается как 3000
я немнога в недопанимание вот код тка некак непоиму для чего нужно ето if($k===$selected) $ch=" selected"; else $ch=""; и зачем оптион подстовлается $ch пробовал без етого куска тоже всё работает ето тоже некак немогу понять $selected=0) зачем нол присваивать были догадки типа чтобы поначалу был выбран первыи индекс тоест нол нефига непоиму вот вес код <?php function selectItems($items, $selected=0){ $test=""; foreach ($items as $k=>$v){ if($k===$selected) $ch=" selected"; else $ch=""; $text.="<option$ch value='$k'>$v</option>\n"; } return $text; } $names=array("a"=>"one", "b"=>"two","c"=>"three"); if(isset($_REQUEST['surname'])){ $name=$names[$_REQUEST['surname']]; echo "Your choice is : {$_REQUEST['surname']}, {$name} "; } ?> <form action="<?=$_SERVER['SCRIPT_NAME']?>" method=post> Select: <select name="surname"> <?=selectItems($names,$_REQUEST['surename'])?> </select><br> <input type=submit value="get_surename"> </form>
основы html. если в option написать selected, до этот пункт будет выделен по умолчанию, а $selected(0) это значение по умолчанию для функции
Народ как мне быть. Помогите. PHP: imagealphablending($src, false); imagesavealpha($src, true); imagecopy($thumb, $src, 100, 245, 0, 0, 50, 34); $src это файл .PNG с прозрачнастю рисовал в адобе. Когда я его накладаваю на $thumb это .jpg то у $src чёрный фон и никакой прозрачности нет. Помогите подскажыте чё делать ? или ктота дайте пример...
Afarcheg,попробуй измени формат $src на gif Если это что-то типа watermark'a то по идее он с гифом только более менее работает,если же я не ошибаюсь
есть форма загрузки некольких файлов: PHP: <input type='file' name='img[]'><br> <input type='file' name='img[]'><br> <input type='file' name='img[]'><br> <input type='file' name='img[]'><br> Как сделать проверку, что если в форме нет файла, то в скрипте эта форма отбрасывается сечас есть такое исловие? PHP: if ($_FILES['img']['type'][$i]=="image/gif" || ($_FILES['img']['type'][$i]=="image/jpeg") || ($_FILES['img']['type'][$i]=="image/png")){ скрипт... } else { echo 'Неверный формат файла'; } вот сейчас если не во все формы вставлен файл, то выводит "Неверный формат файла" по количеству пустых форм
Alekzzzander, скажи чесно, оно работает с 1+ файлами? нет у тебя input'ы все с одинаковым именем! сделай разные name и проверяй isset'ом
тогда пол скрипта переписывать О.о есть же какой нить другой пособ? все норм работает но строки смущают, может есть проверка массивов ? если массив пустой то пропускается, если в нем что то есть то скрипт обрабатывает его...как?
вообще, у него всё сделано правильно - это массив из 4 инпутов а почему-бы не сделать проверку сначала? Code: if(!isset($_FILES['img']['type']['0'])||!isset($_FILES['img']['type']['1'])||!isset($_FILES['img']['type']['2'])||!isset($_FILES['img']['type']['3']))echo 'Не все поля заполнены';else{...} или я что-то не так понял?
мне надо что бы человек мог загрузить 1 ИЛИ две или все 5 картинок, и небыло лишних надписей, в данный момент если загружаю 2 картинки а инпутов 5 то выскакивает 3 надписи Неверный формат файла вот я хочу что бы их небыло а яповлялись что бы только тогда когда формат файла и правда неверный
PHP: if(($_FILES[file1][type] == 'image/jpeg') or !isset($_FILES[file1])) { //code here } else { echo "<font color=red>Неверный формат</font>"; } мб так