Не сохраняются файлы
#1

Вот вчера я создавал тему о том что у меня не сохраняются аккаунты, думал проблема где-то в коде. Теперь заметил что проблема не в сохранялке акков, а вообще что-то странное с файлами. Не сохраняется также информация о ганг зонах, статистиках фракций и т.д.
Одним словом что лежит в папке scriptfiles. Но помоему cfg файлы сохраняются, т.к. с файлом property.cfg в котором у меня конфиг домов все нормально и он сохраняется, а проблема только с ini файлами.
В коде думаю ошибки такой не может быть, т.к. я ничего не менял чтобы с файлами работать. С инклудами тоже все норм, т.к. вот позавчера переводил на 0.3е и инклуды заменял. В чем же тогда? Думал также из-за того что в папке scriptfiles много файлов (около 60к) но нет, почистил старые, оставил около 20к и всеравно тоже самое.

Из-за чего это может быть?
Очень надеюсь на вашу помочь.
Reply
#2

Атрибуты 777 на скриптфайлз и все вложенные файлы и папки поставьте.
Reply
#3

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Атрибуты 777 на скриптфайлз и все вложенные файлы и папки поставьте.
Я тоже на chmod думал, у меня на самой папке 755, а на ini файлах акков стоит 666. Но 666 помоему тоже дает доступ на чтение/запись? Или я ошибаюсь?
Reply
#4

Поставьте 777. Если не поможет, значит проблема в обработчике ini.
Reply
#5

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Поставьте 777. Если не поможет, значит проблема в обработчике ini.
А как мне это сделать одновременно для всех файлов?) Ведь все новые которые будут создаватся всеравно получат 666.

P.S. А ошибка в коде может вызывать подобное? Например если один из ini файлов открывается в стоке?
Reply
#6

Quote:
Originally Posted by stabker
Посмотреть сообщение
А как мне это сделать одновременно для всех файлов?) Ведь все новые которые будут создаватся всеравно получат 666.

P.S. А ошибка в коде может вызывать подобное? Например если один из ini файлов открывается в стоке?
Создаваемые файлы получают те права, которые стоят на дериктории в которой они создаются(в большинстве систем).

Любой сток - функция, так что, RTFM!
Reply
#7

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Создаваемые файлы получают те права, которые стоят на дериктории в которой они создаются(в большинстве систем).

Любой сток - функция, так что, RTFM!
Щас поставлю 777. Кстати, после этого рестарт сервера требуется?

И еще, что меня удивило! При бане по ip мне выдает (первый раз) Server: Unknown Command но ip банит. Раньше такого не было. Вот код команды

PHP код:
else if(strcmp(cmd,"/banip",true)==0)
    {
        if(
PlayerInfo[playerid][pAdmin] >= 3)
        {
        
tmp strtok(cmdtext,idx);
        if(!
strlen(tmp)) return      SendClientMessage(playerid,COLOR_WHITE,"::: Введите: /banip [IP адрес]");
        if (
dostup[playerid] != 1) return ShowPlayerDialog(playerid,2934,DIALOG_STYLE_INPUT,"Доступ администратора","Введите пароль от административной панели","Ок","Отмена");
        
format(string,sizeof(string),"banip %s",tmp);
        
SendRconCommand(string);
        
SendRconCommand("reloadbans");
        
GetPlayerName(giveplayeridgiveplayersizeof(giveplayer));
        
GetPlayerName(playeridsendernamesizeof(sendername));
        
format(string,100"%s забанил IP: %s"sendernametmp);
        
ABroadCast(COLOR_LIGHTRED,string,1);
          new 
iniFile ini_openFile("logs/logi/banip.cfg");
        
ini_setString(iniFile"IP\n",tmp);
        
ini_closeFile(iniFile);
        }

Если еще раз команду ввести то уже нету "Server: Unknown Command"
Reply
#8

pawn Код:
new iniFile = ini_openFile("logs/logi/banip.cfg");
if(iniFile)
{
 ini_setString(iniFile, "IP\n",tmp);
 ini_closeFile(iniFile);
}
Может все-таки лучше так?

Показывайте ваш обработчик ини.
Reply
#9

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
pawn Код:
new iniFile = ini_openFile("logs/logi/banip.cfg");
if(iniFile)
{
 ini_setString(iniFile, "IP\n",tmp);
 ini_closeFile(iniFile);
}
Может все-таки лучше так?

Показывайте ваш обработчик ини.
Что вы подразумеваете под "обработчик ини"? Если я правильно то это инклуд mxINI?
Reply
#10

Что самое интересное, перезагружаю сервер и все работает прекрасно минут 10-20. Потом начинается вот такая проблема. Поставил более старую версию сервера всеравно тоже самое, хотя на то время такого не было. Захожу в FTP смотрю инфу акка там вся статистика на месте, а при входе всего того что в конфиге нету! Вообще в голове не укладывается из-за чего это. Думаю на хостинге что-то, мб ли такое?
Reply
#11

Quote:
Originally Posted by stabker
Посмотреть сообщение
Что самое интересное, перезагружаю сервер и все работает прекрасно минут 10-20. Потом начинается вот такая проблема. Поставил более старую версию сервера всеравно тоже самое, хотя на то время такого не было. Захожу в FTP смотрю инфу акка там вся статистика на месте, а при входе всего того что в конфиге нету! Вообще в голове не укладывается из-за чего это. Думаю на хостинге что-то, мб ли такое?
Убери все \n в ключах.
Т.е. не так: ini_setString(iniFile, "IP\n",tmp);
а так: ini_setString(iniFile, "IP",tmp);
Reply
#12

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Убери все \n в ключах.
Т.е. не так: ini_setString(iniFile, "IP\n",tmp);
а так: ini_setString(iniFile, "IP",tmp);
У меня \n только в одном случае, здесь. Это тут не причем, просто на заметку кинул.
Как понять то что сначала после рестарта все сохраняется, а спустя некоторое время нет?
Reply
#13

Похоже что я все понял, щас буду разбиратся. Вообщем я думаю что какой-то файл по той или иной причине открывается но не закрывается, достигается лимит открытых файлов и после этого нельзя уже проводить операции с ними. Тоесть при попытке сохранения файл не открывается из-за лимита, при загрузке (входе) тоже самое.
Покрайней мере специально изменив значение INI_MAX_OPENED_FILES в mxINI на 2, я открыл 2 файла но не закрывал, получилась точно таже самая проблема что и во время игры. Скорее всего это именно оно. Это вполне объясняет то, почему файлы перестают подгружатся и сохранятся не сразу.
Reply
#14

Quote:
Originally Posted by stabker
Посмотреть сообщение
Похоже что я все понял, щас буду разбиратся. Вообщем я думаю что какой-то файл по той или иной причине открывается но не закрывается, достигается лимит открытых файлов и после этого нельзя уже проводить операции с ними. Тоесть при попытке сохранения файл не открывается из-за лимита, при загрузке (входе) тоже самое.
Покрайней мере специально изменив значение INI_MAX_OPENED_FILES в mxINI на 2, я открыл 2 файла но не закрывал, получилась точно таже самая проблема что и во время игры. Скорее всего это именно оно. Это вполне объясняет то, почему файлы перестают подгружатся и сохранятся не сразу.
У меня была точно такая-же проблема. Открывался файл, было какое-то условие и если оно выполнялось то обработка функции заканчивалась(return), а закрытие файла стояло в конце функции...
Reply
#15

Всеравно что-то не так... пересмотрел весь код, вроде как все норм. Написал себе команду чтобы в игре проверять есть ли постоянно забитые слоты для открытых файлов, показывает что нету. Вот

PHP код:
else if(strcmp(cmd"/test1"true) == 0)
    {
        new 
iniFile ini_openFile("Stabker_Steepson.ini");
        
ini_closeFile(iniFile);
        
format(string,10,"№ %d",iniFile);
        
SendClientMessage(playerid,COLOR_LIGHTRED,string);
        return 
1;
    } 
При вводе команды выдает 0. А если слоты для файлов забиты то по идеи должно ошибку выдавать число < 0, либо если не все то число > 0.
Reply
#16

Команда бред, и ни когда ни при каких обстоятельствах не покажет тебе количество открытых файлов.
Только ручками только глазками и только в редакторе!
Reply
#17

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Команда бред, и ни когда ни при каких обстоятельствах не покажет тебе количество открытых файлов.
Только ручками только глазками и только в редакторе!
Ошибаешся, она покажет сколько файлов не закрыто +1 этот который я открываю. Я специально делал вот так

PHP код:
else if(strcmp(cmd"/test"true) == 0)
    {
        
ini_openFile("One.ini");
        
ini_openFile("Two.ini");
        
ini_openFile("Three.ini");
        return 
1;
    } 
и при вводе команды /test1 получал "№ 3"

И что самое интересное, если бы были заняты все ячейки то оно не загружало бы и не сохраняло бы, а так загружает, но сохранять не хочет. А на другой версии вообще пишет что файла нету, либо не загружает.

ЗЫ mxINI помещает id файла в свободную ячейку, а т.к. скорость выполнения большая то они обычно строятся по порядку и если все без проблем то всегда будет 0
Reply
#18

А не проще найти все ini_openFile и проверить логику: вдруг где-то return происходит быстрее чем ini_closeFile?!
Reply
#19

Quote:

А как мне это сделать одновременно для всех файлов

chmod -R 777 *

А еще сменить юзера:

chown -R `whoami` *

Quote:

И что самое интересное, если бы были заняты все ячейки то оно не загружало бы и не сохраняло бы, а так загружает, но сохранять не хочет. А на другой версии вообще пишет что файла нету, либо не загружает.

PHP код:
else if(strcmp(cmd"/test1"true) == 0
    { 
        new 
iniFile ini_openFile("Stabker_Steepson.ini"); 
        
ini_closeFile(iniFile); 
        
format(string,10,"№ %d",iniFile); 
        
SendClientMessage(playerid,COLOR_LIGHTRED,string); 
        return 
1
    } 
Возвращает текущий слот открытого файла.


Мало того

PHP код:

    
for ( new slot 0slot INI_MAX_OPENED_FILESslot++ ) // перебор всех слотов ОЗУ
        
if // если уже есть такой открытый файл
        
(
                
_ini_nSlotUsed[slot] != 0
            
&&    strcmpszFilePath_ini_szFilePath[slot], false ) == 0
        
)
            return 
slot// просто вернем его слот 
Вы уверены, что этот файл уже не открыт?
Reply
#20

Список открытых файлов по каждому процессу можно посмотреть специальными утилитами. см ******
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)