Привет всем. Вопрос такой. Когда мы используем обычную форму добавления картинки на сайт, куда файл помещается, и что именно передается в обработчик? т.е. есть : Код (Text): <form action="obrabotchik.php" method="post"> <input name="" type="file" /> <input name="" type="submit" /> </form> вопрос2: Если у меня 4 поля для добавления фоток... как мне сделать в начале обработчика появлялся массив с этими четырьмя (а точнее от одной до четырех(как пользователь захочет)) картинками? просто в этом обработчике все четыре картинки должны обработаться так как задано.
Советую почитать книги по html, php свежие 2014/2015 года. А ещё документацию по PHP https://php.net/manual/ru/ Вот можно было легко найти через поиск "php загрузка фалов" https://php.net/manual/ru/features.file-upload.post-method.php По второму вопросу, покажи какой у тебя массив и что хочешь получить в результате.
цель такая. пользователь отправляет от одной до четырех картинок. картинки попадают на страницу obrabotchik.php вот часть кода которая обрабатывает картинку так ка нужно для сайта: Код (Text): if (!isset($_POST['button_add_moderator'])) {exit('Работайте только с формой добавления');} $max_width = 540; $max_height = 404; if (empty($_FILES['imgupload1']['name'])) { $avatar = "nologo_bb.jpg"; } elseif($_FILES['imgupload1']['name'] > 6000*20*6000){ echo "превышен размер файла"; exit; } else { $path_directory = 'bbimg_admin/'; if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload1']['name'])) { $filename = $_FILES['imgupload1']['name']; $source = $_FILES['imgupload1']['tmp_name']; $target = $path_directory . $filename; move_uploaded_file($source, $target); if(preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($path_directory.$filename) ; } if(preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($path_directory.$filename) ; } if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_directory.$filename); } $size = getimagesize($target); // Read the size $width = $size[0]; $height = $size[1]; $x_ratio = $max_width / $width; $y_ratio = $max_height / $height; if( ($width <= $max_width) && ($height <= $max_height) ) { $tn_width = $width; $tn_height = $height; } elseif (($x_ratio * $height) < $max_height) { $tn_height = ceil($x_ratio * $height); $tn_width = $max_width; } else { $tn_width = ceil($y_ratio * $width); $tn_height = $max_height; } ini_set('memory_limit', '300M'); $date=time(); $src = imagecreatefromjpeg($target); $dst = imagecreatetruecolor($tn_width, $tn_height); $nimg = imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height); imagejpeg($dst,$path_directory."infor_com_ua-".$date.".jpg"); $avatar = $path_directory."infor_com_ua-".$date.".jpg"; } else { exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); } } Этот код пропорционально уменьшает картинку до необходимых размеров. И я вот что себе думаю, мне нужно в этот обработчик засунуть четыре картинки, что бы они все были обработаны. Как это лучше реализовать? то ли это будет массив с четырьмя (или меньше) картинками, и этот массив в цикле через этот код провести, то ли, может из этого кода функцию создать... хз кароче как правильно... натолкните меня на правильные мИсли!) потом, после обработки файла, или файлов(если несколько) на сервер они загружаются, и в БД прописываются пути, ну соответственно потом выводятся пользователю на страницу. Спасибо!
делай функцию и циклом по массиву проходи http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html
В общем, доработал передачу файлов в обработчик, а сейчас застрял на самом важном. Вот есть массив $arr его надо в цикле провести через функцию. не могу соориентироваться какие данные функции передать. Кому не сложно, помогите все "по полочкам разложить" и в цикле запустить. Спасибо Код (Text): $arr = array($pict1,$pict2,$pict3,$pict4); function pict(){ $max_width = 540; $max_height = 404; if (empty($_FILES['imgupload1']['name'])) { $avatar = "nologo_bb.jpg"; } elseif($_FILES['imgupload1']['name'] > 6000*20*6000){ echo "превышен размер файла"; exit; } else { $path_directory = 'bbimg_admin/'; if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload1']['name'])) { $filename = $_FILES['imgupload1']['name']; $source = $_FILES['imgupload1']['tmp_name']; $target = $path_directory . $filename; move_uploaded_file($source, $target); if(preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($path_directory.$filename) ; } if(preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($path_directory.$filename) ; } if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_directory.$filename); } $size = getimagesize($target); $width = $size[0]; $height = $size[1]; $x_ratio = $max_width / $width; $y_ratio = $max_height / $height; if( ($width <= $max_width) && ($height <= $max_height) ) { $tn_width = $width; $tn_height = $height; } elseif (($x_ratio * $height) < $max_height) { $tn_height = ceil($x_ratio * $height); $tn_width = $max_width; } else { $tn_width = ceil($y_ratio * $width); $tn_height = $max_height; } ini_set('memory_limit', '300M'); $date=time(); $src = imagecreatefromjpeg($target); $dst = imagecreatetruecolor($tn_width, $tn_height); $nimg = imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height); imagejpeg($dst,$path_directory."infor_com_ua-".$date.".jpg"); $avatar = $path_directory."infor_com_ua-".$date.".jpg";} imagedestroy($src); imagedestroy($dst); unlink ($target); } } pict();
Есть удобные библиотеки, чтобы манипулировать изображениями, например https://github.com/avalanche123/Imagine И вот пример как несколько файлов получить и вывести их тип Код (PHP): <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form enctype="multipart/form-data" action="?" method="POST"> Отправить этот файл: <input name="userfiles[]" type="file" multiple> <input type="submit" value="Send File" /> </form> <?php $files_arr = 'userfiles'; $files_type = array(IMAGETYPE_GIF => 'gif', IMAGETYPE_JPEG => 'jpeg', IMAGETYPE_PNG => 'png'); function echoFileList($files, $files_type) { foreach ($files["error"] as $key => $error) { $img_type = exif_imagetype($files["tmp_name"][$key]); if ($error == UPLOAD_ERR_OK && isset($files_type[$img_type]) ) { $tmp_name = $files["tmp_name"][$key]; $name = $files["name"][$key]; echo "оригинальное имя файла: $name путь временного файла: $tmp_name тип {$files_type[$img_type]}<br>"; } } } if (isset($_FILES[$files_arr])) { echoFileList($_FILES[$files_arr], $files_type); echo "<pre>"; var_dump($_FILES); echo "</pre>"; } ?> </body> </html>