PHP Компиляция .lua скрипта на сервере

Leatington

Известный
Автор темы
258
71
Пишу именно в этот раздел, ибо от скриптовой части (Lua) тут мало чего зависит. Боюсь, что не смогу правильно сформулировать вопрос, поэтому объясняю, что мне нужно.

В .lua скрипте есть переменная, допустим,
token. Она хранит в себе значение 12345.
С помощью HTTP запроса скрипт передаёт это значение на сервер.

А теперь самое главное: что должен сделать сервер?

Он должен прочитать имеющийся на сайте .lua скрипт, заменить там значение
token на то, которое мы получили от скрипта (это уже реализовано), скомпилировать с помощью LuaJIT и вернуть тому, кто отправил запрос.

Как вы уже поняли, это некая система автоматческого обновления. А теперь небольшие замечания:

- Стандартная система автоматического автообновления мне не подходит, можете даже не предлагать.
- Сохранять значение переменной на компьютере у пользователя - не вариант.
- Я знаю, что для реализации подобного нужен VDS/VPS сервер - он у меня есть.
- Меня интересует то, как после выполнения из PHP скрипта команды компиляции (exec) передать результат (скомпилированный файл) в ответ пользователю.
 

Hatrig

Известный
38
43
Привет, не сильно знаком конкретно с луа, но сталкивался с похожей задачей.

Можно хранить нужные тебе переменные на сервере, в бд. Луа ведь используется на компьютере пользователя, верно? При заходе в игру, можно посылать запрос на сервер с гет параметрами, а на сервере будет эдакий гейт, который будет эти гет параметры считывать, сверять с данными в бд и (допустим, если значение изменено) давать ответ, который твой луа будет считывать и в зависимости от ответа выполнять какие-то действия (я так понимаю, в твоём случае подгрузка нового луа файла). Можно в качестве ответа отдавать путь к скомпилированному файлу, а уже в луа передавать это значение в downloadUrlToFile (или какая там в луа функция для этого).

Возможно, это как-то поможет.
 

SCHWEITZER

Известный
104
71
Скорее всего тут есть ошибки, да и не одна, но за основу сойдет
PHP:
<?php

// ** other code ** //

$salt = ''; //Тут какая-либо рандомная строка для более точной уникальности в названии файла
$file_name = md5($_SERVER['REQUEST_TIME'] . $salt);

$execute = exec('luajit -b /path/to/lua/file/file.lua -o /path/to/lua/file/' . $file_name . '.luac');

$f = fopen('/path/to/lua/file/' . $file_name . '.luac', 'rb');
$file = fread($f);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=comlited_file.luac');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

echo $file;

fclose($f);

Если не работает, посмотри в сторону readfile, file_get_contents и fopen/fread
 

Frapsy

Известный
Проверенный
393
226
- Меня интересует то, как после выполнения из PHP скрипта команды компиляции (exec) передать результат (скомпилированный файл) в ответ пользователю.
Передавай его сразу в обработчике, к которому обращаешься с "токеном". Страница так или иначе не даст тебе ответ, пока не выполнит задачу(либо пока не стукнет таймаут). Либо костылем ебош в два запроса, а-ля обработчик токена ебанет ответом тебе путь к файлу, и вторым запросом из скрипта ты его подгрузишь из того самого пути. По крайней мере, только так я вижу подобное извращение обновлений
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
704
чтобы просто изменить значение переменной, тебе не нужно ничего компилировать на сервере, это лишняя работа. Ты можешь редактировать скомпилированный Luac на сервере, для этого ни дедик, ни даже платный shared хостинг не нужны.
substr_replace - бинарно-безопасная замена части строки по определенной позиции
 
  • Нравится
Реакции: atomlin и shinoa