За месяц Январь, 2011

Debian на VPS

Vps сервер на Debian в общем имеет много общего с любым из Linux-дистрибутивов. Одно из основных отличий Debian - наличие пакетов (пакетный дистрибутив).

apt-get update - обновляем репозитории
apt-get upgrade - обновляем установленные пакеты
или:# aptitude update && aptitude upgrade

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

apt-get search php5 - поиск нужного пакета
apt-get install php5-cli phpmyadmin - установка пакетов

Кроме того, имеется удобный интерфейс aptitude

Некоторые ошибки возникают именно из-за использования старых версий, например, во время установки mysql-server на debian, может появиться такое сообщение об ошибке:
invoke-rc.d: initscript mysql, action "start" failed.

apt-get remove mysql-server mysql-server-5.0 && apt-get install mysql-server mysql-server-5.0- сначала удаляем пакет(ы), затем повторно устанавливаем

Добавляем нового пользователя (чтобы в дальнейшем отключить root-доступ по SSH):
adduser
 levik

в файле /etc/apt/sources.list для обновления “сырцов” потребуются строки, начинающиеся с deb-src

# See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
deb http://http.us.debian.org/debian stable main contrib non-free
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free
# Uncomment if you want the apt-get source function to work
#deb-src http://http.us.debian.org/debian stable main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

“Быстрая” установка LAMP в DEBIAN (linux+apache+php+mysql).
# aptitude update && aptitude upgrade && aptitude install apache2 php5 libapache2-mod-php5 mysql-server mysql-client php5-mysql phpmyadmin

Установка PHP 5.3, Nginx и PHP-fpm на Ubuntu/Debian
http://stopxaker.ru/showthread.php?t=1472
http://adw0rd.ru/2010/ubuntu-php53/

Установка mod_rpaf для apache2 в Debian 
apt-get install libapache2-mod-rpaf

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

Расположение конфигурационных файлов в популярных CMS

Иногда, имея ftp-доступ требуется найти доступ к БД.

Места хранения паролей для доступа к базам данных для различных CMS собраны в таблице:

CMS Конфигурационный файл с паролем к базе MySQL
bitrix /bitrix/php_interface/dbconn.php
Joomla /configuration.php
MODx /manager/includes/config.inc.php
Wordpress /wp-config.php
OsCommerce /includes/configuration.php /admin_area/includes/configuration.php

Наверняка, список далеко не полный - дополняйте в комментариях

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

SoftException in Application.cpp:601: Directory “/path/dir” is writeable by group

При запуске php-скрипта сервер выдал ошибку 500 (500 error). При этом в лог сервера “упало” следующее сообщение об ошибке:

SoftException in Application.cpp:601: Directory “/path/dir” is writeable by group

Ошибка происходит на сервере под управлением cpanel, когда происходит попытка открыть php-файл, находящийся ниже каталога, разрешенного для записи членам группы.

Для обхода этой ошибки следует изменить права всех вышележащих каталогов (требуемых для выполнения скрипта) на 755 (chmod 755 …). На файлы желательно устанавливать разрешения 644.

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

IE 8 bug display:table-cell и изображение с max-width внутри

Столкнулся с непонятным багом IE 8 при помещении внутрь элемента с display:table-cell изображения с ограниченной шириной max-width, которое по ширине больше ширины элемента. Блочный элемент растягивается, как будто изображение нормальной ширины.

upd

Задумка была следующая - в блоке заранее заданных размеров размещать изображение с вертикальным и горизонтальным центрированием.

  1. Для выравнивания по горизонтали используем css-свойство text-align:center;
  2. Для выравнивания по вертикали используется  vertical-align:middle;display:table-cell;
  3. Для уменьшения больших изображений (вписываем в блок) max-width и max-height
  4. Пункты 3 и 4 дублируем в отдельный css с использованием expression для ie 6 и подключаем условным комментарием (if lte IE 6)

Изображение с max-width внутри элемента display:table-cell

Такой “трюк” работает во многих (распространенных) браузерах - Firefox, Opera, Safari

Все бы ничего, но IE8 в случае, если изображение больше заданной ширины “растягивает” блочный элемент, как будто ширина изображения не изменяется, но при этом само изображение показывается уменьшенным (с учетом max-width).

В поисках решения, как оказалось, я не первый (мягко говоря - запоздал на пару лет), кто столкнулся с аномальным поведением блоков table-cell, в которых находятся изображения

The cause of this is a bug in IE8’s awesome new standards-supporting rendering engine (sarcasm intended) which, until fixed (if ever), will cause table-cell elements to scale out of proportion like that

Если я правильно понимаю, в IE 8 “новый движок”, который изобилует некоторыми “характерными особенностями” (когда-то искренне наделся, что с выходом IE7 глючность /float 3px, pngfix … / “ослика” будет в прошлом), ан нет:

The following regressions are present in IE 8:

* Min-width on new block formatting context beside a float is sometimes treated as width.
* Percentage width floats cause justified text to move.
* Max-width fails on floats with auto overflow.
* Scrollbar height is added onto max-height instead of subtracted from it.
* Max-height acts as height on elements with scrollbars.
* Combining max-height, float and overflow:scroll will cause the entire page to disappear.

http://bytes.com/topic/html-css/answers/870359-ie8-display-table-cell-max-width-bug

Там же были найдены варианты “обхода” этого бага:

  1.  добавить внешний элемент-обертку (таблица) с фиксированной шириной (display:table;table-layout:fixed;width:XXXpx) равной ширине ячейки (блока display:table-cell)
  2. добавить внутренний элемент-обертку изображения с фиксированной шириной, равной максимальной ширине изображения

Обходим расползание элемента display:table-cell

upd для IE6 ограничение max-width + max-height обходим с expression:

	width: expression(this.width>89&&(89/this.width)< (103/this.height)? 89: true);
	height: expression(this.height>103&&(89/this.width)>=(103/this.height)? 103: true);

А вертикальное выравнивание - с помощью inline-позиционирования

Опубликовано Январь 24, 2011 | автор: levik  |  Нет комментариев »

Codeigniter - заметки на полях

Мелкие заметки по работе с CodeIgniter:

Точки в строке адреса Codeigniter (переменные, передаваемые в функцию-action) заменяются на нижнее подчеркивание ( было codeigniter.site/controller/action/var.var - стало var_var)

“Стандартный” .htaccess для RewriteRule:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]

т.е. в систему поступает всего один пустой $_GET параметр с ключом, равным URI. Поскольку в php название переменной с точкой не является допустимым (видимо, осталось после Register Globals On), Все точки в названиях ключей преобразует в нижние подчеркивания - именно этим и объясняется преобразование var_var

Опубликовано Январь 21, 2011 | автор: levik  |  Нет комментариев »

Bitrix - заметки на полях про Битрикс

Заметки по системе Bitrix

Для добавления файла стилей в шаблон Битрикса служит метод SetAdditionalCSS:
$GLOBALS[’APPLICATION’]->SetAdditionalCSS(’/bitrix/sample.css’);

Изменить meta keywords (ключевые слова) в битриксе
$APPLICATION->SetPageProperty(”keywords”, “установить ключевые слова”);

Изменить заголовок в Bitrix
$APPLICATION->SetTitle(”новый заголовок”);

Восстановление пароля в Битрикс
< ?php // set-new-password.php
require($_SERVER['DOCUMENT_ROOT']."/bitrix/header.php");
echo $USER->Update(1,array("PASSWORD"=>'Bitrix-new-password'));
echo $USER->LAST_ERROR;
require($_SERVER['DOCUMENT_ROOT']."/bitrix/footer.php");
?>

Опубликовано Январь 21, 2011 | автор: levik  |  Нет комментариев »

Joomla как изменить title главной страницы, заголовки внутренних страниц Joomla

Для эффективного продвижения в поисковых системах, как правило рекомендуется использовать заголовок (тэг <title>). В системе Joomla имеется возможность изменять title практически для любой страницы.

Изменяем title-заголовок для главной страницы

Как ни странно, заголовок главной страницы не изменяется при изменении заголовка материала, который размещен на главной (галочка).  Возможно, поэтому, у тех, кто только начинает разбираться с Joomla! возникают проблемы с изменением заголовка главной страницы. Читать целиком »

Опубликовано Январь 17, 2011 | автор: levik  |  Комментарии (5) »

учет кликов по Flash-баннерам в Google Analytics

Возможны проблемы при учете кликов по Flash-баннерам из-за того, что в этом случае не передается Referer. Для того, чтобы обойти (правильно учитывать такие клики) можно слегка изменить URL .

12.4. Flash-баннеры
Согласно информации от компании Macromedia, при клике по flash-баннерам реферер не передаётся.
Если необходимо узнать, сколько посетителей попали на сайт, кликнув по flash-баннеру, то нужно поставить метки.
В системе Google Analytics метки можно поставить с помощью специального инструмента «Компоновщика URL».

12.5. Особенности учёта переходов в статистике сайта
Если вы не поставили метку и хотите увидеть в Google Analytics* переходы по рекламе из AdRiver, то в этом случае переходы агрегировать очень сложно.
Переходы будут складываться:
* из прямых рефереров площадок, на которых кликовые ссылки размещались напрямую (прямо в коде страницы, не flash).
Сюда же будут попадать все переходы с площадок, где пиксель прописывался непосредственно в баннер для пользователей с браузерами Firefox, Safari, Opera.
* из ЧАСТЕЙ рефереров баннерных зеркал AdRiver при размещении через код. Адреса баннерных зеркал можно посмотреть на этой странице.
Части — потому, что рефереры будут передаваться только для таких браузеров как Firefox, Opera, Safari и для Internet Explorer, в случае если у посетителя нет flash-проигрывателя или выключено воспроизведение flash-роликов.
* из прямых переходов без реферера, в которые также попадут все переходы по IE с площадок, где размещение шло через код. Сюда же будут попадать все переходы с площадок, где пиксель прописывался непосредственно в баннер.
Все это сильно усложняет «нахождение» переходов в статистике. Оценивать можно только весь трафик в целом, поделить его по источникам без меток не получится.

переходы с флеш-баннеров регистрирует GA?

Как отслеживать события Flash в Analytics

Want to track Adobe Flash?

Опубликовано Январь 13, 2011 | автор: levik  |  Нет комментариев »

Замыкания в JavaScript

О замыканиях узнают, как правило, сталкиваясь с тем, что нужно “навесить” похожие обработчики на несколько элементов. Простой пример:

function setdisplay (elementID,vis) {
document.getElementById(elementID).style.display=vis; //'block' or 'none'
}
for (i=1;i<=4;i++) {
element = document.getElementById('element'+i); //#element1,#element2...
element.onmouseover = function (e) {
setdisplay('showhide'+i,'block');
}
element.onmouseout = function (e) {
setdisplay('showhide'+i,'none');
}
}

По идее при наведении курсора на элемент #element1 должен показываться showhide1, и скрываться после события onmouseout. =) Однако, i в данном случае будет иметь значение равное 5 =) для всех функций.

Вот тут-то и возникает вопрос, как “зафиксировать” текущее значение переменной.

element.onmouseover =
function(x) {
return function(e) { setdisplay ('showhide'+x,'block'); }
}(i)

Мы создаем дополнительную “внутреннюю” функцию, которая вызывается с параметром i.. А в самой функции используется локальная переменная x. Всё очень сложно может показаться только на первый взгляд.. ).

Открыв для себя такую возможность, я стал искать - наверняка я не первый, кто с этим столкнулся. Как выяснилось, такой прием (или сама функция) называется Замыканием в JavaScript.

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

Довольно объемная статья про замыкания в JavaScript:
http://www.fpublisher.ru/articles/web_technologies/type6/article70.htm
http://abramov.tv/2009/10/chto-takoe-zamyikaniya-v-php-i-javascript/

Опубликовано Январь 12, 2011 | автор: levik  |  Нет комментариев »

Работаем с GitHub в Windows - Tortoise Git

Git — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux.

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

До начала работы с Git (GitHub) рекомендуется ознакомиться с минимумом базовых понятий, без усвоения которых работать будет очень тяжело (абзац специально для любителей рвануть с места в карьер.. )

Программное обеспечение  для работы с Git (GitHub) в Windows

Вообще, git - приложение консольное (все-таки разрабатывался для Linux), однако к нему имеются вполне приятные графические интерфейсы (У тех, кто работал с Tortoise SVN, наверняка, лучше всего получится освоить TortoiseGit)

Итак, качаем:

Устанавливаем msysgit (все пункты можно оставлять “по умолчанию”), затем - TortoiseGit;

Регистрируемся на github.com (регистрация как и на многих других сайтах) и создаем репозиторий.

Запускаем программу PuttyGen для генерации SSH-ключа и загружаем его на github.com - заходим в настройки аккаунта (Account settings) на github.com и добавляем SSH-ключ. Private Key сохраняем, он нам ещё пригодится.

В контекстном меню (в любой папке) заходим в TortoiseGit-Settings и вводим своё имя и адрес электронной почты в соответствии с регистрацией на GitHub. Если при выборе настроек вывелось сообщение об отсутствии msysgit - проверяем правильность установки, и если всё верно - прописываем нужный путь в настройках.

Теперь непосредственно к работе с файлами:

Выбираем каталог-папку для хранения локальных репозитариев, правой кнопкой мыши и в контекстном меню выбираем пункт Git Create repository here (или Git Clone, если хотим работать с уже имеющимся репозитарием)

В свойствах (Settings) в разделе Git-Remote выбираем Add и добавляем Private Key (файл), сгенерированный ранее и сохраненный на диск. Копируем URL и название с сайта github (раздел Source или Admin)

После работы над файлами (и каталогами) выделяем все, которые хотим добавить - щелчок правой кнопкой и TortoiseGit-Add. Ещё один щелчок правой кнопкой Tortoise Git - Commit -> Master.

Первый Commit коммом :) Читать целиком »

Опубликовано Январь 10, 2011 | автор: levik  |  Комментарии (3) »