понедельник, 16 июня 2008 г.

MySQL - GROUP_CONCAT()

Век живи - век учись. На днях узнал о существовании функции MySQL GROUP_CONCAT(). При чем она существует еще с версии 4.1.

Почитать мануал

вторник, 10 июня 2008 г.

Переход с Windows на GNU/Linux. Часть 1 - Установка

Установка Убунту довольно проста. Есть 3 способа:

  1. Загрузиться с диска Убунту и в первом же меню выбрать "установить Убунту"

  2. Можно загрузить саму систему в режиме live-CD и потом запустить на рабочем столе ярлычок "Установить"

  3. В Убунту 8.04 появился также третий способ - установка прямо из Windows. Насколько мне известно, в этом случае не нужно выделять отдельный раздел для Линукса.


Я выбрал второй вариант, т.е. я загрузил систему в режиме live-CD и уже из самого Линукса запустил установку. Согласитесь, это впечатляет - устанавливать систему, при этом лазя в Интернете :)

Файловая система и разметка диска


Первый вопрос, который возникает у виндузятника после установки Линукса, это - "Где мои диски?". Действительно, в Линукс нет логических дисков вроде C: и D:, столь привычных пользователю Windows. В Линукс существует единый корневой каталог (/), в котором находятся абсолютно все дисковые накопители компьютера. Сопоставление физического или логического диска определенной в файловой системе папке называется монтированием.

При установке предлагается или разметить диск автоматически или же разбить его вручную. Если на Вашем винчестере есть информация, или Вы хотите оставить рабочим Ваш Windows, то конечно надо размечать его вручную. Признаюсь честно, я не очень разбираюсь в файловых системах Линукс, поэтому советовать ничего не буду. Обязательными в Линукс являются только два раздела - это основной раздел и раздел подкачки. Я сделал еще два отдельных раздела - /boot и /home, потому что прочитал в Интернете, что так лучше. /boot - это маленький раздел, в котором находится загрузчик, а /home - это т.н. домашняя папка, т.е. место, где будут храниться все Ваши документы и настройки.

NTFS разделы


Также от Windows у меня остался один большой NTFS-раздел, на который я закинул все свои файлы, фильмы, музыку и т.п. После установки я заметил, что этот раздел не монтируется сразу при старте системы, а только после того, как я выбираю в меню "Переход" '/media/pub'. (media - это папка, в которой хранятся все внешние диски типа флешек, а также NTFS-разделы. pub - это метка моего диска, которую я сделал еще в Windows). После этого раздел прекрасно работает и на чтение и на запись.

Чтобы раздел монтировался автоматически, надо запустить программу Storage Device Manager (если она не установлена установите ее через Установку/удаление программ) и задать точку монтирования '/media/pub' для данного раздела.

Сейчас моя файловая система выглядит вот так:



Это сриншот программы GParted. Ее можно установить через Установку/удаление программ. Программа напоминает Управление дисками Windows или Partition magic. Насколько я понял, она тоже умеет менять размер разделов без потери информации, как Partiton magic.

На картинке видно все мои разделы, о которых я говорил, и еще один раздел /media/vm. Этот раздел я сделал позже из пустого места, которое я оставил на всякий случай, если захочу установить WIndows. WIndows я пока устанавливать не хочу, поэтому сделал себе раздельчик и отвел его под виртуальные машины. Но об этом позже.

Все части повествования

пятница, 6 июня 2008 г.

Функции PHP-5 в PHP-4?

И снова о старых версиях PHP. Есть у нас один сервер старый, вот на нем и крутится PHP-4, и перейти на 5-й просто так нельзя, потому что куча там всего, и переписывать это нет никаких сил конечно же. Так вот, когда я там чего-то пишу, то постоянно ловлю себя на том, что хочу использовать функции из PHP-5, а нельзя. На самом деле можно, только надо их предварительно написать. Например:
[sourcecode language='php']
if (!function_exists('http_build_query'))
{
function http_build_query($params, $prefix='' , $arg_separator='&')
{
// тут пишем собственно функцию - замену http_build_query() из PHP-5
}
}
[/sourcecode]
Включаем эту функцию в инклуды и все. Этот код будет работать и в php-4 и в php-5. Это способ иногда позволяет под php-4 запустить код, написанный на php-5.

Под катом моя рекурсивная реализация http_build_query(), которая обрабатывает массивы любой степени вложенности.

среда, 4 июня 2008 г.

register_globals

Мой первый сайт на PHP я писал в стиле PHP-3, т.е. с включенным register_globals. Как это ни странно, этот сайт до сих пор работает, и даже, я смотрю, прайсы люди каждый день обновляют :)

Недавно постучался ко мне теперешний администратор сайта и спросил, почему после переноса сайта на PHP-5 у него почти все перестало работать. Конечно же потому, что в на новом хосте установлен PHP-5.2, в котором register_globals выключен, и включить его невозможно.

Конечно же, надо переписать все с использованием глобальных массивов, но я придумал такое вот быстрое решение, как запустить сайт, рассчитанный на register_globals=ON, на PHP-5.2. Надо всего лишь в начале каждого файла выполнить эти 4 строчки:
[sourcecode language='php']
foreach($_GET as $key => $value)
$$key = $value;
foreach($_POST as $key => $value)
$$key = $value;
[/sourcecode]