сначала схема скрипт для сайтов написан, содержимое хранится в БД (mysql) сервера (синий кружок), но хотелось бы для каждого сайта свою базу создавать, пусть пока вручную, тут главное непонятен механизм работы с несколькими базами. скрипт сайта обращается к серверу, по уникальному ключу определяем какой из сайтов, дальше надо как-то вернуть ему данные из соответствующей только ему базы.
на этапе mysql_select_db и выбирайте нужную базу. не забудьте на каждую базу по своему пользователю с разрешением только на "свою" базу.
т.е. для каждого сайта должен быть файл с настройками подключения? или по запросу клиента сервер из базы берет данные для соединения с БД для конкретного сайта, открывает соединение и т.д.? может лучше с одной базой работать, только префиксами управлять? но тут опять вопрос как это на производительности скажется при увеличении сайтов или запросов.
умный человек всегда найдет как получить доступ к соседям в системе где несколько сайтов обслуживается одним набором скриптов. об этом не стоит забывать. далее. настройки можете генерировать на лету в зависимости от хоста к которому идет обращение. утрированно: Код (Text): $secret = 'ololo'; $crc = crc32( $_SERVER['SERVER_NAME']; $db_user = $db_name = 'site_' . $crc; $db_pass = md5( $secret . $crc ); unset( $secret, $crc ); у разных серверных имен будут разные ЦИКи, будет налету генерироваться имя пользователя и имя базы и пароль. периодически меняете секретную строку и соответственно пароли пользователей БД. примерно так, но, имхо, требует ощутимой допилки =)
хе, вроде получилось с разными файлами. для каждого сайта своя директория (секретная) с настройками и своя бд, теперь можно заняться безопасностью =) всем спасибо.
а ее не особо-то и будет. апач-то от одного пользователя запущен. следовательно сосед может спокойно ходить по всем сущностям, к которым апач имеет доступ.
настройки лучше хранить в пхп, т.к. если папку забудут закрыть, то хоть не смогуть просто просмотреть логин и пароль как через ини файл
Настройки подключения к БД в файлах в отдельных директориях, одна база - один пользователь. А как хостеры поступают, когда на одной машине десятки сайтов разных пользователей, плюс десятки баз?
блин, становится страшно, похоже зря все это затеял... у меня vds, но админить я не умею, приходится доверять хостеру.
тут делов-то, курлом отправляю запрос скрипту на сервере, всячески проверяю и возвращаю xml файл, что тут ломать? зачем ломать? надо жить дружно =(
подключаю с github библиотеку для работы с curl http.php Код (PHP): require_once 'http.php'; $http= new http; /* отправляем запрос на сервер */ $page = $http->post('http://server.ru/script.php', array('api_key'=>$api_key)); /* в результате имеем xml файл, который парсим */ $xml = simplexml_load_string($page) or die("Ошибка загрузки");
на стороне сервера пока так, проверка простая, сделал для теста, дальше больше будет. Например фильтр пост переменной на всякую гадость и т.п. Код (PHP): $api_key = (isset($_POST['api_key']) && $_POST['api_key']!="") ? $_POST['api_key'] : ""; if($api_key!=""){ if(file_exists ("mysql.php")) require_once("mysql.php"); else echo "Bad mysql"; // тут уже работаем с базой } подключаем класс работы с БД, и работаем
MVC Всю реализацию не страну показывать, как пример: index.php: Код (PHP): <?php error_reporting(2047); require_once'mysqli_db.php'; $_POST['login']='"login"'; $login=db::db('db1')->escape('login:post'); echo $login; $db1=db::db('db1')->query(db::db('db1')->sql('new_sql'),null,'fetch_assoc',array('table'=>'users')); echo'<br>'; echo $db1['login']; db::db('db1')->close(); echo'<br>'; echo 'Всего запросов к базе db1: '.db::db('db1')->get_count_query(); echo'<br>'; echo 'Всего соединений с базами: '.db::get_count_connect(); ?> Если хочется можно даже так написать Код (PHP): $db=db::db('db1'); if($db) { $db1=$db->query($db->sql('new_sql'),null,'fetch_assoc',array('table'=>'users')); $db->close(); } В db статическом методе проверяется Код (PHP): return($key instanceof db)?$key:null; Но-это послужит для переопределения переменной и опять писать кучи, ну кому как удобнее, если не хотите потом недоразумения какого-нибудь пишите функцией =) Мне все равно я пишу функцией)