Вопрос ещё, вот к примеру
хост можно же указать без файла вот тут или обязательно ковырять всё переделывать чтобы с инклуда читалось?PHP код:
#define DATABASE__DEFAULT_HOST "localhost"
Вид для печати
Вопрос ещё, вот к примеру
хост можно же указать без файла вот тут или обязательно ковырять всё переделывать чтобы с инклуда читалось?PHP код:
#define DATABASE__DEFAULT_HOST "localhost"
Вот вариант для mxINI. Файл будет выглядеть так:PHP код:
#define USE_MYSQL_CONFIG_FILE//Включение работы с файлом (если закомментировать, данные будут сразу браться из макросов)
//Значения по умолчанию
#define DATABASE__DEFAULT_HOST "localhost"
#define DATABASE__DEFAULT_USER "root"
#define DATABASE__DEFAULT_NAME "sa-mp"
#define DATABASE__DEFAULT_PASSWORD ""
#if !defined USE_MYSQL_CONFIG_FILE
new const database_host[] = DATABASE__DEFAULT_HOST;
new const database_user[] = DATABASE__DEFAULT_USER;
new const database_name[] = DATABASE__DEFAULT_NAME;
new const database_pass[] = DATABASE__DEFAULT_PASSWORD;
#else // !defined USE_MYSQL_CONFIG_FILE
#define DATABASE_CONFIG_FILE_NAME "dbconf.txt"//Имя файла, в котором будут хранится данные
#define DB_CONFIG_FIELD_HOST_NAME "Host"//Имя строки, в которой будет хранится адрес хостинга
#define DB_CONFIG_FIELD_USER_NAME "User"//Имя строки, в которой будет имя пользователя
#define DB_CONFIG_FIELD_DB_NAME "Database"//Имя строки, в которой будет хранится имя БД
#define DB_CONFIG_FIELD_PASS_NAME "Password"//Имя строки, в которой будет хранится пароль от БД
new database_host[64] = DATABASE__DEFAULT_HOST;
new database_user[16] = DATABASE__DEFAULT_USER;
new database_name[32] = DATABASE__DEFAULT_NAME;
new database_pass[32] = DATABASE__DEFAULT_PASSWORD;
public OnGameModeInit()
{
new config_file_handle = ini_openFile(DATABASE_CONFIG_FILE_NAME);
if (config_file_handle == -1)
{
printf("Warning: Не удалось открыть файл \"%s\"! Применение параметров по умолчанию ...", DATABASE_CONFIG_FILE_NAME);
config_file_handle = ini_createFile (DATABASE_CONFIG_FILE_NAME);
if (config_file_handle >= 0)
{
ini_setString (config_file_handle, DB_CONFIG_FIELD_HOST_NAME, database_host);
ini_setString (config_file_handle, DB_CONFIG_FIELD_USER_NAME, database_user);
ini_setString (config_file_handle, DB_CONFIG_FIELD_DB_NAME, database_name);
ini_setString (config_file_handle, DB_CONFIG_FIELD_PASS_NAME, database_pass);
printf("Файл \"%s\" успешно создан.", DATABASE_CONFIG_FILE_NAME);
}
else printf("Не удалось создать файл \"%s\". Код ошибки: %d", DATABASE_CONFIG_FILE_NAME, config_file_handle);
}
else
{
static const read_warning_str[] =
"Warning: Длина строки %s превышает лимит в %d символов.";
new read_error;
if (ini_getString(config_file_handle, "host", database_host) > sizeof(database_host) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_HOST_NAME, sizeof(database_host) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_user) > sizeof(database_user) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_USER_NAME, sizeof(database_user) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_name) > sizeof(database_name) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_DB_NAME, sizeof(database_name) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_pass) > sizeof(database_pass) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_PASS_NAME, sizeof(database_pass) - 1), read_error = 1;
if(!read_error) printf("Данные из \"%s\" успешно загружены", DATABASE_CONFIG_FILE_NAME);
}
ini_closeFile(config_file_handle);
#if defined mysql_config__OnGameModeInit
return mysql_config__OnGameModeInit();
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
forward mysql_config__OnGameModeInit();
#define OnGameModeInit mysql_config__OnGameModeInit
#endif // !defined USE_MYSQL_CONFIG_FILE
http://i.imgur.com/LjOxYU6.png
Если файла нет, сервер сам его создаст и запишет в него значения из макросов, в которых указаны значения по умолчанию.
Кстати, говоря - велосипеды изобритаете.
Можно воспользоваться, готовой, накатыной лыжней.
тыч, тыч, тыч, тыщ по ссылке
Он читается из текстового файла, а если допустим в этом же инклуде замутить?
Почитаю потом о других лыжах, может и пригодится куда)
- - - Добавлено - - -
Попытал вариант с mxINI:
PHP код:
[00:20:42] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:20:42] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:21:38] [ERROR] CMySQLQuery::Execute[OnPlayerRegCheck(d)] - (error #2006) MySQL server has gone away
[00:21:38] [WARNING] CMySQLQuery::Execute[OnPlayerRegCheck(d)] - lost connection, reconnecting..
[00:21:38] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:21:45] [ERROR] CMySQLQuery::Execute[()] - (error #2006) MySQL server has gone away
[00:21:45] [WARNING] CMySQLQuery::Execute[()] - lost connection, reconnecting..
[00:21:45] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
Забыл сказать если это важно юзаю mysql R34PHP код:
[00:20:42] Данные из "dbconf.txt" успешно загружены
[00:20:42] Подключиться к базе не удалось
____________________________________________
Решил проблему, в не обратил внимание что в файле наименование значений от предыдущего варианта..
Только, что начал писать систему, попробовал использовать mysql_connect_file, оказывается в сурсах на GitHub она есть, ещё, ещё, ещё ещё и ещё, а вот в скомпилированом плагине (release) - ее нет. Даже если прописать:
Сервер все равно будет возвращать ошибку о не задекларированной функции:PHP код:
native MySQL:mysql_connect_file(const file_name[] = "mysql.ini");
Интересно в чем профит было в сурсах оставить функцию но из release ее удалить? (Я отпишусь на GitHub - maddinat0r/BlueG)
В итоге у меня вышло, что то такое: (не дописанный код, может быть все таки они скомпилируют плагин с данной функцией и тогда можно будет дописать систему. Ну или на крайний случаи можно собрать плагин самому)
Глобально:
Собственно, сама функция:PHP код:
const SETTING_MYSQl_NOT_FILE = 0;
const SETTING_MYSQL_FILE = 1;
static const NAME_MYSQl_CONFIG[] = !"mysql.ini";
static const MYSQL_HOST[] = !"127.0.0.1";
static const MYSQL_USER[] = !"root";
static const MYSQL_DATABASE[] = !"database";
static const MYSQL_PASSW0RD[] = !"pass";
Кому интересно - вопрос на GitHub'ePHP код:
/*
Если верить логам, то mysql_connect адекватно работает с запакованными строками:
[02:06:00] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '127.0.0.1' (10061)
*/
ConfigMySQL(status_setting = SETTING_MYSQl_NOT_FILE)
{
if(status_setting == SETTING_MYSQl_NOT_FILE)
{
static host[(sizeof(MYSQL_HOST)) * (cellbits / charbits) + 1];
static user[(sizeof(MYSQL_USER)) * (cellbits / charbits) + 1];
static database[(sizeof(MYSQL_DATABASE)) * (cellbits / charbits) + 1];
static password[(sizeof(MYSQL_PASSW0RD)) * (cellbits / charbits) + 1];
strunpack(host, MYSQL_HOST, sizeof(host)); // дабы избежать багов в printf/format
strunpack(user, MYSQL_USER, sizeof(user)); // дабы избежать багов в printf/format
strunpack(database, MYSQL_DATABASE, sizeof(database)); // дабы избежать багов в printf/format
strunpack(password, MYSQL_PASSW0RD, sizeof(password)); // дабы избежать багов в printf/format
print(#Подключения к базе данных из стандартных настроек...);
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSW0RD);
printf("Host: %s | User: %s | Database: %s | Password: %s", host, user, database, password);
}
else
{
// тут блок должен был заполнен работой с mysql_connect_file
}
}