admin

Гру 232011
 

Двоичные данные (Boolean)

Это простейший тип. Он выражает истинность значения – это может быть либо TRUE, либо FALSE. Булев тип был введен в PHP4.

Чтобы определить булев тип, используйте ключевое слово TRUE или FALSE. Оба регистро-независимы.

<?php
$x = True; // присвоить $x значение TRUE
?>

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

<?php
// == это оператор, который проверяет
// эквивалентность и возвращает булево значение
if ($action == "показать_версию") {
echo "Версия 1.23";
}

// это не обязательно…
if ($show_separators == TRUE) {
echo “<hr>\n”;
}

// …потому что вы можете просто написать
if ($show_separators) {
echo “<hr>\n”;
}
?>

Преобразование в тип Boolean

Для преобразования значения в булев тип используйте приведение типа (bool) или (boolean). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует булев аргумент.

При преобразовании в логический тип, следующие значения рассматриваются как FALSE:

Все остальные значения рассматриваются как TRUE (включая любой ресурс).

Внимание! -1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!

<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

Работа с бинарными данными (тип boolean)

Cтроки могут содержать любые, в том числе и бинарные данные. Для работы с такими строками иногда
удобно использовать функции pack() и unpack().

pack(string $format [,mixed $args, …])

Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования — наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a, A, h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находятся в очередном параметре-строке при вызове функции (то есть, определяется размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные. Вот полный список спецификаторов формата:

a — строка, свободные места в поле заполняются символом с кодом 0;
A — строка, свободные места заполняются пробелами;
h — шестнадцатеричная строка, младшие разряды в начале;
H — шестнадцатеричная строка, старшие разряды в начале;
c — знаковый байт (символ);
C — беззнаковый байт;
s — знаковое короткое целое (16 битов, порядок байтов определяется архитекту-
рой процессора);
S — беззнаковое короткое целое;
n — беззнаковое целое (16 битов, старшие разряды в конце);
v — беззнаковое целое (16 битов, младшие разряды в конце);
i — знаковое целое (размер и порядок байтов определяется архитектурой);
I— беззнаковое целое;
l — знаковое длинное целое (32 бита, порядок байтов определяется архитекту-
рой);
L — беззнаковое длинное целое;
N — беззнаковое длинное целое (32 бита, старшие разряды в конце);
V — беззнаковое целое (32 бита, младшие разряды в конце);
— число с плавающей точкой (зависит от архитектуры);
d — число с плавающей точкой двойной точности (зависит от архитектуры);
x — символ с нулевым кодом;
X — возврат назад на 1 байт;
@ — заполнение нулевым кодом до заданной абсолютной позиции.

Немало, не правда ли? Вот пример использования этой функции:

// Целое, целое, все остальное — символы
$bindata = pack("nvc*", 0x1234, 0x5678, 65, 66);

После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности: 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатеричной системе счисления).

unpack(string $format, string $data)

Функция unpack() выполняет действия, обратные pack() — распаковывает строку $data, пользуясь информацией о формате $format. Возвращает она ассоциативный массив, содержащий элементы распакованных данных. Строка$format задается немного в другом формате, чем в функции pack(), а именно, после каждого спецификатора (или после завершающего его числа) должно “впритык” следовать имя ключа в ассоциативном массиве. Разделяются параметры при помощи символа /. Пример:

$array=unpack("c2chars/nint", $bindata);

В результирующий массив будут записаны элементы с ключами: chars1chars2 и int. Как видим, если после спецификатора задано число, то к имени ключа будут добавлены номера 1, 2 и т. д., т. е. в массиве появятся несколько ключей, отличающихся суффиксами.
Когда бывают полезны функции pack() и unpack()? Например, вы считали участок GIF-файла, содержащий его размер в пикселах, и хотите преобразовать бинарную 32-битную ячейку памяти в формат, понятный PHP. Или, наоборот, стремитесь работать с файлами с фиксированным размером записи. В этом случае вам и пригодятся рассматриваемые функции. Вообще говоря, функции pack() и unpack() применяются сравнительно редко. Это связано с тем, что в PHP практически все действия, которые могут потребовать работы с бинарными данными (например, анализ файла с рисунком с целью определения его размера), уже реализованы в виде встроенных функций, например, с GIF-картинкой это GetImageSize().

Гру 232011
 

Типы данных языка PHP

Скалярные типы данных:
» Двоичные данные (boolean)
» Целые числа (Integer)
» Числа с плавающей точкой (Float)
» Строки (String)

Смешанные типы данных:
» Массивы (Array)
» Объекты (Object)

Специальные типы данных:
» Ресурсы (Resource)
» Пустой тип (NULL)

Псевдотипы данных:
» Смешанный (Mixed)
» Числа (Number)
» Обратного вызова (Callback)

Дополнительно:
» Манипуляции с типами данных

 Posted by at 18:39  Tagged with:
Гру 232011
 

Устанавливаем и настраиваем ProFTPD пакет на CentOS

Установим пакет ProFTPD, сервер FTP на сервер CentOS. С помощью штатного средства yum:

1) yum install -y proftpd - Устанавливаем сам ProFTPD.
2) chkconfig --levels 235 proftpd on - Делаем ProFTPD запускаемым вместе с CentOS
3) /etc/init.d/proftpd start - Запускаем ProFTPD

После установки по желанию можно подстроить конфигурационный файл под свои нужды.
По умолчанию конфигурационный файл находится /etc/proftpd.conf , настроен он на работу с авторизованными пользователями сервера через системный passwd, то есть гостевой доступ отключен.

Гру 232011
 

Установка Asterisk на CentOS
И так приступаем к сборке Asterisk 1.4

Посмотрим на релиз ядра:

# uname -r
2.6.18-53.1.4.e15
Сперва устанавливаем пакеты необходимые для работы.

yum -y install kernel-devel gcc ncurses-devel openssl-devel gcc-c++ gnutls-devel make
ln -s /usr/src/kernels/2.6.18.-53.1.4.e15-i686/ /usr/src/linux
yum -y install iftop
yum -y install libtool-ltdl libtool-ltdl-devel
yum -y install iksemel
yum -y install curl curl-devel newt newt-devel net-snmp net-snmp-libs
yum -y install glibc-devel kernel-header db-devel gcc cpp binutils bison expat-devel ncurses openssl openssl-devel
ВНИМАНИЕ: у Вас может быть другой путь к исходникам ядра

Устанавливаем Zaptel

cd /usr/src/zaptel-1.4.7.1/
make clean
make
make install
make install-udev
make config

Во время зборки может произойти ошибка пофиксить ее просто заменив в файле /usr/src/zaptel-1.4.7.1/xpp/xbus-core.c следущющую строку

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) на
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)

Запускаем zaptel

/etс/init.d/zaptel start
Устанавливаем LibPRI

cd /usr/src/libpri-1.4.1/
make clean
make
make install
Устанавливаем Asterisk

cd /usr/src/asterisk-1.4.11/
make clean
./configure
make
make install
make samples
make progdocs
make config
скачиваем с сайта http://asterisk.gnuinter.net/files/ последнюю версию asterisk-perl-0.10

cd /usr/src/asterisk-perl-0.10
perl Makefile.PL
make all
make install
Далее собираем дополнения

cd /usr/src/asterisk-addons-1.4.5
./configure
make
make install
Всё готово, просматриваем всё-ли стартует при старте системы, команда “setup”

Гру 232011
 

Ошибка Joomla версии выше 1.5.0

JFolder::create: Path not in open_basedir paths
Warning! – Failed to move file

Последствия:
Невозможность устанавливать расширения

Причина:

Собственно, вот она, функция из-за которой весь сыр-бор:

http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,references:joomla.framework:filesystem:jfolder-create/

Разработчики намеренно заблокировали возможность создания каталогов на серверах, где значение параметра ‘open_basedir’ не совпадает с корнем сайта. Зачем – пока не ясно.

Решение:

1) Способ:

В настройках Apache для хоста или в php.ini установить -open_basedir «полный_путь_к_document_root:.» – где установлена Joomla (символьные ссылки указыать не льзя, только абсолтный путь)

2) Способ:

Patch:

Зайти на ftp в папку libraries->joomla->filesystem
Скачать файл folder.php на ваш компьютер (не забудьте сделать резрвную копию этого файлы)
Открытье файл folder.php редактором и найти $obd = ini_get(’open_basedir’)
Закоментировать ее // $obd = ini_get(’open_basedir’)
Сохранить изменения и закачать файл назад на сервер.