Подскажите ответ на такой вопрос: когда на денвере гонял сайт, то при загрузке изображения пользователем всё было замечательно, а когда на реальных хостинг выкинул, то путь к изображению прописывается в базе данных,а его самого в папке нет! Я так понял, что права доступа нужно выставить к этой папке?Если да, то как это сделать? Добавлено спустя 53 минуты 37 секунд: Изменил права доступа к папкам на 777,теперь при загрузке изображения выскакивает сообщение "Подключение к http://www.__________.ru прервано.".Вообщем страница не доступна... Добавлено спустя 17 минут: Вы извините,за бестолковые вопросы-на форуме в темах почитал и во всём разобрался,вот только не нашёл тему где раскрывается следующий вопрос:гружу изображения маленького размера-всё в норме,а большого-"Ошибка 101 (net::ERR_CONNECTION_RESET): Соединение сброшено.".Как бороться?
Сначала надо было узнать какую ошибку выдает и после этого бороться с этим. Попробуй поменять права на старые, а в адресной строке браузера напиши путь до картинки, посмотри, какую ошибку вызовет.
Хостер увеличил размер загружаемых файлов до 17мб и теперь по 100кб грузятся без проблем,но если 4Мб,то таже проблема. Выставил права как раньше 755-не грузятся изображения вообще как раньше.Если путь к файлу прописываю-пустота.В папке проверил-этих изображений просто нет,а путь в базе данных есть!
Надо узнать какую ошибку выдает, вполне возможно что дело с правами, а может и с путями, бывает так, что на локалке и на хостинге пути отличаются.
Хорошо! Если изображение в 100Кб грузит как необходимо,а в 4Мб не грузит-при чём тут пути или я не понимаю сути проблемы...!?
1. права на запись в папки конечно нужны! 2. на время расследования вывод предупреждений и ошибок включить!!! 3. научись контролировать результат загрузки. не тыкайся как слепой котенок: http://www.php.ru/manual/features.file-upload.errors.html 4. в результате ты можешь узнать. что срабатывает одно из ограничений по размеру: upload_max_filesize, post_max_size, memory_limit. обо всём этом в руководстве написано. любое из этих значений должно быть несколько больше, чем размер файла, т.к. есть накладные расходы.
Огромное спасибо-почитаю.А где именно в обработчике php нужно расположить "$_FILES['userfile']['error']."? Добавлено спустя 19 минут 47 секунд: Всё прочитал, добавил к конец php обработчика:exit($_FILES["pictures"]["error"]);, но ничего не происходит!Или я что не так делаю?
а что должно происходить? тогда уж exit(var_export($_FILES, TRUE)) на хостинге чему равны upload_max_filesize, post_max_size, memory_limit ?
При чём здесь код я, конечно, не знаю,но вот он: Код (Text): if (!empty($_FILES['imgUser']['tmp_name'])) { if ($_FILES['imgUser']['name'] == '') { unset($_FILES['imgUser']['name']); } else { $foto_size = $_FILES['imgUser']['size']; if ($foto_size > 5*4000*4000) { exit ("<p>Размер изображения превысил лимит в 5 Мб.</p>"); } else { $imageinfo = getimagesize($_FILES['imgUser']['tmp_name']); if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg' && $imageinfo['mime'] != 'image/png') { echo "Фотография должена быть в формате <strong>JPG,GIF или PNG</strong>!"; exit(); } else { $sql8 = "SELECT `imgSmall`, `imgBig` FROM `user` WHERE `id` = '$trueUser' LIMIT 1"; $result8 = mysql_query($sql8, $db)or die("Ошибка в запросе: " . mysql_error()); if (!$result8) { echo "ошибка - ".mysql_error()."<br>"; echo $sql8; exit(); } else { $myrow8 = mysql_fetch_assoc($result8); if(!empty($myrow8['imgSmall']) && !empty($myrow8['imgBig'])) { unlink($myrow8['imgSmall']); unlink($myrow8['imgBig']); } $filename = $_FILES['imgUser']['name']; $source = $_FILES['imgUser']['tmp_name']; $path_to_directorySmol = "images/userSmall/"; $path_to_directoryBig = "images/userBig/"; $hours = date("H"); $minuts = substr(date("H"), 0 , 1); $seconds = time("f"); $date = $hours . $minuts . $seconds; $target = $path_to_directoryBig."big_".$date.".jpeg"; move_uploaded_file($source, $target); if(preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($target); } if(preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($target); } if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($target); } //уменьшенную копию орегинала $wB = 800; $w = 140; $w_src = imagesx($im); $h_src = imagesy($im); $dest = imagecreatetruecolor ($w,$w); if ($w_src > $h_src) { $q=$w_src/$h_src; $qwe=$wB/$q; $destB = imagecreatetruecolor ($wB, $qwe); imagecopyresampled ($dest, $im, 0, 0, round ((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); imagecopyresampled ($destB, $im, 0, 0, 0, 0, $wB, $qwe, $w_src, $h_src); } else { if ($w_src < $h_src) { $q=$h_src/$w_src; $qwe=$wB/$q; $destB = imagecreatetruecolor ($qwe, $wB); imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); imagecopyresampled ($destB, $im, 0, 0, 0, 0, $qwe, $wB, $w_src, $h_src); } else { if ($w_src == $h_src) { $destB = imagecreatetruecolor ($wB,$wB); imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); imagecopyresampled ($destB, $im, 0, 0, 0, 0, $wB, $wB, $w_src, $h_src); } } } //удалить орегинал $target1 = imagejpeg($destB, $path_to_directoryBig."big_".$date.".jpeg"); move_uploaded_file($source, $target1); $imgBigUser = $path_to_directoryBig."big_".$date.".jpeg"; $target2 = imagejpeg($dest, $path_to_directorySmol."small_".$date.".jpeg"); move_uploaded_file($source, $target2); $imgSmallUser = $path_to_directorySmol."small_".$date.".jpeg"; $sql9 = "UPDATE `user` SET `imgSmall` = '$imgSmallUser', `imgBig` = '$imgBigUser' WHERE `id` = '$trueUser' LIMIT 1"; $result9 = mysql_query($sql9, $db)or die("Ошибка в запросе: " . mysql_error()); if (!$result9) { echo "ошибка - ".mysql_error()."<br>"; echo $sql9; exit(); } } } } } }
1) поставь в самом начале отображение всех ошибок. error_reporting(E_ALL); 2) Первый move_uploaded_file($source, $target); переделай так if(!move_uploaded_file($source, $target)) return false; Посмотри, он у тебя оригинал вообще грузит или нет.
Значит ты не пытаешся проверить код ошибки в FILES? Ждешь чтобы за тебя всё сделали. Жаль потраченного времени.
Сутки читал про возможные варианты ошибок в этой области, что бы никому не пришлось жалеть о потраченном времени, перепроверял код, но так и не нашёл в чём причина ошибки. И так: artoodetoo, попробовал вывести ошибки как Вы говорили и вот что получилось: array ( 'imgUser' => array ( 'name' => 'DSC_1271.JPG', 'type' => '', 'tmp_name' => '', 'error' => 1, 'size' => 0, ), ) jenya777777,всё сделал как Вы сказали, но ничего не получилось.Единственно, если пытаюсь вывести $_FILES['imgUser']['tmp_name'], то пустота на экране,а если $_FILES['imgUser']['name'], то имя появляется на экране-как так может быть?
В поле name есть название - поскольку там хранится исходное название, которое было до загрузки. В поле tmp_name - названия нету, поскольку туда записывается название файла на сервере, т.е. новое название, которое PHP присвоил ему после загрузки. У тебя загрузка не удалась, во время загрузки произошла ошибка, по этому старое название файла - есть (его браузер передаёт вместе с файлом), а нового названия на сервере - нет (файла-то нет, он не загрузился). В поле error у тебя указано значение 1, этот код соответствует ошибке, что загружаемый файл был больше максимально допустимого. Другие коды ошибок загрузки можно посмотреть тут: php.net/manual/en/features.file-upload.errors.php
Допустимого PHP. Изменяется одним из способов: 1. В файле php.ini директива upload_max_filesize 2. В файле .htaccess можно добавить строку Код (Text): php_value upload_max_filesize ?M Вместо вопроса написать число - сколько мегабайт разрешены файлы. 3. Можно попробовать в тексте скрипта добавить строку Код (PHP): ini_set('upload_max_filesize', '?M'); Аналогично заменить ? на число.
Все перечисленные способы, кроме 3, я уже перепробовал...Значит Вы хотите сказать,что загружать изображение в 3,5Мб не позволяет php? Ковырял,ковырял и вышел на ошибку: "Allowed memory size of 50331648 bytes exhausted (tried to allocate 17152 bytes) in Z:\home\localhost\www\classicorange\test_updateUser.php on line 349". В строке 349 вот эта строчка: $im = imagecreatefromjpeg($target); Максимально смог загрузить 2,94Мб файл... В интернете очень мало сказано про эту проблему и предложенные ими способы то же не помогли...Что делать то?
В Интернете море информации про эту проблему, в твоем случае, ограничение сделал хостинг, так что его не изменишь. Сделай проверку на размер загружаемого файла и если будет больше необходимого выдавай ошибку
А это уже ограничение на количество выделяемой оперативной памяти. Узнать, какие ограничения на сервере можно таким скриптом: Код (PHP): <?php echo('Разрешённый размер файлов для загрузки: ' . ini_get('upload_max_filesize')); echo('Объём доступной оперативной памяти: ' . ini_get('memory_limit')); ?> Скрипт обламывается из-за памяти на строке Код (PHP): $im = imagecreatefromjpeg($target); из-за того, что при открытии изображения - оно "распаковывается", скажем так. JPEG - это сжатый формат, и при открытии такие картинки сперва распаковываются. При этом в распакованном виде картинки весят гораздо больше (во много раз!), чем изначальные jpeg-файлы. Причём размер файла в распакованном виде (сколько оперативки он съест) зависит от размеров картинки (количество пикселей по высоте и ширине), а не объёма файла (мегабайты). Например, можно создать пустое изображение, на котором будет только один белый фон и больше вообще ничего, размером 4000*3000 пикселей и сохранить его в формате jpeg. При этом jpeg-файл будет весить примерно под сотню килобайт, а может и меньше. Но в распакованном виде он потребует около 60 Мегабайт памяти!
Интернеты в ахуе от твоей наивности ))) Чтобы картинки большой размерности обрабатывались надо памяти процессу PHP дать побольше. Это настройка memory_limit Panich, если бы ты не проигнорировал это сообщение, то уже давно был умнее ))) Если что-то непонятно в сообщениии — переспроси, не тупи молча. Чтобы смотреть текущие настройки, создай файл phpinfo.php Код (PHP): <?php phpinfo(); и вызывай его в браузере всякий раз, когда надо уточнить что-то про настройки. phpinfo покажет тебе действующие в настоящий момент настройки. То есть если ты опечатался или забыл перегрузить apache или настройки в другом месте перекрывают твои изменения, то здесь это будет видно. Вот чего НЕ будет видно, так это настроек через вызов ini_set() в самом скрипте. Т.к. это локальные для скрипты настройки, они дейтсвуют разово и только в данном скрипте. Не все параметры реально изменить через ini_set(), например размер выделяемой памяти нельзя изменить в самом скрипте! После любого изменения глобальных настроек в php.ini или httpd.conf необходимо перегрузить Apache (денвер) чтобы изменения вступили в силу. Помни об этом чтобы не писать "перепробовал всё, не помогает". Нихрена ты еще не пробовал.
sobachnik, большое спасибо за очередной развёрнутый ответ!Но, после долгой переписки с админами хостинга, изображения начали грузиться. Увеличил размер до 10 Мб и они стали загружаться...потом снова уменьшил до 5Мб-хватит пользователям и этого! artoodetoo,если честно, то сразу заметно, что знаний у Вас в области вэб-программирования предостаточно, но каждый Ваш ответ - словно попытка кичиться ими! Зачем?Что бы услышать в ответ: Я конечно не девочка-первоклашка, которая каждый раз, когда её дёргают за косички, бежит к маме жаловаться со слезами на глазах, но и подобные, довольна грубые высказывания, в свою сторону читать не желаю! Форум создан для общения и взаимопомощи, а после Ваших сообщений больше хочется уйти с форума, выяснить всё самому и больше не возвращаться. Конечно, можете сказать,что это и есть Ваша цель-что бы начинающие программисты сами доходили до ответа-будет больше пользы и т.д., но вот только лично я, даже когда сам буду приближаться к единственному верному ответу и наткнусь на очередной вэб-гранит, уже попытаюсь сначала спросить про эту проблему на другом форуме...ну, так себе дешевле! П.С. В конце 2011 года уже состоялся подобный разговор у нас с Вами, тогда на аватаре Вы были с каким-то хвостиком на голове. Время идёт и ничего не меняется. Я из Ваших сообщений делаю выводы и становлюсь умнее, а Вы из моих?
Panich, я бываю не в настроении и совсем не горжусь этим ((( Пойми и ты: ничто так не раздражает, как напрасно потраченное время. Удачи! Добавлено спустя 2 минуты 5 секунд: P.S. с "хвостиком" наверное был не я, но догадываюсь кто.
artoodetoo, абсолютно согласен с этим, но если бы мы могли не тратить время в пустую, то не было бы бабушек с семечками во дворе, студентов, получающих по три высших образования, пива по пятницам и т.д., а какая может быть жизнь без этих и многих других моментов. Иногда тратить время в пустую даже приятно...Вам тоже удачи!!!