Вопросики в MySQL

в Mysql вопросы  вместо текста? Знакомо?

Иногда при работе с MySql вместо ожидаемого текста, мы получаем в ответ что-то вроде “??? ?? ?????? ???…” Интуитивно можно предположить, что весь ВОПРОС (;) в кодировке MySQL. Что с этим делать, как бороться?

Для начала проверить, как хранятся данные в базе - зайти, к примеру, phpmyadmin-ом. Иногда из-за несоблюдения кодировки при импорте вопросики уже лежат в базе. В этом случае либо импортировать (если есть откуда) заново, либо… с нуля. :( При импорте следует указать кодировку, соответствующую файлу импорта. Естественно, если данные хранятся в базе вопросами - ничего другого мы и не получим.

Если же в базе данные хранятся “как надо”, а проблема появляется при выводе, обычно помогает незамысловатый запрос “Set names cp1251″ - сразу после подключения к базе. (вместо cp1251, следует указать нужную кодировку - с учетом русского языка - возможно UTF8)

У меня после такой операции вместо знаков вопроса  отобразился “нормальный” текст.

Опубликовано Июнь 20, 2008 | автор: levik  |  Без комментариев »

Javascript - загрузка скрытых картинок - preload images

Загрузка изображений при помощи javascript - часто используется для смены картинок, чтобы после загрузки основной части страницы не “расстраивать” пользователя временнОй задержкой, требующейся для загрузки картинки.
<script type="text/javascript" language="javascript">
//загрузка изображений (preload images)
var pictures = new Array('pic1.jpg','pic2.jpg','pic3.jpg');
for (i=1;i<pictures.length; i++) {
t = new Image();
t.src = pictures[i];
}
</script>

Опубликовано Июнь 13, 2008 | автор: levik  |  Без комментариев »

HTTP-заголовки ответа сервера

Кратенькая шпаргалка по наиболее распространенным HTTP-заголовкам ответа сервера:

3xx: Redirection (Перенаправление)

HTTP-301 Moved Permanently (Перемещено окончательно)
Сообщает браузеру-(Http-клиенту), что запрошенный документ окончательно перенесен и теперь располагается по новому URI, указанному в заголовке Location

HTTP/1.1 301 Moved Permanently
Location: http://www.site.ru/main_page.html

301 редирект в htaccess:
Redirect 301 / http://www.301-redirect.ed/new-page.htm
Redirect 301 /old-page.htm http://www.301-redirect.ed/new-page.htm
или
RedirectPermanent / http://www.301-redirect.ed/

301 редирект с использованием RewriteRule
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite\.com
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=permanent,L]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]

301 редирект на php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.ru/newdir/newpage.htm");

302 Found (Найдено)
Документ временно доступен по другому URI указанному в заголовке Location. Такое перенаправление используется в PHP по умолчанию (при указании “Header(’Location:URI’);” без дополнительных параметров)

HTTP/1.1 302 Found
Location: http://www.site.ru/temporary_page.html

4xx: Client Error (Ошибка клиента)

400 Bad Request (Плохой запрос)
Синтаксическая ошибка в запросе
401 Unauthorized (Не авторизован)
Для доступа к URI требуется авторизация (заголовок “WWW-Authenticate”)
403 Forbidden (Запрещено)
Ограничения на сервере. Было бы неплохо сообщить, с чем связано.
404 Not Found (Не найдено)
По запрошенному адресу никто не проживает…
410 Gone (Удалён)
Адресат убыл в неизвестном направлении. Используется вместо 404, если документ раньше был.

5xx: Server Error (Ошибка сервера)

Ошибки 500+ возникают из-за неправильных настроек/операций на сервере.
500 Internal Server Error (Внутренняя ошибка сервера)
“Неопознанная” внутренняя ошибка. Если Вы как разработчик увидели 500 ошибку - проверьте .htaccess, разрешения на изменение конфигурационных переменных (время выполнения скрипта и т.д.)

501 Not Implemented (Не реализовано)
Моя твоя не понимает.

502 Bad Gateway (Плохой шлюз)
Ответ выдается, когда сервер выполняет функцию промежуточного звена..

504 Gateway Timeout (Шлюз не отвечает)
Промежуточный сервер не дождался ответа от следующего звена.

Ссылки: Все коды состояния на википедии и Протокол управления кофеваркой

UPD Справедливости ради, следует заметить, что существует кофеварка IMPRESSA F90 с кривым “официальным” подключением к интернет от фирмы Jura ( на сайте производителя - http://www.jura.ru/Service107_65.aspx)

upd2 сервис просмотра http заголовков (подмена UserAgent) http://www.bertal.ru/
http://www.be1.ru/stat/?url=http%3A%2F%2Fwww.searchengines.ru%2F

Опубликовано Июнь 5, 2008 | автор: levik  |  Без комментариев »

делаем backup на площадке Мастерхост (.masterhost)

Услуга резервного копирования, предоставляемая хостингом .masterhost (да и вообще любым более-менее приличным хостингом) - штука хорошая. Но иногда, перед внесением изменений (особенно глобальных) неплохо бы забэкапиться самому. Да и вообще, периодически сохранять собственную резервную копию (backup) сайта полезно - бывает всякое.

Как вариант, можно “быстренько” скачать сайт по FTP.. Однако, для многих сайтов такой процесс может затянуться.

Как сделать резервную копию сайта?

Во многих распространенных панелях управления (DirectAdmin, cpanel, ISPManager и другие) имеется стандартная функция backup ( “Backup Manager”, “Создание резервных копий” или “Управление резервными копиями” - название может отличаться.. подробнее смотрите в документации или на сайте хостинга). При запуске процедуры создания резервной копии создается архив, в который помещается… А вот что помщается в backup-файл, Вы выбираете перед запуском. Это могут быть только файлы, или же файлы вместе с базами данных. Можно “забэкапить” только почту. Но и этот функционал зависит от панели управления.

Резервное копирование сайта на Masterhost

подробнее о резервном копировании на хостинге Мастерхост

Опубликовано Май 28, 2008 | автор: levik  |  Комментарии (3) »

Шпаргалка *nix BSD

Как прописать прокси (proxy) на freebsd?

csh:
setenv http_proxy=http://proxy_adress:port
setenv ftp_proxy=http://proxy_adress:port

bash:
export ftp_proxy=http://proxy_adress:port
export http_proxy=http://proxy_adress:port

Ресурсов много:
http://wiki.bsdportal.ru/doc:doc

Опубликовано Май 22, 2008 | автор: levik  |  Без комментариев »

checkdisk - Inserting an index entry into index $0 of file

Inserting an index entry into index $0 of file 33639 - именно таким сообщением продолжал радовать меня монитор - на весь экран, подмигивая мне нижней строчкой… Уже третий раз за месяц на нескольких компьютерах проявила себя ошибка, как мне показалось, связанная с жестким диском.

Иногда сопровождается периодически возникающими предупреждениями Windows “Файл или каталог C:\$Extend\$Objid поврежден и не может быть прочитан” , с которыми абсолютно невозможно нормально работать. Сообщение требует запустить chkdsk. В режиме чтения получаем сообщение

Обнаружено небольшое несоответствие на диске. Это не является повреждением данных.
Обнаружены ошибки. Продолжение работы в режиме только чтения невозможно.”

При запуске chkdsk для исправления компьютер просит перезагрузиться. А после перезагрузки вновь получаем многократно повторяющийся Inserting an index entry into index $0 of file 33639 

Однако, не спешите расстраиваться, возможно, Ваш “Hard Drive” еще послужит Вам..

CHKDSK

Постараюсь собрать информацию с нескольких форумов (подкрепленную личным опытом) в одно сообщение:

Читать дальше об ошибке checkdisk inserting an index

Опубликовано Май 18, 2008 | автор: levik  |  Комментарии (3) »

Таблицы шириной 100% в ie 6 и плавающие (float) элементы

Если меню выполнено в виде плавающего блока (например, div#left {float:left;width:200px;}), а в правом блоке сделан отступ шириной такой же или чуть больше ширины плавающего блока (div#right{margin-left:200px;}), то при попытке вставить в правый блок таблицу <table width=”100%”>…</table> она отображается ниже плавающего блока (как будто прописано свойство clear). Если прописать width=”99%”, то таблица отображается на своем месте.

Если вставить дополнительный слой шириной 99% как контейнер для таблицы (а в таблице прописать 100%), то таблица опять же отобразится на своем месте.

Во-первых, проверяем, указан ли DOCTYPE. К тому же сползание таблицы еще зависит от типа документа. Похоже, для Strict-документов, браузер прибавляет к общей ширине таблицы (100%) дополнительные бордюрные пиксели по бокам. Проверить, в них ли причина, довольно легко -пишем вместо {border:solid 1px #000;} более “толстый” вариант {border: 10px solid #000000;}, а затем убираем границы, и, для наглядности можно выделить цветом {background: #aaa;}

http://xpoint.ru/forums/thread/29197.xhtml
http://xpoint.ru/forums/thread/29164.xhtml

Опубликовано Май 7, 2008 | автор: levik  |  Без комментариев »

Table is marked as crashed and should be repaired - ошибка Mysql

Table host/tablename is marked as crashed and should be repaired

Сообщение о такой ошибке при запросе к базе данных mysql может сбить с толку начинающего (да и уже “опытного”) владельца или администратора сайта. Crash mysql!!! Однако, все не так уж плохо - возможно, таблица всего-навсего повреждена, и её следует восстановить.

Как восстановить таблицу mysql?

В следующих двух строках вместо %table_name% следует подставить название поврежденной таблицы.

Первым делом следует проверить таблицу (запрос “CHECK TABLE %table_name%”) .

Для восстановления таблиц в  mysql существует специальный запрос “REPAIR TABLE %table_name%”, который возвращает результат своей работы в виде таблицы:

| Table | Op (операция - repair) | Msg_type (тип сообщения) | Msg_text (текст сообщения) |

Если действительно, ничего страшного не случилось, то, скорее всего, этими нехитрыми действиями Вам удастся восстановить поврежденную таблицу. Если же описанные шаги не помогли - смотрим в сторону мануалов “How to Repair MyISAM Tables

Если Вы заметили ошибку “marked as crashed and should be repaired” - сообщите, пожалуйста администратору, владельцу или представителю службы технической поддержки сайта. Как минимум, они будут Вам благодарны.

Да минует Вас Крэш… во всех его проявлениях…
Удачи!

Коды ошибок MySQL сервера

http://oscommerce.su/modules/newbb/viewtopic.php?post_id=963
http://wiki.iblink.ru/sources/db/errors

Опубликовано Май 3, 2008 | автор: levik  |  Комментарии (3) »

Собственный php.ini на хостинге с панелью управления Cpanel

Как создать собственную конфигурацию php.ini на хостинге с панелью управления Cpanel

Конфигурационные переменные php можно изменять следующими способами:

  • во время выполнения скрипта функцией ini_set;
  • в файле .htaccess в каталоге выполнения скрипта;
  • в конфигурационном файле php.ini

Можно воспользоваться функцией php ini_set(varname, newvalue) - устанавливает для переменной varname значение newvalue на время выполнения скрипта. Однако, не для всех переменных можно задать значение этой функцией. Некоторые переменные нельзя изменять как непосредственно в скрипте, так и в .htaccess.

К тому же, довольно часто в целях безопасности хостер запрещает использование php_value и php_flag в .htaccess-файлах. Однако, как быть, если требуется изменить конфигурацию php? Добавляем собственный php.ini в Cpanel

Опубликовано Апрель 22, 2008 | автор: levik  |  Комментарий (1) »

easypopulate или импорт-экспорт в OsCommerce

EasyPopulate - хто этО?

EasyPopulate - плагин (или файл-модуль.. как угодно) для OsCommerce, который позволяет экспортировать товары из интернет-магазинов на базе OScommerce (например, в csv-формате), редактировать их (например, в Excel) и импортировать обратно в интернет-магазин. Кроме того, файл с информацией о товарах можно автоматически генерировать (часто удобно делать напрямую обработкой-выгрузкой из 1С).

Сомнений не возникает, что  EasyPopulate - штука полезная. Если сборка магазина OsCommerce более-менее солидная, то скорее всего, наличие сей “фичи” уже имеется. Если же нет - можно установить таковую и самостоятельно.

Как начать работу с Easypopulate

Проще всего сделать экспорт товаров (ищем в меню админки где-то в каталоге) из интернет-магазина и открыть получившийся файл любым редактором csv (скорее всего, это будет Excel). Если файл с расширением .txt, то придется пройти небольшую процедуру определения формата файла - табуляторы, строки, форматы ячеек.. Проблем возникнуть не должно.

Структура файла не слишком замысловата - первая строка, как и положено “заголовочная”. Значение большинства полей интуитивно понятно (v_products_id, v_products_model,v_products_image…). Для полной уверенности можно ознакомиться с форматом данных EasyPopulate. В последующих строках идут значения полей для каждого товара. Следует отметить, что при необходимости товар и категории будут добавлены автоматически. Глубина вложенности категорий ограничена шестью, но на практике этого вполне хватает.

Внутри easypopulate или “ручками”

При наличии некоторых знаний php беглый просмотр файла easypopulate.php прояснит некоторые детали,  изначально скрытые от глаз  пользователя. Документацию ведь читать некогда :) Да.. ещё, следует обратить внимание на версию файла… И не торопиться обновлять до последней - скорее всего в используемой версии/сборке магазина файл был отредактирован и довольно сильно отличается от оригинального (такова уж особенность OsCommerce) …

Встречался с версиями, у которых “всё в одном” - html (+php, куда ж без него) код, импорт и экспорт в одном файле. Первая половина отвечает за экспорт, (блок if download…) , потом - импорт в Oscommerce ($localfile or is_uploaded_file), импорт с разбиением на части (if (is_uploaded_file($usrfl) && $split==1) …) - что-то похожее реализовано в импорте для virtuemart (joomla) , дальше - вывод HTML (форма для импорта), чуть ниже - функции обработки.

Основная обработка производится функциями ep_create_filelayout() и walk() (импорт)

Импорт в Oscommerce дополнительных полей

Добавить в файл  импорта дополнительные поля (не забыть заголовки) и обработать их в easypopulate (в функции walk). В общем-то всё :)

Импорт в Oscommerce товаров и атрибутов в одном файле

Вообще, в файле easypopulate реализован импорт-экспорт атрибутов отдельным файлом (для экспорта выбрать файл экспорта - атрибуты товаров). Т.е. товары загружаем файлом товаров, а атрибуты - файлом атрибутов. И экспорт реализован слегка.. скажем так неудобно - в результате много “пустых” данных (а-ля представляем граф матрицей или почти  таблица пифагора - на пересечениях строки и столбца, если для товара имеется атрибут, то в графе “Цена” указывается значение разницы от основной. И независимо от того, есть атрибут или нет - его id и значение атрибута)

v_attribute_options_id_1 v_attribute_options_name_1_4 v_attribute_values_id_1_1 v_attribute_values_price_1_1 v_attribute_values_name_1_1_4 v_attribute_values_id_1_2 (… и тд для всех значений атрибута _1, потом _2)

Строчки присутствуют для всех товаров, столбцы - для всех атрибутов и значений атрибутов*3

Конечно, это не всегда удобно - например вариант экспорта атрибутов, когда в магазине ~6 тыс. товаров и НЕКОТОРЫЕ товары имеют один атрибут на vps генерировался несколько минут и весил в итоге 1.5 Мб. Импорт такого файла - тоже процедура довольно затратная.. :)

Как вариант - импорт в Oscommerce товаров и атрибутов одним файлом - добавляем столбец (к примеру, v_my_attribute_1) и помещаем туда значения (или предварительно сформированные ID, соответствующие внутренним ID магазина) и обрабатываем в функции walk.

Если предусмотреть автоматическое создание отсутствовавших ранее атрибутов и обработку для исключения дублирования (из-за пробелов, больших букв и тд.. можно как при импорте данных, так и на этапе формирования выгрузки.. или ещё раньше - “правильное” хранение данных в основной базе), то такой вариант вполне имеет право на сущесвование.

Приходилось сталкиваться с импортом OsCommerce? Нашли ошибку? Есть что добавить?  - Добро пожаловать в комментарии.

Опубликовано Апрель 17, 2008 | автор: levik  |  Без комментариев »