myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> Скрипты И Совметимость Операционных Систем, Рабочие файлы скриптов в Unix системах

mariner
сообщение 4.11.2008, 22:03
Сообщение #1


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




Собственно перешел я на Linux и послал венды куда-подальше. Ну и вылез вопросец со скриптами, ибо пути в Unix системах немного отличаются от аналогичных в Windows. В результате был загажен немного рут. Но дело даже не в этом. Некоторые скрипты, к примеру RSS лент, отлично пашут и не гадят своими файлами. Поэтому предлагаю нашим разработчикам подумать над этой проблемой и выбрать отптимальный код для совместимости операционок.

2 Setuper: Илья, тестовую площадку подготовлю, если что big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 10.11.2008, 23:20
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Проблема совместимости некоторых скриптов заключается в путях к файлам и директориям.

Windows вообще говоря использует в путях как прямые (/), так и обратные слеши (\).
Unix'ы в путях используют только прямые слеши (/).

Отсюда возникает проблема совместимости скриптов на Windows и Unix системах.


Предлагаю эту проблему совместимости решать следующим образом:

В путях писать только прямые слеши:
Например, для API 2:
Код
dofile(Core.GetPtokaXPath().."scripts/file.lua")
Для API 1:
Код
dofile(frmHub:GetPtokaXLocation().."scripts/file.lua")

(функции Core.GetPtokaXPath() и frmHub:GetPtokaXLocation() возвращают пути с прямыми слешами)

При использовании той, или иной консольной команды (mkdir, rmdir и тд.) путь в параметре этой команды нужно заключать в двойные кавычки, тогда путь может содержать только прямые слешы, что как раз будет соответствовать предложенному принципу совместимости.

Предлагаю разработчикам учесть этот факт и писать универсальные скрипты, совместимые с обеими системами windows и unix!!!


Самый универсальный, кроссплатформенный и кроссхабный метод определения абсолютных путей:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"


Спасибо сказали:
Go to the top of the page
+Quote Post
mariner
сообщение 11.11.2008, 0:29
Сообщение #3


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




грасиас
Go to the top of the page
+Quote Post
Setuper
сообщение 14.12.2008, 21:18
Сообщение #4


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Я тут ещё раз проверил... Толи глики у меня какие-то, то ли не знаю...

Проверти кто-нибудь создаёт ли данный скрипт папку test folder и вложенную в неё папку test folder2 ???
Код
function OnStartup()
  sPath = Core.GetPtokaXPath().."scripts/"
  os.execute("md \""..sPath.."test folder/test folder2\"")
end
function Main()
  sPath = frmHub:GetPtokaXLocation().."scripts/"
  os.execute("md \""..sPath.."test folder/test folder2\"")
end


У меня создаёт, хотя из моего топика выше у меня раньше не создавал...
Если это так, то можно писать везде только прямые слеши!
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 14.12.2008, 21:26
Сообщение #5


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




API2 - Да.
API1 - Нет.
upd. Cорри, API1 при запущенном хабе, тоже.
Go to the top of the page
+Quote Post
Setuper
сообщение 14.12.2008, 21:34
Сообщение #6


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Спасибо, поправил мой пост. Для совместимости с обеими системами и win и unix достаточно писать пути используя функции Core.GetPtokaXPath() для API 2 и frmHub:GetPtokaXLocation() для API 1, и во всех путях следует писать только прямые слеши.

Соответственно для создания папок в аргументе команды пишутся также прямые слеши))

В команде удаления папки или файла в системе windows писать нужно обратные слеши!
Go to the top of the page
+Quote Post
Wariner
сообщение 16.2.2009, 21:05
Сообщение #7


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Снова поднимаю эту тему. По словам одного из пользователя линукса и моего бота на линуксе некорректно работают некоторые функции, конкретно работы с файлами.
В приветственном соообщении каждая строчка текста разделяется пустой строчкой! Вот функции
Код
function ShowHalloMessage(tUser)              
    Core.GetUserAllData(tUser)
    local sProfile = ""
    if CheckOwner(tUser) then
        sProfile = "Owner"
    else    
        sProfile = tProfiles[tUser.iProfile][4]
    end    
    local HalloText = loadtextfiles(sText.."hallo.txt");
    HalloText = string.gsub(HalloText, "%[USER%]", tUser.sNick)
    HalloText = string.gsub(HalloText, "%[IP%]", tUser.sIP)
    HalloText = string.gsub(HalloText, "%[HUB%]", SetMan.GetString(0))
    HalloText = string.gsub(HalloText, "%[BOTNAME%]", sBot)
    HalloText = string.gsub(HalloText, "%[USERA%]", Core.GetUsersCount()+1)
    HalloText = string.gsub(HalloText, "%[VERSION%]", "Ptokax "..Core.Version)
    HalloText = string.gsub(HalloText, "%[ACTUALPEAK%]", Core.GetActualUsersPeak())
    HalloText = string.gsub(HalloText, "%[MAXPEAK%]", tStat.MaxUsers)
    HalloText = string.gsub(HalloText, "%[MAXSHARA%]", GetNormalShare(tStat.MaxShara))
    HalloText = string.gsub(HalloText, "%[SHARKA%]", GetNormalShare(Core.GetCurrentSharedSize()+tUser.iShareSize))
    HalloText = string.gsub(HalloText, "%[SHARE%]", GetNormalShare(tUser.iShareSize))
    HalloText = string.gsub(HalloText, "%[MSGS%]", tUsers[tUser.sIP].Msg)
    HalloText = string.gsub(HalloText, "%[TIMES%]", GetNormalTime(tUsers[tUser.sIP].Time,1))
    HalloText = string.gsub(HalloText, "%[ROLE%]", sProfile)
    HalloText = string.gsub(HalloText, "%[SHARARECORD%]", GetNormalShare(tStat.MaxShara))
    HalloText = string.gsub(HalloText, "%[USERRECORD%]", tStat.MaxUsers)
    Core.SendToNick(tUser.sNick,HalloText)    
end


Код
function loadtextfiles(filename)
    local message = ""
    local f = io.open( filename, "r" )
    if f then
        message=f:read("*all")
        message=string.gsub(message,"|","")
        message=string.gsub(message,"\n","\r\n")
        f:close()
    end
    return message
end



upd: проблема решилась удалением строки:
Код
message=string.gsub(message,"\n","\r\n")


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 16.2.2009, 23:44
Сообщение #8


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Вообще говоря \r - это возврат каретки, \n - это перенос на следующую строку. Смысл заменять перенос строки на возврат каретки с переносом строки не ясен. Это же лишнее действие. Замена вертикальной черты тоже не совсем понятна, так как черту надо заменять на код этой черты.

Код
function loadtextfiles(filename)
    local f,message = io.open(filename)
    if f then
        message=f:read"*a"
        message=message:gsub("|","&#*124;")
        f:flush()
        f:close()
    end
    return message
end

* между &# и 124; удалить!
Go to the top of the page
+Quote Post
PomanoB
сообщение 17.2.2009, 19:42
Сообщение #9


AmxModx Scripter
*****

Группа: Пользователи
Сообщений: 302
Регистрация: 2.12.2008
Из: Королев
Пользователь №: 1 283
Спасибо сказали: 127 раз




В Unix для разделения строк используется \n а в Windows \r\n, отсюда и лишние пустые строки
Go to the top of the page
+Quote Post
Setuper
сообщение 17.2.2009, 20:10
Сообщение #10


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




в виндовсе возврат каретки вовсе необязательное действие, оно обязательно только в случае работы с окнами.
Go to the top of the page
+Quote Post
Sekas
сообщение 22.2.2009, 10:13
Сообщение #11


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 22.2.2009
Пользователь №: 2 310
Спасибо сказали: 0 раз




Приветствую а как быть простому пользователю, который не разбирается в коде для определения совместим тот или иной плагин под Linux или нет? Пересматривать каждую строчку кода скриптов или ставить каждый плагин для проверки мягко говоря не очень удобный вариант. Может быть имеется список совместимых плагинов? Если его нету, то можно его создать совместными усилиями. Думаю многим это понадобится и избавит от необходимости уточнять этот вопрос в топике каждого плагина по отдельности.
Go to the top of the page
+Quote Post
Wariner
сообщение 22.2.2009, 10:16
Сообщение #12


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




В начале темы ясно написано что различия только в путях, список чего ты хочешь создавать?!
Go to the top of the page
+Quote Post
Sekas
сообщение 22.2.2009, 10:20
Сообщение #13


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 22.2.2009
Пользователь №: 2 310
Спасибо сказали: 0 раз




Цитата
В начале темы ясно написано что различия только в путях, список чего ты хочешь создавать?!

Как я понял из вышенаписанного, бывают случаи когда различие не только в путях. Список плагинов совместимых с *NIX системами из "коробки", в которые не надо лезть ручками и допиливать самому даже пускай такую мелочь, как пути.

Цитата
В Unix для разделения строк используется \n а в Windows \r\n, отсюда и лишние пустые строки
Go to the top of the page
+Quote Post
Setuper
сообщение 22.2.2009, 12:19
Сообщение #14


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ну это уже зависит от разработчиков скриптов. Я приверженец написания универсальных, кросс платформенных скриптов. Однако некоторые скриптописатели принципиально не хотят писать универсальные скрипты, мотивируя это усложнением читаемости кода.
Go to the top of the page
+Quote Post
valdis73
сообщение 30.3.2009, 12:01
Сообщение #15


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 4.1.2009
Пользователь №: 1 670
Спасибо сказали: 6 раз




Единственное непонял исправлять слеши во всём скрипте и нужно ли переписывать всю базу. Скажем на примере гостевой книги покажи что нужно исправить плиз
Причина редактирования: Не надо постить такой огромный код!!! Прикрепляй файлом!!!

Прикрепленные файлы
Прикрепленный файл  GuestBook_newapi.lua ( 9.19 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
+Quote Post
Wariner
сообщение 30.3.2009, 12:38
Сообщение #16


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




заменить надо следующие строчки:
Код
path = Core.GetPtokaXPath().."scripts/dats" -- имя папки

gbfile=path.."/guestbook.dat" --имя файлв

nfile=path.."/news.dat" -- директория для файла

rfile=path.."/requests.dat" -- директория для файла

os.execute("mkdir ".."\""..path.."\"")
Go to the top of the page
+Quote Post
valdis73
сообщение 30.3.2009, 12:42
Сообщение #17


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 4.1.2009
Пользователь №: 1 670
Спасибо сказали: 6 раз




Спасибо огроменное 2 месяца не мог добиться ответа на этот вопрос на куче сайтов

Но все равно не помогло....

Тупо так же выдаёт в чат !addrequest hgjkg

может и в базе нужно чего то менять?
Go to the top of the page
+Quote Post
Setuper
сообщение 26.5.2009, 17:39
Сообщение #18


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Свистопляска с кроссплатформенностью мультистрок.

Переводы строк для различных платформ:
\r\n для DOS формата,
\n - для UNIX формата,
\r - для Mac формата.

Для совместимости скриптов в UNIX и WINDOWS системах предлагается использовать перенос \n.

Кроссплатформенной альтернативой является lua мультистрока:
Код
str = [[line 1
line 2]]


Тёмной лошадкой является следующий метод перевода строки:
Код
str = "line1\
line2"
Go to the top of the page
+Quote Post
Setuper
сообщение 3.6.2009, 12:43
Сообщение #19


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Универсальный путь к запущеному скрипту:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"


Переменная sMainPath содержит этот самый путь, переменная sMainSlash содержит слеш, который используется системой для разделения директорий в путях.

Данный lua код будет работать везде где есть lua язык, вне зависимости от типа ОС и типа хаба!

Протестировано на следующих платформах:

  • PtokaX
  • PtokaX (Linux)
  • HexHub
  • VerliHub
  • чистый язык LUA


Пример (подключение файлов):
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"

dofile(sMainPath..("myfolder1/myfolder2/myfile.lua"):gsub('/', sMainSlash))

Замена слеша сделана и расчёта приведения пути к виду с одинаковыми слешами - слешами, которые использует ОС.
Go to the top of the page
+Quote Post
alex82
сообщение 3.6.2009, 14:37
Сообщение #20


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Setuper @ 3.6.2009, 12:43) *
Универсальный путь к запущеному скрипту:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"
Думаю, будет не лишним добавить, что если данный способ используется не в "корневом" скрипте, а в скрипте, подгруженном при помощи dofile(), то необходимо увеличить значение аргумента функции debug.getinfo().


Спасибо сказали:
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new Topic has attachmentsСкрипты API 2. Защита хаба. Базы TTH
Скрипты защиты от спама, флуда, рекламы, порно
40 GULAM33 43 813 24.5.2015, 16:55 Посл. сообщение: Артём
No New Posts Новые скрипты для птохи - новые вариации на старые темы
4 baltica 8 570 21.5.2013, 5:26 Посл. сообщение: Ksan
No New Posts Перепутал скрипты
Поток сознания с комментариями
5 GULAM33 7 164 20.2.2013, 19:11 Посл. сообщение: Alexey
No New Posts Какие скрипты обычно используют при полноценном хаб-сервере?
6 Yamakasi 10 175 7.2.2013, 17:04 Посл. сообщение: Yamakasi
No New Posts скрипты для птохи 0.4.2.0
1 Mishari 5 770 6.7.2012, 13:07 Посл. сообщение: mariner
No new ВАЖНО: Topic has attachmentsЗапросы на скрипты
35 Дениска 44 726 29.5.2012, 9:07 Посл. сообщение: Артём
No new Topic has attachmentsКак включать скрипты в PtokaX 0.4.1.1
21 pleomax 32 035 13.5.2012, 22:44 Посл. сообщение: Slavich
No New Posts СКРИПТЫ
3 alex2014 6 531 26.1.2012, 17:23 Посл. сообщение: Ameet
No New Posts Нужны скрипты
Искал искал но не нашол
1 Ferb 9 204 28.5.2011, 8:38 Посл. сообщение: Артём
No New Posts Незапускаются скрипты в Ptokax
7 Br@yZeR 11 725 3.5.2011, 9:25 Посл. сообщение: Strannik
No New Posts Сколько места нужно на диске чтобы запустить скрипты ?
1 Br@yZeR 5 752 2.5.2011, 18:59 Посл. сообщение: Ksan
No New Posts От: командные скрипты для установки сервиса RusHub
От темы с ID: 4075
0 Midgard 5 218 3.3.2011, 2:00 Посл. сообщение: Midgard
No New Posts От: Запросы на скрипты
От темы с ID: 1843
2 Alexey 5 683 13.2.2011, 21:13 Посл. сообщение: Alexey
No New Posts Как установить скрипты?=)
Script
9 Lamo 15 238 25.1.2011, 13:52 Посл. сообщение: deposit
No New Posts От: Запросы на скрипты
От темы с ID: 1843
1 Error404 5 235 3.12.2010, 0:55 Посл. сообщение: Saymon21

 



RSS Сейчас: 28.3.2024, 19:32