Не получается обходить циклом, полученный массив и обрабатывать по-отдельности, пробовал через for - ничего не выводилось. Код (Text): <?PHP $image_path = "9lesson.png"; $font_path = "OpenSans-Regular.ttf"; // в пикселях //$water_mark_text_1 = "9"; if(isset($_POST["usertext"])){ $water_mark_text_2 = $_POST["usertext"]; } if(empty($_POST["usertext"])){ $water_mark_text_2 = "Ваш текст"; } if(isset($_POST["usersize"])){ $font_size = $_POST["usersize"]; } if(empty($_POST["usersize"])){ $font_size = 9; } function watermark_image($oldimage_name, $new_image_name){ global $image_path; list($owidth,$oheight) = getimagesize($oldimage_name); $width = $height = 300; $im = imagecreatetruecolor($width, $height); $img_src = imagecreatefromjpeg($oldimage_name); imagecopyresampled($im, $img_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight); $watermark = imagecreatefrompng($image_path); list($w_width, $w_height) = getimagesize($image_path); $pos_x = $width - $w_width; $pos_y = $height - $w_height; imagecopy($im, $watermark, $pos_x, $pos_y, 0, 0, $w_width, $w_height); imagejpeg($im, $new_image_name, 100); imagedestroy($im); unlink($oldimage_name); return true; } function watermark_text($oldimage_name, $new_image_name){ global $font_path, $font_size, $water_mark_text_1, $water_mark_text_2; list($owidth,$oheight) = getimagesize($oldimage_name); $width = $owidth; $height = $oheight; $image = imagecreatetruecolor($width, $height); $image_src = imagecreatefromjpeg($oldimage_name); imagecopyresampled($image, $image_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight); $black = imagecolorallocate($image, 0, 0, 0); $blue = imagecolorallocate($image, 79, 166, 185); $white = imagecolorallocate($image, 255, 255, 255); // imagettftext($image, $font_size, 0, 30, 190, $black, $font_path, $water_mark_text_1); // Цвета текста if($_POST["usertextcolor"] == "blue"){ $font_color = $blue; } if($_POST["usertextcolor"] == "white"){ $font_color = $white; } if($_POST["usertextcolor"] == "black"){ $font_color = $black; } // imagettftext($image, $oheight*2/100, 90, $owidth-9, $oheight-7, $font_color, $font_path, $water_mark_text_2); imagejpeg($image, $new_image_name, 100); imagedestroy($image); unlink($oldimage_name); return true; } $demo_image= ""; if(isset($_POST['createmark']) and $_POST['createmark'] == "Submit"){ $path = "uploads/"; $valid_formats = array("jpg", "bmp", "jpeg", "png"); $name = $_FILES['imgfile']['name']; if(strlen($name)) { list($txt, $ext) = explode(".", $name); if(in_array($ext,$valid_formats)&& $_FILES['imgfile']['size'] <= 17*1024*1024) { $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'], $path.$_FILES['imgfile']['name']); if($upload_status){ $new_name = $path.time().".jpg"; if(watermark_text($path.$_FILES['imgfile']['name'], $new_name)) $demo_image = $new_name; } } else $msg="Максимальный размер файла 2МБ, поддерживаемые форматы .jpg and .bmp"; } } ?> <html> <head> <title> Watemark </title> <style type="text/css"> body{ width:800px; margin: 15px auto; padding:0px; font-family: arial} </style> </head> <body> <form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" > <fieldset> <legend>Ваши данные</legend> Ваше изображение :<input type="file" name="imgfile[]" id="imgfile"/> Ваш текст: <input style="margin-left: 69;" type="text" name="usertext" value="© "><br> Цвет текста: <select style="margin-left: 54;" name="usertextcolor" size="1"> <option value="white">Белый</option> <option value="black">Черный</option> </select></br> <input type="submit" name="createmark" id="createmark" value="Submit" /> </fieldset> <? echo $noimg; ?> <?PHP if(!empty($demo_image)) echo '<br/><center><div style="max-width:800px;"><img style="max-width:790px;" src="'.$demo_image.'" /></div></center>'; else echo '<h3>'.$msg.'</h3>'; ?> </form> </body> </html>
1. в форме должно быть несколько полей с именем imgfile[] (поле атрибут id у всех тогда будет разный!) 2. на стороне php мы увидим $_FILES[имя_поля][индекс_в_массиве] = массив_информации_о_файле. итерируем foreach( $_FILES['imgfile'] as $fileinfo ) - получаем поочередно доступ к каждому файлу. а дальше логика как у одиночного файла - проверка, ресайз, вотермарк и тдтп. Добавлено спустя 5 минут 6 секунд: Код (Text): list($txt, $ext) = explode(".", $name); if(in_array($ext,$valid_formats)&& $_FILES['imgfile']['size'] <= 17*1024*1024) это очень плохая проверка. по расширению файлы идентифицирует только Microsoft Windows. все остальные (нормальные) системы ориентируются на содержимое файла - так называемый MIMETYPE. иными словами я вам дам zip-архив с расширением jpeg и ваша система попытается обработать этот файл как изображение. а умная система увидит внутри zip-заголовок. рекомендую сразу переписать на работу с содержимым файла, а не с расширением. кстати, еще один облом. у меня камера делает изображения с расширением .JPG а это НЕ равно строке .jpg то есть я не смогу загрузить файл не изменив регистр разрешения.
Апач выдает: explode() expects parameter 2 to be string, array given Код (Text): foreach( $_FILES['imgfile'] as $fileinfo ) { if(isset($_POST['createmark']) and $_POST['createmark'] == "Submit"){ $path = "uploads/"; $valid_formats = array("jpg", "bmp", "jpeg", "png"); $name = $_FILES['imgfile']['name']; if(count($name)) { list($txt, $ext) = explode(".", $name); if(in_array($ext,$valid_formats)&& $_FILES['imgfile']['size'] <= 17*1024*1024) { $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'], $path.$_FILES['imgfile']['name']); if($upload_status){ $new_name = $path.time().".jpg"; if(watermark_text($path.$_FILES['imgfile']['name'], $new_name)) $demo_image = $new_name; } } else $msg="Максимальный размер файла 2МБ, поддерживаемые форматы .jpg and .bmp"; } } }
потому что вы не понимаете что именно делаете. Код (Text): foreach( $_FILES['imgfile'] as $fileinfo ) { if(isset($_POST['createmark']) and $_POST['createmark'] == "Submit"){ $path = "uploads/"; $valid_formats = array("jpg", "bmp", "jpeg", "png"); $name = $_FILES['imgfile']['name']; if(count($name)) { логика условно: 1. итерируем каждый элемент в массиве _FILES['imgfile'] как массив $fileinfo - это правильно скопировано. 2. если есть ключ createmark в массиве _POST и его значение равно строке 'Submit' - вот эта проверка будет у вас каждую итерацию. а не должна. 3. объявляем путь - каждый раз, хотя нужно только один 4. объявляем валидные форматы - ну тут вы на свое усмотрение. выше рекомендация так не делать. 5. присвоить переменной $name значение _FILES['imgfile']['name'] - вот тут у вас уже нет данных. мы ведь несколько файлов массивом imgfile передаем а не один файл в поле imgfile. следовательно имя файла искать надо в _FILES['imgfile'][индекс_в_массиве]['name']. но мы же в первом действии начали итерировать каждый элемент _FILES['imgfile'][индекс_в_массиве] как $fileinfo. следовательно имя файла текущей итерации можно спокойно найти в $fileinfo['name']. 6. если в массиве содержащемся в переменной $name есть элементы - постойте, мы же сюда запихиваем строку с именем файла а не массив имен файлов. может быть empty() или strlen() ? и тд...
Теперь постоянно сообщение - "Максимальный размер файла 2МБ, поддерживаемые форматы .jpg and .bmp". Хотя в условии только расширение и размер. Код (Text): if(isset($_POST['createmark']) and $_POST['createmark'] == "Submit"){ $path = "uploads/"; foreach( $_FILES['imgfile'] as $fileinfo ) { $valid_formats = array("jpg", "bmp", "jpeg", "JPG"); $name = $fileinfo['name']; if(empty($name)) { if($_FILES['imgfile']['type'] == "image/jpg"&& $_FILES['imgfile']['size'] <= 17*1024*1024) { $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'], $path.$_FILES['imgfile']['name']); if($upload_status){ $new_name = $path.time().".jpg"; if(watermark_text($path.$_FILES['imgfile']['name'], $new_name)) $demo_image = $new_name; } } else $msg="Максимальный размер файла 2МБ, поддерживаемые форматы .jpg and .bmp"; } } } Код (Text): <?php if(!empty($demo_image)) { echo '<br/><center><div style="max-width:800px;"><img style="max-width:790px;" src="'.$demo_image.'" /></div></center>'; } else { echo '<h3>'.$msg.'</h3>'; } ?>
прошу прощения, немного не так. уж больно давно с формами не работал. сейчас перепишу. Добавлено спустя 49 минут 18 секунд: вот такой скрипт (с избыточными для дебага данными): Код (PHP): <?php // путь к каталогу загрузок $upload_path = './upload/'; // кол-во полей для загрузки файлов $upload_files_cnt = 4; // лимит размера файла $file_size_limit = 17825792; //17*1024*1024; // кстати, чтоб у сервера все получилось - размер входящих данных // должен быть не менее $upload_files_cnt * $file_size_limit // валидные типы изображений $valid_formats = array('image/jpeg', 'image/bmp', 'image/png'); ?> <html> <head> <title>ru.php.43426-1</title> </head> <body> <pre><?php var_dump( $_POST, $_FILES );?></pre> <?php if( isset( $_POST['createmark'] ) && 'Submit' == $_POST['createmark'] && isset( $_FILES['imgfile'] ) ) { for( $i = 0; $i < $upload_files_cnt; $i++ ) { echo "\n======\n"; // имя оригинального файла, ... $name = isset( $_FILES['imgfile']['name'][ $i ] ) ? trim( $_FILES['imgfile']['name'][ $i ] ) : ''; // ... тип, ... $mime = isset( $_FILES['imgfile']['type'][ $i ] ) ? trim( $_FILES['imgfile']['type'][ $i ] ) : ''; // ... размер, ... $size = isset( $_FILES['imgfile']['size'][ $i ] ) ? doubleval( $_FILES['imgfile']['size'][ $i ] ) : 0; // ... и путь к временной копии загруженного файла $temp = isset( $_FILES['imgfile']['tmp_name'][ $i ] ) ? trim( $_FILES['imgfile']['tmp_name'][ $i ] ) : ''; // путь, куда переместим файл $temp2 = $upload_path . $name; // путь к обработанному файлу $new_name = $upload_path . time() . '.jpg'; var_dump( $name, $mime, $size, $temp, $temp2, $new_name ); if( strlen( $name ) && in_array( $mime, $valid_formats ) && $size <= $file_size_limit ) { // сюда попадаем, если файл в текущей итерации прошел проверку имени, типа и размера if( @ move_uploaded_file( $temp, $temp2 ) ) { // сюда попадаем, если файл успешно перемещен из временного хранилища в $upload_path // собака перед именем функции - для подавления возможных ошибок // тут вызов watermark_text( $temp2, $new_name ) echo "\nWATERMARK\n"; } } else { ?>Максимальный размер файла 17МБ, поддерживаемые форматы JPEG, BMP, PNG.<?php } } // for( i = 0 ... } else // if( isset && submit ) .. else .. { ?> <form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" > <?php for( $i = 1; $i <= $upload_files_cnt; $i++ ){ ?>img-<?=$i?> :<input type="file" name="imgfile[]" id="imgfile-<?=$i?>"/><br><?php } // for( i = 1 .. ?> <input type="submit" name="createmark" value="Submit" /> <?php } // if( isset && submit ) .. else .. ?> </form></body></html> запуск №1 - увидим форму и пустые массивы _POST и _FILES. полученный браузером код: Код (Text): <html> <head> <title>ru.php.43426-1</title> </head> <body> <pre>array(0) { } array(0) { } </pre> <form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" > img-1 :<input type="file" name="imgfile[]" id="imgfile-1"/><br>img-2 :<input type="file" name="imgfile[]" id="imgfile-2"/><br>img-3 :<input type="file" name="imgfile[]" id="imgfile-3"/><br>img-4 :<input type="file" name="imgfile[]" id="imgfile-4"/><br><input type="submit" name="createmark" value="Submit" /> </form></body></html> запуск №2 - отправка формы. даю ей переживать один жипег (валид по типу), один гиф (инвалид по типу) и два поля оставляю пустыми. ожидаю увидеть хорошую информацию о первом файле и три сообщения об ошибке: Код (Text): <html> <head> <title>ru.php.43426-1</title> </head> <body> <pre>array(1) { ["createmark"]=> string(6) "Submit" } array(1) { ["imgfile"]=> array(5) { ["name"]=> array(4) { [0]=> string(9) "3109.JPEG" [1]=> string(10) "Ascii1.gif" [2]=> string(0) "" [3]=> string(0) "" } ["type"]=> array(4) { [0]=> string(10) "image/jpeg" [1]=> string(9) "image/gif" [2]=> string(0) "" [3]=> string(0) "" } ["tmp_name"]=> array(4) { [0]=> string(14) "/tmp/phpmJ5Gc8" [1]=> string(14) "/tmp/phpnDbsoD" [2]=> string(0) "" [3]=> string(0) "" } ["error"]=> array(4) { [0]=> int(0) [1]=> int(0) [2]=> int(4) [3]=> int(4) } ["size"]=> array(4) { [0]=> int(134646) [1]=> int(25167) [2]=> int(0) [3]=> int(0) } } } </pre> ====== string(9) "3109.JPEG" string(10) "image/jpeg" float(134646) string(14) "/tmp/phpmJ5Gc8" string(18) "./upload/3109.JPEG" string(23) "./upload/1359899321.jpg" WATERMARK ====== string(10) "Ascii1.gif" string(9) "image/gif" float(25167) string(14) "/tmp/phpnDbsoD" string(19) "./upload/Ascii1.gif" string(23) "./upload/1359899321.jpg" Максимальный размер файла 17МБ, поддерживаемые форматы JPEG, BMP, PNG. ====== string(0) "" string(0) "" float(0) string(0) "" string(9) "./upload/" string(23) "./upload/1359899321.jpg" Максимальный размер файла 17МБ, поддерживаемые форматы JPEG, BMP, PNG. ====== string(0) "" string(0) "" float(0) string(0) "" string(9) "./upload/" string(23) "./upload/1359899321.jpg" Максимальный размер файла 17МБ, поддерживаемые форматы JPEG, BMP, PNG.</form></body></html> как видно, WATERMARK будет запущен только один раз, остальные файлы нас огорчили. логика должна быть примерно такой. извините, что направил в неверном направлении.
Извеняюсь за любопытство, но как вотемарк вставить и вывести... Ввод и вывод из массива понял, но немного затруднения с вотемарком.
оффтоп любопытство это хорошо. я понимаю, что вы пишите в форуме для новичков, но, давайте я не буду основы алгоритмизации программирования вам объяснять. просто для себя сейчас распишите на бумаге последовательность действий по шагам. от первоначального показа формы до отправки пользователя к странице "ура у меня тут все получилось". просто как вы себе это видите. этот алгоритм опишите человеческими словами. сможете - будем отвечать на возникшие при реализации этого алгоритма вопросы. не сможете - не вижу смысла засорять голову тем что называется программированием. /оффтоп для этого берется файл, на который будем знаки накладывать (1) и нужные для вотермарка данные (2) будь то это готовый графический файл или изображение, генерируемое налету (например произвольный текст). далее берем холст 1 и накладываем на него холст 2 в определенном месте с определенной геометрией и прозрачностью (3). получившийся файл складируем на память предкам или сразу выкидываем в браузер пользователя (4). как видите, план состоит из 4 пунктов, но алгоритма и кода будет больше. в первом посте (я не вчитывался) какая-то функция у вас вроде реализована.
Извеняюсь, но я понял структуру цикла, переписал более нормально код, меня интересует как сделать чтобы цикл обрабатывал столько изображений, сколько было загружено или если есть имя у загруженного файла. У меня есть код но с циклом он не работает. Код (Text): <?php // если нажата кнопка загрузки if(isset($_POST['createmark'])) { // директория для хранения загружаемых изображений $path = "uploads/"; // цикл перебора данных for(!empty($name); !empty($demo_image);){ // массив разрешенных расширений $valid_formats = array("jpg","bmp","jpeg"); // получаем имя загружаемого изображения $name = $_FILES['imgfile']['name']; // имя есть, то: if(strlen($name)) { // получаем тип загружаемого файла $ext = explode("/", $_FILES['imgfile']['type']); // если расширение принадлежит массиву разрешенных расширений и размер <= 2Мб, то загружаем изображение if(in_array($ext[1],$valid_formats)&& $_FILES['imgfile']['size'] <= 15*1024*1024) { // загружаем изображение $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'], $path.$_FILES['imgfile']['name']); // при успешной загрузке if($upload_status) { // задаем директорию и имя для сохранения нового изображения $new_name = $path.time().".jpg"; // добавляем водяной знак: watermark_text() - для текста, watermark_image() - для изображения if(watermark_text($path.$_FILES['imgfile']['name'], $new_name)) $demo_image = $new_name; if(!empty($demo_image)) echo '<br/><center><img src="'.$demo_image.'" border="1"/></center>'; else echo '<h3>Не получилось!</h3>'; } else echo "Загрузка не удалась!"; } else echo "Превышен размер разружаемого файла (Max 15Мб). Либо изображение имеет не верный формат"; } } } ?>
а что у вас с таким кодом происходит-то? насколько я вижу - итерации есть, вызов вашей фабрики ватермарков есть, следовательно оно должно работать правильно. давайте подумаем, что не правильно?
Код ничего не выводит на страницу. Полный код Код (Text): <?php // Если запускать под Linux, то указаваем что используемый нами шрифт лежит в этой же директории putenv('GDFONTPATH=' . realpath('.')); // задаем переменные $font_path = "OpenSans-Regular.ttf"; // шрифт $font_size = 9; // размер шрифта в px $water_mark_text = "site.name"; // текст // подключаем используемые функции include 'watermark.func.php'; $demo_image= ""; ?> <html> <head> <title></title> </head> <body> <form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" > <fieldset> <legend>Загрузка изображения</legend> Изображение :<input type="file" name="imgfile" id="imgfile"/><br /> Цвет текста: <select style="margin-left: 54;" name="usertextcolor" size="1"> <option value="white">Белый</option> <option value="black">Черный</option> </select></br> <input type="submit" name="createmark" id="createmark" value="Загрузка" /> </fieldset> <?php // если нажата кнопка загрузки if(isset($_POST['createmark'])) { // директория для хранения загружаемых изображений $path = "uploads/"; // массив разрешенных расширений $valid_formats = array("jpg","bmp","jpeg"); // получаем имя загружаемого изображения $name = $_FILES['imgfile']['name']; // имя есть, то: if(strlen($name)) { // получаем тип загружаемого файла $ext = explode("/", $_FILES['imgfile']['type']); // если расширение принадлежит массиву разрешенных расширений и размер <= 2Мб, то загружаем изображение if(in_array($ext[1],$valid_formats)&& $_FILES['imgfile']['size'] <= 15*1024*1024) { // загружаем изображение $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'], $path.$_FILES['imgfile']['name']); // при успешной загрузке if($upload_status) { // задаем директорию и имя для сохранения нового изображения $new_name = $path.time().".jpg"; // добавляем водяной знак: watermark_text() - для текста, watermark_image() - для изображения if(watermark_text($path.$_FILES['imgfile']['name'], $new_name)) $demo_image = $new_name; if(!empty($demo_image)) echo '<br/><center><img src="'.$demo_image.'" border="1"/></center>'; else echo '<h3>Не получилось!</h3>'; } else echo "Загрузка не удалась!"; } else echo "Превышен размер разружаемого файла (Max 15Мб). Либо изображение имеет не верный формат"; } } ?> </form> </body> </html> watermark.func.php Код (Text): <?php /** * Наложение водяного знака в виде текста * @param $oldimage_name - исходное изображение * @param $new_image_name - выходное изображение * @return Boolean */ function watermark_text($oldimage_name, $new_image_name){ // получение значений шрифта, размера и текста, используемых для наложение global $font_path, $font_size, $water_mark_text; // получаем размеры исходного изображения list($owidth,$oheight) = getimagesize($oldimage_name); // задаем размеры для выходного изображения $width = $owidth; $height = $oheight; // создаем выходное изображение размерами, указанными выше $image = imagecreatetruecolor($width, $height); $image_src = imagecreatefromjpeg($oldimage_name); // разрешения // наложение на выходное изображение, исходного imagecopyresampled($image, $image_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight); // задаем цвет для накладываемого текста $black = imagecolorallocate($image, 0, 0, 0); $white = imagecolorallocate($image, 255, 255, 255); if($_POST["usertextcolor"] == "white"){ $font_color = $white; } if($_POST["usertextcolor"] == "black"){ $font_color = $black; } // определяем позицию расположения водяного знака $pos_x = $width - (strlen($water_mark_text)-1)*$font_size; $pos_y = $height; // наложение текста на выходное изображение imagettftext($image, $oheight*2/100, 90, $owidth-9, $oheight-7, $white, $font_path, $water_mark_text); // сохраняем выходное изображение, уже с водяным знаком в формате jpg и качеством 100 imagejpeg($image, $new_image_name, 100); // уничтожаем изображения imagedestroy($image); unlink($oldimage_name); return true; } ?>
почему? оффтоп вы пишите программу. вы обязаны знать какие данные где находятся на каждом шаге выполнения программы. если что-то пошло не так - сравниваете данные в своей голове с данными в программе. вот эта процедура называется дебаг. если у вас вообще ничего не выводится - возможно, вы отключили вывод ошибок. и это допустим нормальная практика. но на этапе написания программы вы вправе выводить все необходимые для отладки данные удобным для вас образом. судя по тому что программа ничего не выводит, то, возможно, она ничего и не должна выводить, но дебаг должным образом вы явно не проводите. в первую очередь вам самому нужно знать что происходит с вашей программой, и только если у вас останутся к самому себе вопросы - задавать вопросы на форуме. знаете как багтрек организован в общей массе? "делаю то-то, жду вот так, вижу вот это", + дополнительные сведения о софте/железе и тп. и девелоперы пытаются воспроизвести ошибку у себя. если находят - начинают исправлять. не находят - ставят метку "не воспроизводима". когда я вижу подобные пустые запросы "помогите!!! не работает ничего!!!" мне хочется ответить "а комп-то включен?" /оффтоп
Проблема с циклом, без цикла все работает отлично. Добавлено спустя 9 минут 4 секунды: Выдает Warning: strlen() expects parameter 1 to be string, array given in Z:\home\watemark\www\index.php on line 45 и до бесконечности выводит это сообщение.
вот видите, сразу стало понятно что вы работаете с алгоритм "для одного файла" - итераций у вас нет - а отправляете ему несколько файлов.
тут вы методу, который разбивает строку по шаблону на элементы массива - даете массив. вы вообще контролируете что у вас в программе-то происходит? я вам сказал что вы используете одну итерацию давая ей множественный ввод. то есть надо просто понять какая разница между приемом одного файла и нескольких файлов, глядя на мой код, например. и внести нужную коррективу в свой код. ругань на эксплод имеет те же корни что и корни на стрлен и пых сообщает что не может обработать массив, так как ожидает строку. и корни эти упираются в то что вы не итерируете входящие несколько файлов а работаете как с одним.
получается надо вместо $_FILES['imgfile']['name'], использовать в цикле $_FILES['imgfile']['name'][$i]. т.е. Код (Text): //пролистываем весь массив изображений по одному $_FILES['imgfile']['name'] as $i => $name foreach ($_FILES['imgfile']['name'] as $i=>$name) { ... } ... Только выводит все равно ошибку - explode() expects parameter 2 to be string
отлично, итерацию имени делаем. а остальное-то? прекратите пальцем в небо тыкать. в моем примере нет foreach() потому как он будет итерировать только один массив из всех, переданных скрипту. чтоб вы сами не запутались - я привел вам пример цикла for() который будет контролировать индекс итерации а вы из всех массивов, полагающихся передаче файлов будете выдергивать соответствующие итерации данные. если вы хотите продолжить вашим путем - до foreach() объявляете переменную индекса итерации которую инкременируете в конце итерации. а ошибку он выводит потому что вы обращаетесь к массиву а должны - к строковому значению. изучите внимательно дебаг, который я ради вас сюда постил и надеюсь у вас больше не возникнет вопросов с процедурой загрузки нескольких файлов.
Вроде цикл есть, а сервер запрос обрабатывает долго - Maximum execution time of 30 seconds exceeded Код (Text): <?php // если нажата кнопка загрузки if(isset($_POST['createmark'])) { // директория для хранения загружаемых изображений $path = "uploads/"; //ставим цикл с условием, прибавляем на единицу $i for($i=1; !empty($_FILES['imgfile']['name']); $i++) { $valid_formats = array("jpg","bmp","jpeg"); // получаем имя загружаемого изображения $name = $_FILES['imgfile']['name'][$i]; // имя есть, то: if(strlen($name)) { // получаем тип загружаемого файла $ext = explode("/", $_FILES['imgfile']['type'][$i]); // если расширение принадлежит массиву разрешенных расширений и размер <= 2Мб, то загружаем изображение if(in_array($ext[1],$valid_formats)&& $_FILES['imgfile']['size'][$i] <= 15*1024*1024) { // загружаем изображение $upload_status = move_uploaded_file($_FILES['imgfile']['tmp_name'][$i], $path.$_FILES['imgfile']['name'][$i]); // при успешной загрузке if($upload_status) { // задаем директорию и имя для сохранения нового изображения $new_name = $path.time().".jpg"; // добавляем водяной знак: watermark_text() - для текста, watermark_image() - для изображения if(watermark_text($path.$_FILES['imgfile']['name'][$i], $new_name)) $demo_image = $new_name; if(!empty($demo_image)) echo '<br/><center><img style="max-width:700px;" src="'.$demo_image.'" border="1"/></center>'; else echo '<h3>Не получилось!</h3>'; } else echo "Загрузка не удалась!"; } else echo "Превышен размер разружаемого файла (Max 15Мб). Либо изображение имеет не верный формат"; } } } ?>
вы вообще понимаете чо пишите? вот тут вы ляпнули бесконечный цикл. слабо взять строку из моего скрипта? я когда писал, я старался написать рабочий скрипт, чтоб вы его сразу интегрировали. а вы уже два дня изображаете что-то с чем-то, обходя мой труд и пытаясь сделать как можно больше ошибок.
это "иногда" на вашей совести, догадываетесь?))) отлаживайте лучше, допиливайте код пока в нем не останется странных моментов
У меня вопрос, как очищать папку раз в сутки, функция очистки у меня есть, интересует условие if. //Оффтоп Понял, решил через планировщик задач Cron.