[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранение данных для подключения к БД
goodguy
Всем привет.
В пхп я начинающий, да и нужен мне он по стольку-поскольку, так как я по большей мере АС3 программист, но вот появилась необходимость создать для моей игры серверную часть. Посмотрел разные уроки, в которых рекомендуют хранить данные для подключения к mysql в отдельном классе, но конкретных советов как это делать нет, в связи с чем возник такой вопрос:

А где и как лучше безопасно хранить файл, в который записаны данные для подключения к MySQL?
Чтобы кто попало не мог его найти/посмотреть и т.п. Но клиен моей игры мог делать запрос к серверу, и он сразу к ней подключался. rolleyes.gif



Спустя 15 минут, 38 секунд (24.11.2010 - 13:24) sharki написал(а):
А как он посмотрит данные PHP если при загрузке этого файла браузером он выполняется на сервере, следовательно ничего не происходит..и у него пустой экран

Спустя 7 минут, 53 секунды (24.11.2010 - 13:32) goodguy написал(а):
Ну то, что будет лишь результат выполнения кода понятно. И всё-таки, так уж ли это безопасно? Зачем тогда рекомендуют хранить эти данные вообще отдельно? В одном уроке даже рекомендовали хранить это в какой-нибудь неприметной директории поклубже, и придумать файлу навание никак не относящееся к подключению mysq?
Урок от lynda.com, не думаю, что это просто паранойя.

Если на сервер, скажем в какую-то другую директорию каким-то образом будет залит шелл, ну или еще что-то. Этот файл все равно нельзя будет посомтреть?

Спустя 6 минут, 32 секунды (24.11.2010 - 13:38) Nikitian написал(а):
Я храню в ini-файле, который веб-сервер не даёт просмотреть.
Вот код, если понравится - пользуйтесь.
INI-config


/**
* Класс хранения настроек
*
@author Nikitian
*/

class Config{
static $instance = false;
var $config=array();
var $filename='config.php';
function Config($filename=''){
if($filename=='')
$filename=$this->filename;
$this->load($filename);
}

/**
* Загрузка конфига
*
@param string $filename
*/

function load($filename=''){
//Загрузка конфига
if($filename=='')
$filename=$this->filename;
$filename=dirname(__FILE__).'/'.$filename;
if(file_exists($filename)){
$this->config=parse_ini_file($filename,true);
}
}


/**
* Получение секции как массива, либо конкретного элемента
*
@param string $section Секция
*
@param mixed $key|false Элемент. Если не указывать, то возвращает секцию массивом
*
@return array,string
*/

function get($section,$key=false){
if($key===false){
if(isset($this->config[$section]))
return$this->config[$section];
return false;
}
if(isset($this->config[$section][$key]))
return $this->config[$section][$key];
return false;
}

/**
* Установка новых параметров
*
@param string $section
*
@param string $key
*
@param string $value
*
@return string
*/

function set($section,$key,$value){
$this->config[$section][$key]=$value;
return $this->config[$section][$key];
}

/**
* Удаление элемента или целой секции
*
@param string $section Секция
*
@param string $key|false Элемент. Если не указано, то удаляется вся секция!
*
@return bool|true
*/

function del($section,$key=false){
if($key===false){
unset($this->config[$section]);
}
else{
unset($this->config[$section][$key]);
}
return true;
}

/**
* Проверка наличия элемента
*
@param string $section
*
@param string $key
*
@return bool
*/

function have($section,$key){
return isset($this->config[$section][$key]);
}

/**
* Сохранение всех изменений конфига
*/

function save(){
if(!is_array($this->config) || sizeof($this->config)==0)
$this->__construct();
$filename=dirname(__FILE__).'/'.$this->filename;
if(!file_exists($filename))die('No file config ['.$filename.']');
if(!is_writable($filename))die('No permissions for write file ['.$filename.']');
$this->write_php_ini($this->config, $filename);
}

function write_php_ini($array, $file){
$res = array();
foreach($array as $key => $val){
if(is_array($val)){
$res[] = "[$key]";
foreach($val as $skey => $sval)
$res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.addslashes($sval).'"');
}
else
$res[] = "$key = ".(is_numeric($val) ? $val : '"'.addslashes($val).'"');
}
$this->safefilerewrite($file, implode("\r\n", $res));
}
function safefilerewrite($fileName, $dataToSave){
if (file_exists($fileName) && $fp = fopen($fileName, 'w')){
fwrite($fp,';<?php /*'."\n");
$startTime = microtime();
do{
$canWrite = flock($fp, LOCK_EX);
if(!$canWrite)
usleep(round(rand(0, 100)*1000));
}
while((!$canWrite)and((microtime()-$startTime) < 1000));
if ($canWrite){
fwrite($fp, $dataToSave);
flock($fp, LOCK_UN);
}
fwrite($fp,"\n".'; */ ?>');
fclose($fp);
}
else
die('No write '.$fileName);
}
/**
* Класс хранения настроек
*
@param string $filename
*
@return Config
*/

public function getInstance($filename='') {
if (!Config::$instance) {
Config::$instance = new Config($filename);
}
return Config::$instance;
}
}


Вид файла


;<?php /*
[db]
host = "localhost"
user = "gmaps"
name = "gmaps"
pass = "*********"
tbl_projects = "projects"
tbl_tracks = "tracks"
tbl_photos = "photos"
[mail]
mailhost = "imap.yandex.ru"
mailuser = "*****@yandex.ru"
mailpass = "******"
type = "imap"
; */
?>



От шелла ничего не защитит.

Спустя 11 минут, 36 секунд (24.11.2010 - 13:50) goodguy написал(а):
Цитата
Вот код, если понравится - пользуйтесь.

Спасибо smile.gif

Цитата
От шелла ничего не защитит.

Понятно. Значит и особо париться по этому поводу смысла нет. Теперь я спокоен cool.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.