Подскажите, плиз, если кто уже сталкивался, решение следующей проблемы. Храню картинку в базе, в поле типа 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 у меня, разумеется, нет. Обращаться к админу тоже не хочется, уверен, есть решение чисто программное. Ищу, но пока не нашел. Если кто знает - прошу подсказать.
надо картинки хранить в файловой системе, а в базе только ее ID. тогда и проблем НЕ БУДЕТ и другие люди смогут потратить свое время на другие более интересные вопросы вопросы.
При чтении stripslashes не надо. Вне зависимости от того, что там хранится - текст или двоичные данные.
если клиент захочет тебя трахнуть ты нагнешься? я - никогда. я лучше такого клиента сам трахну. прямо в его маленький дебильный мозг.
ardalan еще раз, сорри... с каких это пор клиент лучше разработчиков знает что и как делать? блин ... охренеть ...
Чепуха. Клиент должен знать свое место. Это, между прочим, подрывает мнение о вашем же проффесионализме у них же.
да, да. что бы клиент подумал, когда ты бы ему стал советовать как ему бизнес вести? прывильно - пинком под зад. сделай ему так же.
на счет клиентов: давайте не будем тратить время. Ему были популярно обрисованы все минусы и плюсы хранения картинок в базе и в ФС. Он выбрал в базе. А сейчас речь не об этом, а об том, чтобы решить затык. >>>>>> При чтении 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 Продолжаю искать ...
ardalan 1. не надо было клиенту вообще говорить про хранение атинок, ибо не его это собачье дело. 2. просто картинка грузится в файловую систему? и потом видна через броузер?
>>>Хм, можно нескромный вопрос, хостер не петерхост случаем? нет, atlant.ru в общем, проблема, видимо, именно в перекодировке при аплоаде. Вопрос в том, как ее отключить программно ...
ardalan все это ТЕБЕ должен сказать ХОСТЕР ибо онотчно знает что и как надо настроить, т.к. не ты один у него такой. может у него на сайте сть что-нить по этому поводу? в любом случае сначала наджо в саппорт обратиться. --- "Одним из основных направлений деятельности компании является предоставление услуг виртуального хостинга – размещение от самых простых до высокотехнологичных проектов интернет-проектов на нашем сервере. Вы всегда можете рассчитывать на квалифицированную помощь и консультации специалистов."
к сожалению, сапорт таков, что быстрее самому разобраться... ==== кстати, по поводу: >>>>>> При чтении stripslashes не надо. Вне зависимости от того, что там хранится - текст или двоичные данные. >>>>>> НАДО. без этого даже на локальной машине не работает. а вот без addsleshes() при записи в базу - действительно можно обойтись. Проверено, работает.
все, что надо это при записи сделать mysql_escape_sting() и все. а читать как обычно. а про битые картинки так это вот: http://www.yandex.ru/yandsearch?text=%F ... &stype=www там все расписано.
>>>> все, что надо это при записи сделать mysql_escape_sting() и все. а читать как обычно. >>>> нет, в данном случае уже на момент применения mysql_escape_sting или прочих экранирующих функций строка уже покорЁжена апачем (на этапе заливки на сервер) ... поэтому игра со слешами уже ничем помочь не может
это я понимаю. это я тебе на будужее когда решишь с битьем картинки как правилно данные записыыать без всяких там AddShashes() а именно mysql_escape-string()