За последние 24 часа нас посетили 19488 программистов и 1964 робота. Сейчас ищут 1406 программистов ...

Вывод картинки из БД. Видимо, проблема с перекодировкой

Тема в разделе "Обработка изображений средствами PHP", создана пользователем ardalan, 8 фев 2007.

  1. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    Подскажите, плиз, если кто уже сталкивался, решение следующей проблемы.

    Храню картинку в базе, в поле типа LONGBLOB . Записываю как обычно, достаю как обычно.
    При записи - addslashes
    При чтении - stripslashes
    В общем, все как надо.

    У меня на локальном сервере все работает. На одном удаленном сервере - тоже работает. А на другом удаленном - не работает.

    Попробовал перенастроить хедеры так, чтобы картинка не показывалась, а предлагалась к сохранению (download). Сохраняю. Смотрю размер полученной картинки. Он в точности соответствует тому, который имеет исходная картинка (перед закачкой в базу).

    Но при попытке просмотреть эту полученную с сервера картинку какой-либо графической программой - получаю отказ, типа: "Просмотр недоступен".

    Подозреваю, что там что-то с перекодировкой не то происходит, при записи бинарной строчки в базу.

    Сравнивал полученный графич. файл с исходной картинкой (как тексты, при помощи Араксиса) - действительно есть различия в некоторых символах, несмотря на то, что, как уже писал, общий размер идентичен.

    Искал материалы на эту тему, пока что нашел вот этот:
    http://www.4webmaster.ru/articles/php/1.html

    >>>> начало цитаты >>>>>
    3. О глюках
    Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не запустяться, архивы не распакуются. Текстовые файлы (почти точно) не повредяться. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки.

    <Location />
    CharsetRecodeMultipartForms Off
    </Location>

    Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка.

    >>>>>> конец цитаты >>>>>>

    Но дело в том, что доступа к httpd.conf у меня, разумеется, нет. Обращаться к админу тоже не хочется, уверен, есть решение чисто программное. Ищу, но пока не нашел. Если кто знает - прошу подсказать.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    надо картинки хранить в файловой системе, а в базе только ее ID. тогда и проблем НЕ БУДЕТ и другие люди смогут потратить свое время на другие более интересные вопросы вопросы.
     
  3. eduha

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

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    При чтении stripslashes не надо. Вне зависимости от того, что там хранится - текст или двоичные данные.
     
  4. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    Знаю, но еще более НАДО выполнять пожелания клиентов...
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    если клиент захочет тебя трахнуть ты нагнешься?

    я - никогда. я лучше такого клиента сам трахну. прямо в его маленький дебильный мозг.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ardalan


    еще раз, сорри...

    с каких это пор клиент лучше разработчиков знает что и как делать?
    блин ... охренеть ...
     
  7. Anonymous

    Anonymous Guest

    Чепуха. Клиент должен знать свое место. Это, между прочим, подрывает мнение о вашем же проффесионализме у них же.
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    да, да.
    что бы клиент подумал, когда ты бы ему стал советовать как ему бизнес вести?

    прывильно - пинком под зад.

    сделай ему так же.
     
  9. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    на счет клиентов: давайте не будем тратить время. Ему были популярно обрисованы все минусы и плюсы хранения картинок в базе и в ФС. Он выбрал в базе.

    А сейчас речь не об этом, а об том, чтобы решить затык.

    >>>>>>
    При чтении stripslashes не надо. Вне зависимости от того, что там хранится - текст или двоичные данные.
    >>>>>>

    Вообще-то я, честно говоря, при записи не далал addslashes - и все работало (у меня). Сейчас перепробовал все сочетания этих add и strip - не помогает.

    Пока что нашел еще вот это:

    http://www.cprt.spb.ru/AAT/myjournal.ns ... enDocument

    >>>>>> начало цитаты

    Основная причина данной проблемы - Russian Apache.
    Именно он (т.е. web-server) перекодирует все что ни попадя. Соответственно, после такой перекодировки, в файлах оказываются замещенными (перекодированными) некоторые символы. Что избежать подобного есть несколько решений:

    1) В директории, где лежит скрипт для Upload'a делаем файл .htaccess в котором пишем:
    CharsetDisable On

    2) В файл httpd.conf дописать строки:
    <Location />
    CharsetRecodeMultipartForms Off
    </Location>

    >>>>> конец цитаты

    Попробовал
    CharsetDisable On

    не помогло. Хотя, может быть, у меня отключена отработка локальных .htaccess

    Продолжаю искать ...
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ardalan

    1. не надо было клиенту вообще говорить про хранение атинок, ибо не его это собачье дело.

    2. просто картинка грузится в файловую систему? и потом видна через броузер?
     
  11. Anonymous

    Anonymous Guest

    Хм, можно нескромный вопрос, хостер не петерхост случаем?
     
  12. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    >>>Хм, можно нескромный вопрос, хостер не петерхост случаем?

    нет, atlant.ru

    в общем, проблема, видимо, именно в перекодировке при аплоаде.
    Вопрос в том, как ее отключить программно ...
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ardalan

    все это ТЕБЕ должен сказать ХОСТЕР ибо онотчно знает что и как надо настроить, т.к. не ты один у него такой. может у него на сайте сть что-нить по этому поводу?

    в любом случае сначала наджо в саппорт обратиться.

    ---
    "Одним из основных направлений деятельности компании является предоставление услуг виртуального хостинга – размещение от самых простых до высокотехнологичных проектов интернет-проектов на нашем сервере. Вы всегда можете рассчитывать на квалифицированную помощь и консультации специалистов."
     
  14. Anonymous

    Anonymous Guest

    Есть вариант, кодировать base64() тогда будут не страшны перекодировки.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну ты посоветуй... посоветуй...
    =)

    картинка уже приходит битая, че ее кодировать-то?
     
  16. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    к сожалению, сапорт таков, что быстрее самому разобраться...

    ====
    кстати, по поводу:
    >>>>>>
    При чтении stripslashes не надо. Вне зависимости от того, что там хранится - текст или двоичные данные.
    >>>>>>

    НАДО. без этого даже на локальной машине не работает.
    а вот без addsleshes() при записи в базу - действительно можно обойтись. Проверено, работает.
     
  17. Anonymous

    Anonymous Guest

    а... ну да... это ж апач портит... стрипслешами сбили с толку....
     
  18. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    все, что надо это при записи сделать mysql_escape_sting() и все. а читать как обычно.

    а про битые картинки так это вот:

    http://www.yandex.ru/yandsearch?text=%F ... &stype=www

    там все расписано.
     
  19. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    >>>>
    все, что надо это при записи сделать mysql_escape_sting() и все. а читать как обычно.
    >>>>

    нет, в данном случае уже на момент применения mysql_escape_sting или прочих экранирующих функций строка уже покорЁжена апачем (на этапе заливки на сервер) ...
    поэтому игра со слешами уже ничем помочь не может
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это я понимаю. это я тебе на будужее когда решишь с битьем картинки как правилно данные записыыать без всяких там AddShashes() а именно mysql_escape-string()
     
  21. ardalan

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

    С нами с:
    8 фев 2007
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Питер
    да, там все те же директивы в .htaccess
    видимо, без этого не обойтись