01 Июля 2008 17:01

PHP 5 + Oracle Client 11 на RHEL 4

Про работу PHP Oracle Linux

Выстраданное долгими часами на работе практическое пособие по установке

PHP 5 + Oracle Instant Client 11 на RedHat Enterprise Linux 4

Очень удобно что много библиотек для php представлены в виде rpm на болванке, это немного упростило задачу. Итак вашему вниманию инструкция из 12 пунктов:

0. Изначально имеем установленный RHEL4 с предустановленным PHP 4.3.9 и MySQL 4.1

Сразу хочется оговориться насчет путей, они все спецефичны для RHEL 4 и на других системах и версиях могут быть другими.

1. Ставим Oracle Client

В моем случае это 11 версия, тк 10 не пошло. Благо клиент доступен в rpm. В общем ставим

oracle-instantclient-basic-11.1.0.1-1.i386.rpm
oracle-instantclient-devel-11.1.0.1-1.i386.rpm

Эти rpm доступны на официальном сайте оракла, но требуется регистрация для скачивания, но можно поискать на filesearch и может что найдется

Для меня нашлось на http://eduunix.ccut.edu.cn/index/database/Oracle%20Instant%20Client/ но качалось очень медленно.

Читать дальше...

25 Апреля 2008 18:59

Пятничным утром...

Юмор Про работу

углядел на одной из стен следующее изречение:

Подчинённый, перед лицом начальствующим, должен иметь вид лихой и придурковатый, дабы разумением своим не смущать начальство! Указ Петра I от 09.12.1709

И картинка вот такая по теме нашлась в инете:

27 Февраля 2008 17:55

Продвинутый SELECT

Про работу JavaScript

Встала проблема: надо на странице сделать select-box с множественным выбором, но такой чтоб глупый юзверь выбирал не удерживая ctrl, а ставил галочки по привычке, потому что объяснить ему как по-другому нереально...

Решений у проблемы как всегда два: простое, вместо селекта на страничке вывалить галки в div-е, но переделав дофига всего, и сложное, но интересное - javascript-ом схватить select и переделать его в див с галками, именно об этом этот пост.

Итак идея реализации: чтоб было не так все просто надо дать возможность переделать все стандартные селекты в продвинутые, точнее не все а только те, у которых специальный css-класс. И не просто в селекты с галаками, а если multiple, то с галками, если нет - то radio. Для этого идем по всем селектам в документе, смотрим на класс, если подходит, то создаем див с бродером как у селекта и такогоже размера, с полосами прокрутки. Внуть него надо запихать дивы с checkbox или radio со значениями и подписями к ним, взятыми из опций селекта. Чтоб была только вертикальная прокрутка запонять будем дивами, у которых overflow буджет none.

После почти всего дня мучений получился вот такой код:

function convertSelects()
{
var selects = document.getElementsByTagName('SELECT');
for(var s=0; s<selects.length; s++){ select = selects[s]; if(select.className == 'advselect' && select.size) convertSelect(select); }
}

function convertSelect(obj)
{
var div = document.createElement("div");
var id = obj.id;
div.style.backgroundColor = 'white';
div.style.color = 'black';
div.style.borderStyle = 'inset';
div.style.borderWidth = 2;
div.style.textAlign = 'left';
div.className = 'advselect';
div.style.overflow = 'auto';
div.style.width = obj.style.width;
div.style.height = obj.style.height;

var name = obj.name;
for(var i=0; i<obj.options.length; i++)
{
var opt = obj.options[i];
if(obj.multiple) div.innerHTML += '<div style="overflow: hidden;" title="'+opt.text+'"><nobr><input type="checkbox" name="'+name+'[]" value="'+opt.value+'"'+(opt.selected?' checked':'')+'> ' + opt.text + '</nobr></div>';
else div.innerHTML += '<div style="overflow: hidden;" title="'+opt.text+'"><nobr><input type="radio" name="'+name+'" value="'+opt.value+'"'+(opt.selected?' checked':'')+'> ' + opt.text + '</nobr></div>';
}

obj.parentNode.insertBefore(div, obj);
obj.parentNode.removeChild(obj);
div.setAttribute('id', id);
}

Теперь как этим пользоваться (из комментария к оригинальному файлу advselect.js).

  1. Автоматическое преобразование select-box к продвинутым. В боди добавляем хэндлер OnLoad следующего содержания:
    <body OnLoad="conversSelects();">
    Для того чтобы быть преобразованным, select box должен иметь класс advselect и у него должны присутствовать стили выстоты и ширины, а также аттрибут size больший 1, например
    <select multiple name="rayon_id" id="rayon_id" style="width: 130px; height: 200px;" size=10 class=advselect>
  2. Ручное преобразование: после каждого селекта, который должен быть преобразован добавляем вызов функции-конвертора, параметр которой - объект select-box, который должен быть преобразован. Например
    <select multiple name="rayon_id" id="rayon_id" style="width: 130px; height: 200px;" size=10 class=advselect>
    ...
    </select>
    <script>convertSelect(document.getElementById('rayon_id'));</script>

В результате получам вот такие селект-боксы:

 

Замечания. Имена селектов передаются в создаваемый check и radio элементы, в случае checkbox имя получается вида name[] т.е. массив, который более удобен для обработки на сервере. Аттрибут id от селекта передается в id созданного дива. Для корректного преобразования селекта к продвинутому, у оригинального должны быть прописаны стили ширины и высоты.

Кустомизация. Для изменения внешнего вида можно изменить в CSS класс div.advselect (общий вид) и div.advselect div (облик элементов списка).

И на последок еще одно важное замечание. Если форма в которой живет селект-бокс некорректно расположена в документе, например

<table ...>
<form ...>
<tr>
<td>
...

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

Кому интересно пользуйтесь, но не забывайте плз давать ссылку на мой сайт

27 Декабря 2007 14:43

Во какая шапка!

Про работу Креатифф Photoshop

Вот по случаю нового года начинается всякое новогоднее рисование. Это многоцелевая шапка-не-ушанка, но привешивается практически везде, где захочется.

Кому интересно, PSD можно скачать здесь.

ЗЫ: с наступающим Новым Годом 

23 Декабря 2007 21:26

Осваиваем мыло в UTF-8

Про работу PHP

Точнее не осваиваем а уже освоено. Изначальная трабла: если слать мыло в любом чарсете и впихивать в сабжект и from корректно закодированные строки, то почтовик все равно выводит караказяблы. Изучение сырцов писем и чтение гуглев принесло решение проблемы. Да еще и чтоб соответствовать моде теперь мыло расходится в UTF-8.

Вот кодина которая корректно шлет мыло в UTF-8 и читается почтовиками нормально (проверено на mozilla firefox):

$from = "=?UTF-8?B?".base64_encode(iconv('windows-1251', 'UTF-8', $name))."?= <$email>";
$subj = "=?UTF-8?B?".base64_encode(iconv('windows-1251', 'UTF-8', $subj))."?=";
$text = iconv('windows-1251', 'UTF-8', $text);
mail($to, $subj, $text, "From: $from\r\nReply-To: $email\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n");

Особенность состоит в том, что для корректной читабельности в почтовиках приходится добавлять указание на кодировку (=?UTF-8?B? ... ?=) и base64_encode -- Encodes data with MIME base64. Теперь мыло расходится в UTF-8 и читается отлично 

Фильтр