• Страница 1 из 1
  • 1
Как создать свою базу данных в PHP uCoz?
Driver86Дата: Среда, 2012-03-14, 01:58:06 | Сообщение # 1
Нет аватара у Driver86
CyberMan
Администраторы
Сообщений: 545
Репутация: 14
Не на форуме
Используя PHP, мы можем не только выполнять некоторый код прямо на uCoz, но и сохранять результат работы на нашем сервере. Давайте рассмотрим подробнее, как.

Сразу надо отметить, что хостинг uСoz не предоставляет базы MySQL, не смотря на то, что PHP уже есть. И у этой проблемы есть два решения.

Сторонний хостинг с поддержкой MySQL и удалённого доступа к ней.

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

Из платных хостингов можно посоветовать следующие:

После получения данных к подключению MySQL можно приступать к работе с базой, используя функции mysql_connect() и т.п.

Конечно, есть нюанс. Если вас не смутит отдельная плата за PHP на сервере uCoz, и отдельная плата за MySQL на другом сервере сторонней хостинг-компании, где вы в придачу получите ещё и всё тот же PHP, тот этот вариант вам подойдёт. В иных же случаях придётся смотреть в сторону собственноручных решений.

База данных на сервере uCoz своими силами.

В папке /scripts создайте файл с именем my.db. Вставьте в него следующий код:

Code
<?php

$mydb = array();

?>

Давайте теперь напишем функции для работы с нашей "базой данных". Создайте в той же папке файл mydb.php. Этот файл будет содержать наши функции.

Функция для подключения (чтения) к базе данных:

Code
function mydb_read(){
  $mydb = false;
  if(!is_file('my.db')) return false;
  include('my.db');
  return $mydb;
}

Возвращает массив всех данных, с которым потом можно работать дальше. При ошибке возвращается FALSE. Иногда при такой ошибке стоит выполнить повторно функцию mydb_read().

Функция записи в базу данных:

Code
function mydb_write($data){
  $f = fopen( ($n=rand(0,1000000)), "w+" );
  fwrite( $f, '<?php $mydb='.var_export($data, true).'; ?>' );
  fclose($f);
  rename($n, 'my.db');
}

RENAME - это атомарная, т.е. неделимая, функция операционной системы. Благодаря этому можно значительно обезопасить запись в файл нашей базы данных. Но есть небольшой нюанс, который может привести к ошибке чтения (в функциях выше я учёл то). Когда PHP выполняет функцию rename и файл назначения уже существует, то сначала удаляется файл назначения, а затем лишь происходит rename. И это ДВЕ ОТДЕЛЬНЫЕ операции.

Подводя некоторые итоги, можно сказать, каким должен быть в целом файл mydb.php:

Code
<?php

function mydb_read(){
  $mydb = false;
  if(!is_file('my.db')) return false;
  include('my.db');
  return $mydb;
}

function mydb_write($data){
  $f = fopen( ($n=rand(0,1000000)), "w+" );
  fwrite( $f, '<?php $mydb='.var_export($db, true).'; ?>' );
  fclose($f);
  rename($n, 'my.db');
}

?>

Как использовать эти функции - думаю, разобраться не сложно. Например:

Code
<?php

include('mydb.php'); //не забываем подключать наш файл для работы с базой данных!!!
$data = mydb_read();

//записываем род занятий для пользователя с userid == 1 в новое поле

  $data[1]['rod'] = 'эльф 80 уровня';
  mydb_write($data);

//узнать род занятий пользователя с userid == 237

  echo $data[237]['rod'];

?>

В нашем примере я не использовал сериализацию: в PHP при больших массивах она работает крайне медленно. И всё-таки, для больших и сложных баз данных хранение в текстовом файле может привести к ошибкам, сбоям и ограничениям на лимиты памяти PHP uCoz, особенно если к базе будет частое обращение. В этом случае вам придётся использовать MySQL на стороннем хостинге. Если же вы очень хотите использовать MySQL, но не на стороннем хостинге, а на uCoz, могу порекомендовать txtSQL — это PHP-класс, реализующий красивый и удобный интерфейс работы с базой, этакий аналог MySQL без собственно MySQL. Или MooSQL — СУБД на PHP с намеком на MySQL-совместимый синтаксис. Эта СУБД является продолжением YNDb.



 
  • Страница 1 из 1
  • 1
Поиск: