Страница 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.
:shock: :shock: :shock:

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 = "&nbsp;&nbsp;&nbsp;Пожалуйста, введите желаемый логин и пароль.";
  $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 = "&nbsp;&nbsp;&nbsp;Получены пустые формы.";
    } elseif ( db("users", 2, $_POST['login']) == true ){
    $content = "&nbsp;&nbsp;&nbsp;Пользователь с таким логином уже существует.";
    } else {
    $dbdata[] = $_POST['login'];   //login
    $dbdata[] = $_POST['pass'];    //pass
    $dbdata[] = "user";            //status
    db("users", 0, $dbdata);
    $content = "&nbsp;&nbsp;&nbsp;Учетная запись успешно создана. Теперь вы можите авторизироваться.";
    $_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>&nbsp;\n";
echo "                  <a href='index.php'>Блог</a>&nbsp;\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
Опять траблы: выгрузил на хостиг, скрипт не стартует. Подозрение на конфликт с скриптом банера. Буду разбираться... :roll:

JavaScript - http://www.my-services.km.ua/index.php
Inline script compilation
Syntax error at line 1 while loading:
<html>
^