VPS - ограничения VDS сервера (/proc/user_beancounters)

 Виртуальные сервера (VDS|VPS) имеют ряд ограничений, информацию о которых можно посмотреть в файле (для OpenVZ виртуализации)
/proc/user_beancounters

Расшифровка параметров (ограничений) VPS-сервера:

Основные лимиты VPS
numproc - Максимальное количество процессов и тредов (потоков).
numothersock - Максимальное количество сокетов, не являющихся TCP-сокетами (UDP, UNIX-сокеты и пр).
vmguarpages - Гарантированный объем оперативной памяти, которая может быть запрошена стандартными
механизмами резервирования памяти в Linux.

полная версия статьи про ограничения VDS сервера

Опубликовано Сентябрь 23, 2010 | автор: levik  |  Комментарии (2) »

Joomla делаем из абсолютных ссылок относительные

Сайт, работающий на Joomla выводит все ссылки, которые генерируются при помощи mod_mainmenu (upd. и не только) как абсолютные, то есть с http://:

http://joomla.site/link.htm

Насколько это корректно, хорошо или плохо - не скажу.. однако, я считаю, что внутренние ссылки должны быть именно внутренними, а точнее, относительными (т.е. без http:// ).

Итак делаем относительные ссылки на Joomla.

В файле /includes/sef.php следует внести исправление в двух местах:

(делаем SEF-ссылки относительными)
return $mosConfig_live_site .'/'. $string . $fragment;
(~ строка 520) заменяем на
return '/'. $string . $fragment;

(делаем обычные не SEF-ссылки относительными)
$string = $mosConfig_live_site .'/'. $string;
(~ строка 550) заменяем на
$string = '/'. $string;

Вот и всё - теперь все ссылки, которые генерируются автоматически будут без http. Ссылки в содержимом не обрабатываются - они так и останутся абсолютными (ну, или относительными - зависит от того, как вставляли ссылку)

На заметку: Мамбот NoFollow добавляет в абсолютные внешние ссылки… действительно Nofollow.

UPD для превращения вообще всех абсолютных внутренних ссылок в относительные можно написать собственный мамбот, который в зависимости от значения $_SERVER[’HTTP_HOST’] будет “вырезать” все лишние “внутренние” http: href=”http://(www\.)?joomla.site”

Опубликовано Сентябрь 21, 2010 | автор: levik  |  Без комментариев »

Vkontakte и Odnoklassniki просят отправить SMS

Странная ситуация: одновременно два популярных сайта - Одноклассники.ру и Вконтакте.РУ стали требовать отправку СМС на короткий номер для активации аккаунта (110521469 на номер 6681). Все как и положено - с предупреждением никому, никогда и нигде не сообщать свой пароль. Однако, не “без задоринки” - у одноклассников нет иконки (в строке браузера), в контакте выдает ошибку 404 при попытке зайти на страницы вида http://vkontakte.ru/idxxxxxxx . Естественно, что с другого компьютера всё открывается - никаких отправок СМС.

Вконтакте требует отправить СМС для активации аккаунта

Что делать, если вконтакте просит отправить СМС - читать дальше

Опубликовано Сентябрь 18, 2010 | автор: levik  |  Комментарии (6) »

virtuemart при добавлении товара белый экран-пустая страница

При входе в форму добавления товара virtuemart радует белым экраном ( в браузер выводится пустой html-документ). Обычно является это признаком fatal error в PHP. Заглядываем в LOG-файл - действительно:

[error] PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 49 bytes) in …/includes/database.php on line 491

Итак, при выводе “пустой” страницы добавления товара скрипту не хватает памяти (32 МБ, конечно не так уж много, но куда??). Что самое интересное, при редактировании товара (страница та же, только установлен параметр product_id) ошибка не возникает. И ещё, раньше такого вроде не было.

В database.php на 491 строке ничего особо интересного нет - подсказка, что выводится LIST (чего - не совсем ясно)… Элементы “складируются” в массив.. и на очередном не хватает памяти.

Предварительная диагностика подсказывает, что “глюк” из-за большого количества товаров (~22 тыс). Протестировал с “обрезанной” до 7 тыс товаров - всё работает. И правда, в товарах проблема.

Смотрим в сторону файла с формой добавления/редактирования товара
administrator/components/com_virtuemart/html/product.product_form.php

Но как связана страница добавления/редактирования одного товара с количеством товаров? Точно! Есть ведь связанные товары.. Большой multiselect связанных товаров и правда содержит все записи.. однако он выводится и при редактировании товаров.. Странно.. но всякое бывает - проверяем (закомментировать строчку с выводом мультиселекта).. Ан нет.. не влияет.

Ладно.. пробуем по-другому ищем product_id (ведь для имеющегося товара все в порядке.. белый экран только при добавлении Нового товара). Из “сомнительных” (cомнительное в смысле без проверки на “корректность” product_id) мест использования этой переменной видим такое:

$db_items = $ps_product->items_sql($product_id);

После которого идет вывод формы с подстановкой значений.

Проверяем совсем наглым образом - убираем эту строку и последующие, и открываем страницу добавления товара - Открывается! :) Добавляем строку (без продолжения) - ошибка.

перейти к решению проблемы пустого экрана

Опубликовано Сентябрь 15, 2010 | автор: levik  |  Комментарий (1) »

Экспорт в excel при помощи php

Параллельно с формированием бланков в rtf-формате, и работой с word из PHP или javascript иногда требуется сформировать средствами PHP документ EXCEL по уже готовому шаблону.

Готовых php-классов для работы с файлами xls (формат программы Microsoft excel) на сегодняшний день хватает. Однако, при заполнении таблицы предусмотреть все необходимые операции для нормального отображения (увеличение высоты строки, ширины строки и т.д.) довольно сложно.

Задачу экспорта в формате Excel решал на php следующим образом…

Тут стоит оговориться, все же основная хитрость не в конкретном языке, а в подходе - аналогичным способом можно поступить и с использованием любого другого языка, будь то серверный perl, python, или даже C-pascal без красивого оконного интерфейса. И даже при программировании под Windows использование такого способа даёт небольшой плюс - для формирования Excel-документа нам не требуется установленный на компьютере “офис”.

… продолжение статьи экспорт в EXCEL средствами PHP и не только

Опубликовано Сентябрь 13, 2010 | автор: levik  |  Комментарии (2) »

mysql update where select from update-target

MySQL не позволяет апдейтить таблицу, которая участвует в выборке условия select. То есть при попытке выполнить запрос типа

update categories set discount =  (select discount from categories where id=1)

Получим следующее сообщение об ошибке:
ERROR 1093 (HY000): You can't specify target table 'goods' for update in FROM clause

В документации по UPDATE находим простое объяснение - “Currently, you cannot update a table and select from the same table in a subquery.”

Как быть, если всё же требуется изменить записи в таблице, которая участвует в условии?
Конечно, вариант с ручным созданием временной таблицы будет работать, однако…

Статья на английском с примерами, а также интересные решения в комментариях по ссылке:
http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

update webartCategories as cat     inner join
( [тут наш запрос на выборку] ) as x on cat.id = x.id
set level = level + 1

UPD - Ещё один запрос с подзапросом - UPDATE SELECT MIN MAX
upate user u inner join
(SELECT id_user, max(id_post) as maxid_post from post2user GROUP BY id_user) u2p
set u.lastpost = u2p.maxid_post

Опубликовано Сентябрь 10, 2010 | автор: levik  |  Комментарий (1) »

Использование бесплатного стороннего хостинга

Иногда (особенно на этапе развития не особо крупного проекта) для хранения файлов требуется дисковое пространство, а на оплату этого  пространства финансов нет и в ближайшее время не предвидится. Конечно, про бесплатный сыр все наслышаны.. однако на сегодняшний день вполне успешно можно пользоваться качественными бесплатными сервисами (кто не знает почту на @mail.ru?). Естественно, в этом случае имеются значительные ограничения, однако для нашего конкретного случая они могут быть вполне приемлемыми.

Итак, бесплатный хостинг

Задача 1: Сторонний хостинг для хранения резервных копий

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

Из направлений решения:

Сервис dropbox.com при регистрации предоставляет 2 Гб свободного места. Объемы можно пополнять за счет приглашения пользователей-рефералов. Для относительно небольших проектов подойдет для backup-площадки.

http://alternativeto.net/software/dropbox/ - альтернативы дропбоксу. При выборе рекомендую обращать внимание не только на цены, но и на отзывы/время работы..

Файловые сервисы типа Яндекс.Народ;

Gmail Drive позволяет использовать почту gmail  как файловое хранилище. Для *nix искать gmailfs

skydrive.live.com - Бесплатное хранилище объемом 25 ГБ для фотографий и документов. Из комментариев: 50мб ограничения на размер файла, доступ только через веб интерфейс… (скорее всего, для хранения резервных копий не подойдет, а вот как файловое хранилище для мелких документов вполне).

Задача 2: Сторонний хостинг изображений с предоставлением API

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

Из рекомендованного / найденного и т.д.

используем Amazon S3  - сервис платный (стоимость, правда небольшая, но сам факт остаётся). В остальном

ImageShak.us RedirectAPI man - пожалуй, “то что нужно”. Пользователь заливает изображение, информация об изображении передается на нужный URL (задается в форме отправки файла). Пользователь доволен :)

Google Storage предоставляет  100 Гигабайт бесплатно  - на “первое время” должно хватить даже для относительно большого количества изображений (Возможно, яндекс-фотки повторить не удастся, но тем не менее..)

Как вариант - можно использовать любой бесплатный хостинг (тот же яндекс.народ) и складывать фотографии туда. При этом особое внимание следует обратить на допустимый размер файла и условия полного или частичного удаления файлов с сервера.

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

ps. Хозяйке на заметку - правила выбора дизайнера фрилансера:
http://rudni4ok.blogspot.com/2010/03/8-pravil-vibora-frilancera-dizainera.html

pps. Аренда дешевых серверов в Европе
http://www.hetzner.de/en/hosting/produkte_rootserver/ds3000/
http://www.netdirekt.de/c/cms/front_content.php?client=1〈=1&idart=182&idcat=33
http://www.leaseweb.com/en/dedicated-servers/express-series

PPPS - сервисы для хранения кода
http://snipplr.com/popular/

Опубликовано Сентябрь 7, 2010 | автор: levik  |  Комментарий (1) »

VPS Plesk - настройка внешнего почтового сервера

Имеется VPS сервер (с панелью управления PLESK), на котором работает web-сервер (по умолчанию на серверах с Plesk установлен Apache). Требуется подключить бесплатную внешнюю почту на сервере Яндексе (аналогично подключается внешняя почта на Google).

Настройку внешних MX-записей удобно производить в панели управления доменом (если регистратор домена предоставляет такую возможность - например на nic.ru эта услуга считается дополнительной и стоит больше годовой стоимости домена ru)

Однако, если требуется, чтобы письма доходили с самого сервера, потребуется провести дополнительные настройки. Сервер пытается отправить письмо “сам себе” - ведь по умолчанию PLESK автоматически включает почтовые записи для домена. Находя информацию о почтовых записях у себя сервер просто не доходит до mx-записей у регистратора домена.

Итак, для панели управления PLESK следует просто отключить почту для выбранного домена:

Для Plesk 8.x: Домены > выбранный домен > Почта > Отключить

Plesk 9.x - Домены > выбранный домен > Учетные записи почты > Настройки почты > Активировать почтовую службу на домене > снимаем галочку

После обновления MX-зоны домена почта будет обрабатываться с внешнего сервера, а отключение почты для домена на своем сервере приведет к тому, что отправленные письма будут ходить через внешний сервер.

Опубликовано Сентябрь 4, 2010 | автор: levik  |  Без комментариев »

Huawei Modem + Mobile Partner - Установка, настройка, ошибка 619

Попал мне в руки девайс с пошлым названием Huawei ( и цифрами E162G) и сим-картой Beeline (иногда путаю их к корбиной), однако сам модем в полосатые пчеластые цвета билайна раскрашен не был.

При подключении к компьютеру модем определяется как флешка (или как CD-ROM.. или какой-то DataStorage Device). В общем, если модем “готов к употреблению”, то на этом новом диске от HUAWEI в каталоге Mobile Partner находится одноименная программа (если нет - видел что-то типа прошивки на оф сайте… как пользовать - не скажу..). После установки программы, запускаем её идем в меню - Инструменты-Опции-Управление профилем и настраиваем нужный нам профиль

номер *99#
логин - beeline,
пароль beeline

и не забываем его выбрать. (Особенно актуально, если в программе больше одного профиля - при выборе неправильного профиля может возникать “ошибка 619″)

Снова заходим в меню  - инструменты-выбор устройства. По идее, если всё в порядке, программа должна предложить хотя бы одно устройство “на выбор”. Выбираем его.

Если программа Mobile Partner не видит модем HUAWEI, заходим в корневой каталог нового диска и запускаем ResetDevice.exe и DataCardSetup.exe (в какой точно последовательности это помогло - не скажу) После таких манипуляций  модем стал определяться как HUAWEI - 3G MODEM (найдены два или три “устройства” с похожими названиями)

Возможно, после установки модема и/или программы Mobile Partner потребуется перезагрузка.

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

Модем HUAWEI выдает сообщение об ошибке 619

Вообще, это тема для отдельной статьи, потому как различных вариантов может быть множество. Из простого

1. Проверяем строку инициализации модема (уточнить у оператора-провайдера)

Правой кнопкой на “Мой компьютер” - в контекстном меню “Свойства” Вкладка оборудование, “Диспетчер устройств”

В появившемся дереве находим пункт “Модемы”, раскрываем и выбираем нужный HUAWEI
Двойной щелчок - откроется окно Свойства. Переходим на вкладку “Дополнительные параметры связи”
и прописываем строку вида: (Для билайна строка была именно такой:)

AT+CGDCONT=1,”IP”,”home.beeline.ru”

После чего нажимаем ОК и пробуем подключиться из программы ещё раз. Должно работать. Именно из-за этой строчки может не работать модем, подключенный к другому порту USB - для компьютера это разные устройства.

2. Проверить наличие денег на счету, а также подключение услуги “Интернет”.

3.  На сайте MEGAFON видел, что в случае, когда манипуляции с (AT+CGDCONT=1,”IP”,”internet”) и (+CGDCONT=1,”IP”,”internet”) не помогли, отправили смотреть в сторону антивируса с файерволом. Всякое бывает.

Удачного HUAWEI-сёрфинга. ( Какой бизнес, такой и ланч… )

Опубликовано Сентябрь 2, 2010 | автор: levik  |  Без комментариев »

linux - Добавляем локаль (locale) при помощи localedef

Если функции изменения регистра некорректно работают с русским текстом, и не помогает установка локали в php (функция setlocale), скорее всего, нужной локали просто нет на сервере.

Если имеется доступ по SSH, посмотреть список имеющихся локалей можно командой

locale -a

locale -a | grep ru_RU

Если нужной локали (обычно, требуется ru_RU.CP1251 - остальные, скорее всего уже установлены) нет, установить (добавить в систему) её можно командой localedef (в Linux):

localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

Если интересуют подробности - можно почитать, man localedef (для начала).
http://unix1.jinr.ru/~lavr/locale-1251.html - более подробная информация

краткая памятка по locale

Конфигурация локали в Debian

dpkg-reconfigure locales

Опубликовано Август 27, 2010 | автор: levik  |  Без комментариев »