Страница 1 из 2
Пишу блок для управления сайтом.
Добавлено: Ср мар 16, 2011 21:56
baytuch
Пишу по немного движочек на пыхчеке
. Простенький...
Решил сделать базу на файлах. Причина тому -- невозможность сохранять файлы в MySQL. Воспринимайте это как эксперемент ( база на файлах ).
Вот библиотека, которая базу обслуживает( написан только фрагмент, который обслуживает аккаунты ):
Код: Выделить всё
<?php
$cat = "data";
function db($type, $operation, $data){
if ( $type == "users" )
{
if ( $operation == 0){
$login = $data[0]; //login
$pass = $data[1]; //pass
$status = $data[2]; //status
$encpass = md5($pass);
$fh = fopen ("data/users/$login.dat", "w");
$fd = $status." ".$encpass;
fwrite($fh, $fd);
fclose($fh);
};
if ($operation == 1){
$fh = fopen ("data/users/$data.dat", "r");
$fd = fgets($fh, 1024);
fclose($fh);
$nsp = strpos($fd, " ");
$lenuser = $data;
$lenfd = strlen($fd);
$fduser = substr($fd, 0, $nsp);
$fdencpass = substr($fd, $nsp+1, $lenfd);
$ret[0] = $fduser;
$ret[1] = $fdencpass;
return $ret;
};
if ( $operation == 2){
return file_exists("data/users/$data.dat");
};
};
};
?>
Добавлено: Ср мар 16, 2011 23:34
dobs
Причина тому -- невозможность сохранять файлы в MySQL.
BLOB - "Binary Large OBject" - двоичный большой объект.
Как отмечено выше, MySQL поддерживает четыре типа BLOB:
tinyblob (0-255 байт)
blob (0-65535 байт)
mediumblob (0-16777216 байт)
longblob (0-2147483648 байт)
Обратите внимание, что могут иметься некоторые ограничения из-за размера буфера сообщения. Буфер сообщений выделяется динамически. Вы должны знать, что 'max_allowed_packet' устанавливается на сервере и клиенте. По умолчанию, это - 64КБ для сервера и 512КБ для клиента.
Вы можете сменить размер буфера, запустив mysqld с опцией -O. Но помните, что это количество памяти будет выделяться каждому потоку!
http://habrahabr.ru/blogs/mysql/45966/
С файлами будет много гемора если сделать тучу запросов с разных компов, например кто то будет читать а кто то писать и в итоге может выйти fali...
Добавлено: Ср мар 16, 2011 23:44
baytuch
Чесно, не видел ни одного подобного решения...
Над в мануалах по искать...
Добавлено: Ср мар 16, 2011 23:46
baytuch
Будем что-то решать...
Добавлено: Чт мар 17, 2011 00:17
baytuch
А можно спросить на счет cookie: дело в том, что я там сохраняю индекс пользователя, то есть, посте авторизации там сохраняется сам факт авторизации, а так же его логин... Много сейчас пользователей отключают эту функцию в браузере?
Добавлено: Чт мар 17, 2011 00:39
dobs
Ну насчет отключают не вкурсах, но такое лучше на сессиях сделать
http://www.softtime.ru/bookphp/gl8_1.php
Добавлено: Чт мар 17, 2011 10:05
ArniXXX
Тот путь который ты выбрал никуда тебя не приведет.
1. В базе можно хранить файлы.
2. Это немного накладно потому в базе хранят только айди файла, сам файл в папке.
Добавлено: Чт мар 17, 2011 11:30
baytuch
Я просто подумал: а ведь сами сессии используют механизм cookie ( когда она доступна ). Просто, так не надо писать дополнительных модулей, а просто добавил в начале кода "session_start()" и радуешься.
Пока ток изучаю эт язык, так шо хочется попробовать "ручками" сделать. Хотя так проще, конечно.
Вот, триггер заделал на ней:
Код: Выделить всё
//Создание учетной записи пользователя
if ( $_SERVER['QUERY_STRING'] == "reg" and $t_adm == false ){
$content = " Пожалуйста, введите желаемый логин и пароль.";
$a = true;
$_SESSION['t_usr'] = true;
};
if ( $_SERVER['QUERY_STRING'] == "login" and $_SESSION['t_usr'] == true ){
$a = true;
if ( $_POST['login'] == "" or $_POST['pass'] == "" ){
$content = " Получены пустые формы.";
} elseif ( db("users", 2, $_POST['login']) == true ){
$content = " Пользователь с таким логином уже существует.";
} else {
$dbdata[] = $_POST['login']; //login
$dbdata[] = $_POST['pass']; //pass
$dbdata[] = "user"; //status
db("users", 0, $dbdata);
$content = " Учетная запись успешно создана. Теперь вы можите авторизироваться.";
$_SESSION['t_usr'] = false;
};
};
MySQL -- штука полезная. Поскольку этот проект, по моему, поддерживается сообществом програисто. то, думаю. возможно все... Но, пока на файлах... ( еще над в мануалах пориться )
Добавлено: Чт мар 17, 2011 14:30
dobs
Мда как то все "сложно" сделано, не проще ли хранить логин авторизованного юзерав сессии, чем писать аля $_SESSION['t_usr'] = false;
и зачем потом еще в массиве $dbdata хранить это все...
Добавлено: Чт мар 17, 2011 14:47
baytuch
Библиотека db("users", 0, $dbdata); работает с базой на файлах...
Массив создается для отправки в функцию, создания файла с учетной записью пользователя.
dobs писал(а):
Мда как то все "сложно" сделано, не проще ли хранить логин авторизованного юзерав сессии, чем писать аля $_SESSION['t_usr']
Это триггер для работы сценария...
Я так вижу
Добавлено: Чт мар 17, 2011 18:49
baytuch
Уже даже мона кое че публиковать с админки... Пока колупаюсь с мордой для фото галереи...
Добавлено: Чт мар 17, 2011 21:21
baytuch
Ребята, у меня тут небольшой конфликт. Конфликт устранил, но не могу понять причину конфликта. Пожалуйста, подскажите в чем он. Привожу фрагменты кода:
фрагмент морды админки:
Код: Выделить всё
function admin_panel($content, $mode){
echo " <td valign='top'>\n";
echo " <table border='0' cellpadding='0' cellspacing='0' class='content' id='content'>\n";
echo " <tr>\n";
echo " <td class='admin' id='admin'>\n";
echo " <center>\n";
echo " <a href='index.php'>Текстовый контент</a> \n";
echo " <a href='index.php'>Блог</a> \n";
Тоже фрагмент с того же документа ( чуть ниже ) ( источник конфликта:
Код: Выделить всё
echo " <select name='content'>\n"; <----------
echo " <option value=''>выберите контент</option>\n";
echo " <option value='1'>Мои службы</option>\n";
echo " <option value='2'>Проекты</option>\n";
echo " <option value='3'>О сайте</option>\n";
echo " <option value='4'>Контакты</option>\n";
echo " <option value='5'>Главная</option>\n";
echo " <option value='6'>text</option>\n";
echo " <option value='7'>text</option>\n";
echo " </select>\n";
и компонент, где проявилась проблема
Код: Выделить всё
//Модуль работы с оформлением
[code]
var x_client=document.body.clientWidth;
var y_client=document.body.clientHeight;
var work_Width=x_client-x_client/15;
var content_width=work_Width-400;
var x_line=work_Width;
var y_line=y_client;
function height(){
return document.body.scrollHeight;
}
function display(){
document.all.line.style.height=height();
document.all.line.style.top=0;
document.all.line.style.left=x_line;
document.all.panel.style.width=work_Width;
document.all.main_menu.style.width=work_Width;
document.all.podval.style.width=work_Width;
document.all.content.style.width=content_width;
}
display();
display();
Траблы в опере и мозиле. Только переименовую выделенный фрагмент скажим в text всю прекрасно работает...
JavaScript -
http://www.my-server.km.ua/works/my_pho ... .php?admin
Uncaught exception: TypeError: Cannot convert 'document.all.content.style' to object
Error thrown at line 23, column 19 in display() in
http://www.my-server.km.ua/works/my_pho ... program.js:
document.all.content.style.width=content_width;
called from line 26, column 0 in
http://www.my-server.km.ua/works/my_pho ... program.js:
display();
Вот...
Добавлено: Чт мар 17, 2011 21:43
dobs
никогда не юзал document.all возможно чет не так делаете, попробуйте jquery в нем все по проще...
Добавлено: Чт мар 17, 2011 21:59
baytuch
Переименовал... Работает...
<select name='n_pos'>\n";
По повуду jquery, еще не изучал, но неоднократно слышал... Почитаем... Спасибо...
Добавлено: Пт мар 18, 2011 11:59
baytuch
Опять траблы: выгрузил на хостиг, скрипт не стартует. Подозрение на конфликт с скриптом банера. Буду разбираться...
JavaScript -
http://www.my-services.km.ua/index.php
Inline script compilation
Syntax error at line 1 while loading:
<html>
^