Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [Тема закрыта] Установка прав на запись на GitHib

[Тема закрыта] Установка прав на запись на GitHib

Поделиться
EtyuhibosecyuПользовательwww3 мар. 201710:30#0
Кто знает, можно ли на GitHub дать папке такие права, чтобы одна программа могла читать и записывать файлы в ней, а попытка сделать это другими способами блокировалась? Например, чтобы выполнять операции с файлами в режиме выполнения могли только программы, находящиеся в этой папке? Если это реально, то каким способом?
SkybladeУчастникwww3 мар. 201712:23#1
Запускаете клиент гита от имени специального пользователя. Предварительно его создаёте.
На папку ставите права только этому пользователю.
Профит.
EtyuhibosecyuПользовательwww3 мар. 201712:25#2
А что такое клиент гита?
9К720Участникwww3 мар. 201713:00#3
Etyuhibosecyu
> можно ли на GitHub дать папке такие права чтобы одна программа могла читать и записывать файлы в ней
Что? На гитхабе можно запускать свои сервисы?

Etyuhibosecyu
> Например, чтобы выполнять операции с файлами в режиме выполнения могли только
> программы, находящиеся в этой папке?
У тебя похоже XY проблема.
Во первых почитай про линуксовые acl для файлов, во вторых расскажи какую проблему ты пытаешься решить. Судя по твоим вопросам, решение ты ищешь не там.

EtyuhibosecyuПользовательwww3 мар. 201713:56#4
Просто проигнорирую флуд.
Установил клиент, но там обычная консоль.
Я с консолями не знаком, можете написать конкретный текст, который надо написать, чтобы PHP-скрипты могли командой fopen() создать файл в папке репозитория?
nonamezeroxПостоялецwww3 мар. 201714:12#5
Etyuhibosecyu

Добрый совет - внятно опиши свою проблему и не пытайся выглядеть идиотом(другое слово тут бы подошло больше, но модераторы не дремлют.)-троллем. Здесь все хотят и готовы тебе помочь, просто ты сам или по каким-то совершенно детским причинам умалчиваешь о том, что тебе на самом деле нужно, либо не до  конца понимаешь свою проблему.

По последнему вопросу - (предполагается, что ты умеешь подключаться к github)

<?php
 exec('mkdir dir');
 exec('cd dir');
 exec('git init');
 exec('git commit');
?>
EtyuhibosecyuПользовательwww3 мар. 201714:51#6
Внятно описать? Я создаю на Unity онлайн чат (самый первый этап очень большой и сложной игры Тайна мира), который сохраняет сообщения в файле текстового типа (базы данных для меня такие сложные, что не хочется и пытаться, и кроме того, база данных кое-как тоже файл). Средствами Unity, как мне объяснили, создать файл на сервере нельзя, поэтому я сделал через WWWForm. Но при конкретном запуске сообщения не отправляются, и после запуска я вижу файлы несозданными / неизмененными, если их создать вручную.
//Код Unity
using UnityEngine;
using System.Collections;

public class Controller : MonoBehaviour {
  string username, text;
  string[] messages, names;
  int username_index;
  Vector2 ScrollPosition;
  public GUIStyle TextStyle, MessagesFieldStyle;
  float enter_time, f8_time; //F8 - клавиша для обновления чата, так как F5 обновляет всю вкладку. На сервере это пока отсутствует.
  WWWForm form_check_chat, form_check_names, form_read_chat, form_read_names, form_write_chat, form_write_names;

  // Use this for initialization
  IEnumerator Start () {
    System.Text.Encoding.GetEncoding (65001);
    username = "";
    text = "";
    System.Array.Resize (ref messages, 20);
    for (int i = 0; i <= 18; i++) {
      messages [i] = "";
    }
    messages [19] = "Vvedite vashe imya v tekstovoe pole, chtoby podklyuchitsya k chatu.";
    form_check_chat = new WWWForm ();
    form_check_chat.AddField ("command", "check_chat");
    form_check_names = new WWWForm ();
    form_check_names.AddField ("command", "check_names");
    form_read_chat = new WWWForm ();
    form_read_chat.AddField ("command", "read_chat");
    form_read_names = new WWWForm ();
    form_read_names.AddField ("command", "read_names");
    form_write_chat = new WWWForm ();
    form_write_chat.AddField ("command", "write_chat");
    form_write_names = new WWWForm ();
    form_write_names.AddField ("command", "write_names");
    WWW download = new WWW ("file_operations.php", form_read_names);
    yield return download;
    
    if (string.IsNullOrEmpty (download.error)) {
      names = download.text.Split ('\n');
      System.Array.Resize (ref names, names.Length + 1);
      username_index = names.Length - 1;
    }
    else {
      System.Array.Resize (ref names, 1);
      names [0] = "";
      username_index = 0;
    }
    ScrollPosition = new Vector2 (0f * Screen.width / 1024, 1656f * Screen.height / 768);
    enter_time = 10;
    f8_time = 0;
    Debug.developerConsoleVisible = true;
  }
  
  void OnGUI () {
    ScrollPosition = GUILayout.BeginScrollView (ScrollPosition, GUILayout.Width (256 * Screen.width / 1024),
      GUILayout.Height (736 * Screen.height / 768));
    GUILayout.TextArea (string.Join ("\n", messages), GUILayout.Width (236 * Screen.width / 1024),
      GUILayout.MinHeight (724 * Screen.height / 768), GUILayout.ExpandHeight (true));
    GUILayout.EndScrollView ();
    if (username == "") {
      text = GUILayout.TextArea (text, 26, GUILayout.Width (256 * Screen.width / 1024),
        GUILayout.Height (24 * Screen.height / 768));
    }
    else {
      text = GUILayout.TextArea (text, 257, GUILayout.Width (256 * Screen.width / 1024),
        GUILayout.Height (24 * Screen.height / 768));
    }
  }
  
  // Update is called once per frame
  void Update () {
    enter_time += Time.deltaTime;
    f8_time += Time.deltaTime;
    if (text.Contains ("\n") == true) {
      if (enter_time >= 0 && text != "" && text != "\n") {
        if (username == "") {
          string s = text.Replace (":", "").Replace ("\n", "").Replace ("\t", "");
          if (s.Length >= 3) {
            for (int i = 0; i <= names.Length - 2; i++) {
              if (names [i] == s) {
                text = text.Replace ("\n", "");
                return;
              }
            }
            Temp1 (s);
          }
          else {
            text = text.Replace ("\n", "");
          }
          return;
        }
        Reload ();
        for (int i = 0; i <= 18; i++) {
          messages [i] = messages [i + 1];
        }
        messages [19] = username + ": " + text.Replace ("\n", "");
        Temp2 ();
        text = "";
        enter_time = 0;
      }
      else {
        text = text.Replace ("\n", "");
      }
    }
    if (Input.GetKey (KeyCode.F8) == true) {
      if (username != "") {
        if (f8_time >= 1) {
          Reload ();
          f8_time = 0;
        }
      }
    }
  }

  IEnumerator OnApplicationQuit () {
    Reload ();
    for (int i = username_index; i <= names.Length - 2; i++) {
      names [i] = names [i + 1];
    }
    System.Array.Resize (ref names, names.Length - 1);
    form_write_names.AddField ("data_to_write", string.Join ("\n", names));
    WWW download = new WWW ("file_operations.php", form_write_names);
    yield return download;
  }
  
  IEnumerator Reload () {
    WWW download = new WWW ("file_operations.php", form_read_names);
    yield return download;
    
    if (string.IsNullOrEmpty (download.error)) {
      names = download.text.Split ('\n');
    }

    download = new WWW ("file_operations.php", form_read_chat);
    yield return download;
    
    if (string.IsNullOrEmpty (download.error)) {
      messages = download.text.Split ('\n');
    }
    else {
      System.Array.Resize (ref messages, 20);
      for (int i = 0; i <= 19; i++) {
        messages [i] = "";
      }
    }
  }

  IEnumerator Temp1 (string s) {
    username = s;
    names [username_index] = username;
    form_write_names.AddField ("data_to_write", string.Join ("\n", names));
    WWW download = new WWW ("file_operations.php", form_write_names);
    yield return download;
    text = "";
    Reload ();
  }
  
  IEnumerator Temp2 () {
    form_write_chat.AddField ("data_to_write", string.Join ("\n", messages));
    WWW download = new WWW ("file_operations.php", form_write_chat);
    yield return download;
  }
}



//Код PHP
<?php
define('CHAT','Chat.???');
define('NAMES','Names.???');

if ($_POST['command'] == 'check_chat'){
if (is_readable(CHAT) == true && is_writeable(CHAT) == true){
return '1';}
else{
return '0';}}

elseif ($_POST['command'] == 'check_names'){
if (is_readable(NAMES) == true && is_writeable(NAMES) == true){
return '1';}
else{
return '0';}}

elseif ($_POST['command'] == 'read_chat'){
if (is_readable(CHAT)){
$h = fopen(CHAT,'r');
$s = fread($h,filesize(CHAT));
fclose($h);
return $s;}
else{
return '';}}

elseif ($_POST['command'] == 'read_names'{
if (is_readable(NAMES)){
$h = fopen(NAMES,'r');
$s = fread($h,filesize(NAMES));
fclose($h);
return $s;}
else{
return '';}}

elseif ($_POST['command'] == 'write_chat'{
$h = fopen(CHAT,'w');
fwrite($h,$_POST['data_to_write']);
fclose($h);}

elseif ($_POST['command'] == 'write_names'{
$h = fopen(NAMES,'w');
fwrite($h,$_POST['data_to_write']);
fclose($h);}
?>
<HTML><BODY>
<FORM>
<INPUT type='hidden' name='command'>
<INPUT type='hidden' name='data_to_write'>
</FORM>
</BODY></HTML>
Ссылка на сайт.
9К720Участникwww3 мар. 201715:06#7
Etyuhibosecyu
>Код Unity
>Код PHP
При чем тут гитхаб?

Etyuhibosecyu
> Я с консолями не знаком, можете написать конкретный текст
Ты случаем не перепутал форум с платной техподдержкой?
Очень рекомендую почитать http://segfault.kiev.ua/smart-questions-ru.html
И если ты реально ждешь помощи - не вести себя как охереневший удак, которому все должны. Это твоя проблема, значит если ты с консолями не знаком - придется научиться. Тебе помогут, но делать за тебя бесплатно никто не будет.

Etyuhibosecyu
> базы данных для меня такие сложные, что не хочется и пытаться, и кроме того,
> база данных кое-как тоже файл
Там ничего сложного нет, открой книжку да почитай.
Скопипасть на крайний случай, как ты это сделал с кодом выше (я на 100% уверен что ты не очень понимаешь как он работает и почему)

Правка: 3 мар. 2017 15:13

9К720Участникwww3 мар. 201715:08#8
Etyuhibosecyu
> Но при конкретном запуске сообщения не отправляются, и после запуска я вижу
> файлы несозданными / неизмененными, если их создать вручную.
Так проблема то в чем? Сообщения не отправляются? Или отправляются но не вызывается php скрипт на принимающей стороне? Или вызывается, но данных в форме нет? Или все парсится, все данные есть, но сохранения в файл не происходит?

Где конкретно затык, разберись, потом можно будет думать.

EtyuhibosecyuПользовательwww3 мар. 201715:52#9
Хорошо, удар принят. Отвечу на него ударом.
Вы прочитали код? От начала до конца? И не просто прочитали, а вникли в каждую букву? Думаю, что нет.
Кроме того, ссылку в самом низу сообщения вы даже не различили на фоне кода? Думаю, что да.
При чем тут гитхаб?

GitHub при том, что другого по-настоящему бесплатного конструктора сайтов не существует. Про uCoz я слышал, но там - лимит 15MB, а у меня один из файлов 23.8MB.
Так проблема то в чем?

Откройте ссылку, которую я упоминал, и посмотрите на проблему вживую. Это лучше, чем поливать меня флудом.
9К720Участникwww3 мар. 201716:04#10
Etyuhibosecyu
> Хорошо, удар принят. Отвечу на него ударом.
Ты что-то попутал, мальчик.

>Вы прочитали код? От начала до конца? И не просто прочитали, а вникли в каждую букву? Думаю, что нет.
Зачем бы мне это делать? Нахер мне вникать в каждую букву твоего говнокода ? Это не нужно для решения проблемы.
Я задал вопрос в #8. Где у тебя проблема?

>GitHub при том, что другого по-настоящему бесплатного конструктора сайтов не существует.
При чем тут конструктор сайтов? Или у тебя все работает на LAMP/XAMPP и не работает на бесплатном хостинге?

Etyuhibosecyu
> Откройте ссылку, которую я упоминал, и посмотрите на проблему вживую
Да нахер бы мне это нужно. Я хотел и мог бы помочь, но не с таким подходом

Правка: 3 мар. 2017 16:05

9К720Участникwww3 мар. 201716:06#11
Почитал темы созданные автором. Тебе бы научиться вопросы задавать, книжки почитать, а не агриться когда кто-то тебя не понимает и задает вопросы.

/ Форум / Программирование игр / Сеть

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр