За последние 24 часа нас посетили 33984 программиста и 1747 роботов. Сейчас ищут 1203 программиста ...

Изображение.Путь есть,а изображения нет...

Тема в разделе "MySQL", создана пользователем Panich, 15 дек 2012.

  1. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Подскажите ответ на такой вопрос:
    когда на денвере гонял сайт, то при загрузке изображения пользователем всё было замечательно, а когда на реальных хостинг выкинул, то путь к изображению прописывается в базе данных,а его самого в папке нет! Я так понял, что права доступа нужно выставить к этой папке?Если да, то как это сделать?

    Добавлено спустя 53 минуты 37 секунд:
    Изменил права доступа к папкам на 777,теперь при загрузке изображения выскакивает сообщение "Подключение к http://www.__________.ru прервано.".Вообщем страница не доступна...

    Добавлено спустя 17 минут:
    Вы извините,за бестолковые вопросы-на форуме в темах почитал и во всём разобрался,вот только не нашёл тему где раскрывается следующий вопрос:гружу изображения маленького размера-всё в норме,а большого-"Ошибка 101 (net::ERR_CONNECTION_RESET): Соединение сброшено.".Как бороться?
     
  2. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Сначала надо было узнать какую ошибку выдает и после этого бороться с этим. Попробуй поменять права на старые, а в адресной строке браузера напиши путь до картинки, посмотри, какую ошибку вызовет.
     
  3. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Хостер увеличил размер загружаемых файлов до 17мб и теперь по 100кб грузятся без проблем,но если 4Мб,то таже проблема. Выставил права как раньше 755-не грузятся изображения вообще как раньше.Если путь к файлу прописываю-пустота.В папке проверил-этих изображений просто нет,а путь в базе данных есть!
     
  4. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Надо узнать какую ошибку выдает, вполне возможно что дело с правами, а может и с путями, бывает так, что на локалке и на хостинге пути отличаются.
     
  5. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Хорошо!
    Если изображение в 100Кб грузит как необходимо,а в 4Мб не грузит-при чём тут пути или я не понимаю сути проблемы...!?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    1. права на запись в папки конечно нужны!
    2. на время расследования вывод предупреждений и ошибок включить!!!
    3. научись контролировать результат загрузки. не тыкайся как слепой котенок: http://www.php.ru/manual/features.file-upload.errors.html
    4. в результате ты можешь узнать. что срабатывает одно из ограничений по размеру: upload_max_filesize, post_max_size, memory_limit. обо всём этом в руководстве написано.

    любое из этих значений должно быть несколько больше, чем размер файла, т.к. есть накладные расходы.
     
  7. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Огромное спасибо-почитаю.А где именно в обработчике php нужно расположить "$_FILES['userfile']['error']."?

    Добавлено спустя 19 минут 47 секунд:
    Всё прочитал, добавил к конец php обработчика:exit($_FILES["pictures"]["error"]);, но ничего не происходит!Или я что не так делаю?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    а что должно происходить?
    тогда уж exit(var_export($_FILES, TRUE))
    на хостинге чему равны upload_max_filesize, post_max_size, memory_limit ?
     
  9. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Выложи код загрузки файла, легче будет тебе помочь
     
  10. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    При чём здесь код я, конечно, не знаю,но вот он:
    Код (Text):
    1. if (!empty($_FILES['imgUser']['tmp_name']))
    2. {
    3.     if ($_FILES['imgUser']['name'] == '')
    4.     {
    5.     unset($_FILES['imgUser']['name']);
    6.     }
    7.     else
    8.     {
    9.         $foto_size = $_FILES['imgUser']['size'];
    10.         if ($foto_size > 5*4000*4000)
    11.         {
    12.         exit ("<p>Размер изображения превысил лимит в 5 Мб.</p>");
    13.         }
    14.         else
    15.         {
    16.             $imageinfo = getimagesize($_FILES['imgUser']['tmp_name']);
    17.             if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg' && $imageinfo['mime'] != 'image/png')
    18.             {
    19.             echo "Фотография должена быть в формате <strong>JPG,GIF или PNG</strong>!";    
    20.             exit();
    21.             }
    22.             else
    23.             {
    24.                 $sql8 = "SELECT `imgSmall`, `imgBig` FROM `user` WHERE `id` = '$trueUser' LIMIT 1";
    25.                 $result8 = mysql_query($sql8, $db)or die("Ошибка в запросе: " . mysql_error());
    26.                 if (!$result8)
    27.                 {
    28.                 echo "ошибка - ".mysql_error()."<br>";
    29.                 echo $sql8;
    30.                 exit();
    31.                 }
    32.                 else
    33.                 {
    34.                     $myrow8 = mysql_fetch_assoc($result8);
    35.                     if(!empty($myrow8['imgSmall']) && !empty($myrow8['imgBig']))
    36.                     {
    37.                     unlink($myrow8['imgSmall']);
    38.                     unlink($myrow8['imgBig']);
    39.                     }
    40.                     $filename = $_FILES['imgUser']['name'];
    41.                     $source = $_FILES['imgUser']['tmp_name'];
    42.                     $path_to_directorySmol = "images/userSmall/";
    43.                     $path_to_directoryBig = "images/userBig/";
    44.                     $hours = date("H");
    45.                     $minuts = substr(date("H"), 0 , 1);
    46.                     $seconds = time("f");
    47.                     $date = $hours . $minuts . $seconds;
    48.                     $target = $path_to_directoryBig."big_".$date.".jpeg";
    49.                     move_uploaded_file($source, $target);
    50.                     if(preg_match('/[.](GIF)|(gif)$/', $filename))
    51.                     {                            
    52.                     $im = imagecreatefromgif($target);
    53.                     }                                
    54.                     if(preg_match('/[.](PNG)|(png)$/', $filename))
    55.                     {
    56.                     $im = imagecreatefrompng($target);
    57.                     }                
    58.                     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename))
    59.                     {        
    60.                     $im = imagecreatefromjpeg($target);        
    61.                     }
    62.                     //уменьшенную копию орегинала
    63.                     $wB = 800;
    64.                     $w = 140;
    65.                     $w_src = imagesx($im);
    66.                     $h_src = imagesy($im);
    67.                     $dest = imagecreatetruecolor ($w,$w);
    68.                     if ($w_src > $h_src)
    69.                     {
    70.                     $q=$w_src/$h_src;
    71.                     $qwe=$wB/$q;
    72.                     $destB = imagecreatetruecolor ($wB, $qwe);
    73.                     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);          
    74.                     }
    75.                     else
    76.                     {
    77.                         if ($w_src < $h_src)
    78.                         {
    79.                         $q=$h_src/$w_src;
    80.                         $qwe=$wB/$q;
    81.                         $destB = imagecreatetruecolor ($qwe, $wB);
    82.                         imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));  
    83.                         imagecopyresampled ($destB, $im, 0, 0, 0, 0, $qwe, $wB, $w_src, $h_src);  
    84.                         }
    85.                         else
    86.                         {
    87.                             if ($w_src == $h_src)
    88.                             {
    89.                             $destB = imagecreatetruecolor ($wB,$wB);
    90.                             imagecopyresampled ($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    91.                             imagecopyresampled ($destB, $im, 0, 0, 0, 0, $wB, $wB, $w_src, $h_src);
    92.                             }
    93.                         }
    94.                     }
    95.                     //удалить орегинал
    96.                     $target1 = imagejpeg($destB, $path_to_directoryBig."big_".$date.".jpeg");
    97.                     move_uploaded_file($source, $target1);
    98.                     $imgBigUser = $path_to_directoryBig."big_".$date.".jpeg";
    99.                     $target2 = imagejpeg($dest, $path_to_directorySmol."small_".$date.".jpeg");
    100.                     move_uploaded_file($source, $target2);
    101.                     $imgSmallUser = $path_to_directorySmol."small_".$date.".jpeg";
    102.                     $sql9 = "UPDATE `user` SET `imgSmall` = '$imgSmallUser', `imgBig` = '$imgBigUser' WHERE `id` = '$trueUser' LIMIT 1";
    103.                     $result9 = mysql_query($sql9, $db)or die("Ошибка в запросе: " . mysql_error());
    104.                     if (!$result9)
    105.                     {
    106.                     echo "ошибка - ".mysql_error()."<br>";
    107.                     echo $sql9;
    108.                     exit();
    109.                     }
    110.                 }      
    111.             }
    112.         }
    113.     }
    114. }
     
  11. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    1) поставь в самом начале отображение всех ошибок. error_reporting(E_ALL);
    2) Первый move_uploaded_file($source, $target); переделай так if(!move_uploaded_file($source, $target)) return false;
    Посмотри, он у тебя оригинал вообще грузит или нет.
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Значит ты не пытаешся проверить код ошибки в FILES? Ждешь чтобы за тебя всё сделали.
    Жаль потраченного времени.
     
  13. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Сутки читал про возможные варианты ошибок в этой области, что бы никому не пришлось жалеть о потраченном времени, перепроверял код, но так и не нашёл в чём причина ошибки.
    И так:
    artoodetoo, попробовал вывести ошибки как Вы говорили и вот что получилось: array ( 'imgUser' => array ( 'name' => 'DSC_1271.JPG', 'type' => '', 'tmp_name' => '', 'error' => 1, 'size' => 0, ), )

    jenya777777,всё сделал как Вы сказали, но ничего не получилось.Единственно, если пытаюсь вывести $_FILES['imgUser']['tmp_name'], то пустота на экране,а если $_FILES['imgUser']['name'], то имя появляется на экране-как так может быть?
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    В поле name есть название - поскольку там хранится исходное название, которое было до загрузки. В поле tmp_name - названия нету, поскольку туда записывается название файла на сервере, т.е. новое название, которое PHP присвоил ему после загрузки. У тебя загрузка не удалась, во время загрузки произошла ошибка, по этому старое название файла - есть (его браузер передаёт вместе с файлом), а нового названия на сервере - нет (файла-то нет, он не загрузился).
    В поле error у тебя указано значение 1, этот код соответствует ошибке, что загружаемый файл был больше максимально допустимого. Другие коды ошибок загрузки можно посмотреть тут:
    php.net/manual/en/features.file-upload.errors.php
     
  15. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Спасибо!Допустимого кем?Как увеличить значение?И гружу я 3,5 Мб...
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Допустимого PHP.
    Изменяется одним из способов:
    1. В файле php.ini директива upload_max_filesize
    2. В файле .htaccess можно добавить строку
    Код (Text):
    1. php_value upload_max_filesize ?M
    Вместо вопроса написать число - сколько мегабайт разрешены файлы.
    3. Можно попробовать в тексте скрипта добавить строку
    Код (PHP):
    1. ini_set('upload_max_filesize', '?M'); 
    Аналогично заменить ? на число.
     
  17. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Все перечисленные способы, кроме 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Мб файл...

    В интернете очень мало сказано про эту проблему и предложенные ими способы то же не помогли...Что делать то?
     
  18. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    В Интернете море информации про эту проблему, в твоем случае, ограничение сделал хостинг, так что его не изменишь. Сделай проверку на размер загружаемого файла и если будет больше необходимого выдавай ошибку
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А это уже ограничение на количество выделяемой оперативной памяти. Узнать, какие ограничения на сервере можно таким скриптом:
    Код (PHP):
    1. <?php
    2. echo('Разрешённый размер файлов для загрузки: ' . ini_get('upload_max_filesize'));
    3. echo('Объём доступной оперативной памяти: ' . ini_get('memory_limit'));
    4. ?>
    Скрипт обламывается из-за памяти на строке
    Код (PHP):
    1. $im = imagecreatefromjpeg($target); 
    из-за того, что при открытии изображения - оно "распаковывается", скажем так. JPEG - это сжатый формат, и при открытии такие картинки сперва распаковываются. При этом в распакованном виде картинки весят гораздо больше (во много раз!), чем изначальные jpeg-файлы. Причём размер файла в распакованном виде (сколько оперативки он съест) зависит от размеров картинки (количество пикселей по высоте и ширине), а не объёма файла (мегабайты). Например, можно создать пустое изображение, на котором будет только один белый фон и больше вообще ничего, размером 4000*3000 пикселей и сохранить его в формате jpeg. При этом jpeg-файл будет весить примерно под сотню килобайт, а может и меньше. Но в распакованном виде он потребует около 60 Мегабайт памяти!
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    [​IMG]
    Интернеты в ахуе от твоей наивности )))

    Чтобы картинки большой размерности обрабатывались надо памяти процессу PHP дать побольше. Это настройка memory_limit
    Panich, если бы ты не проигнорировал это сообщение, то уже давно был умнее ))) Если что-то непонятно в сообщениии — переспроси, не тупи молча.
    Чтобы смотреть текущие настройки, создай файл phpinfo.php
    Код (PHP):
    1. <?php
    2.  
    и вызывай его в браузере всякий раз, когда надо уточнить что-то про настройки. phpinfo покажет тебе действующие в настоящий момент настройки. То есть если ты опечатался или забыл перегрузить apache или настройки в другом месте перекрывают твои изменения, то здесь это будет видно.

    Вот чего НЕ будет видно, так это настроек через вызов ini_set() в самом скрипте. Т.к. это локальные для скрипты настройки, они дейтсвуют разово и только в данном скрипте. Не все параметры реально изменить через ini_set(), например размер выделяемой памяти нельзя изменить в самом скрипте!

    После любого изменения глобальных настроек в php.ini или httpd.conf необходимо перегрузить Apache (денвер) чтобы изменения вступили в силу. Помни об этом чтобы не писать "перепробовал всё, не помогает". Нихрена ты еще не пробовал.
     
  21. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    sobachnik, большое спасибо за очередной развёрнутый ответ!Но, после долгой переписки с админами хостинга, изображения начали грузиться. Увеличил размер до 10 Мб и они стали загружаться...потом снова уменьшил до 5Мб-хватит пользователям и этого!

    artoodetoo,если честно, то сразу заметно, что знаний у Вас в области вэб-программирования предостаточно, но каждый Ваш ответ - словно попытка кичиться ими!
    Зачем?Что бы услышать в ответ:
    Я конечно не девочка-первоклашка, которая каждый раз, когда её дёргают за косички, бежит к маме жаловаться со слезами на глазах, но и подобные, довольна грубые высказывания, в свою сторону читать не желаю! Форум создан для общения и взаимопомощи, а после Ваших сообщений больше хочется уйти с форума, выяснить всё самому и больше не возвращаться. Конечно, можете сказать,что это и есть Ваша цель-что бы начинающие программисты сами доходили до ответа-будет больше пользы и т.д., но вот только лично я, даже когда сам буду приближаться к единственному верному ответу и наткнусь на очередной вэб-гранит, уже попытаюсь сначала спросить про эту проблему на другом форуме...ну, так себе дешевле!
    П.С. В конце 2011 года уже состоялся подобный разговор у нас с Вами, тогда на аватаре Вы были с каким-то хвостиком на голове. Время идёт и ничего не меняется. Я из Ваших сообщений делаю выводы и становлюсь умнее, а Вы из моих?
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Panich, я бываю не в настроении и совсем не горжусь этим ((( Пойми и ты: ничто так не раздражает, как напрасно потраченное время.
    Удачи!

    Добавлено спустя 2 минуты 5 секунд:
    P.S. с "хвостиком" наверное был не я, но догадываюсь кто.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ладно вам чуваки, мы все тут как семья.
     
  24. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    artoodetoo, абсолютно согласен с этим, но если бы мы могли не тратить время в пустую, то не было бы бабушек с семечками во дворе, студентов, получающих по три высших образования, пива по пятницам и т.д., а какая может быть жизнь без этих и многих других моментов. Иногда тратить время в пустую даже приятно...Вам тоже удачи!!!