WedX - журнал о программировании и компьютерных науках

Создание папок и загрузка текстовых файлов на сервер (php) в Unity3D (C#)

Что у меня есть:

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

Код C#/Unity

private IEnumerator UploadUserData(string _fileName)
{        
    string _data = ("With text name " + System.DateTime.Now.ToString ());
    string _postDataURL = "https://nameofserver.com/upload.php"

    WWWForm _form = new WWWForm ();
    _form.AddField ("name", _fileName);
    _form.AddField ("data", _data);      

    UnityWebRequest _wwwRequest = UnityWebRequest.Post (_postDataURL, _form);

    yield return _wwwRequest.Send ();

    while (!_wwwRequest.isDone)
    {   yield return null;}

    if (_wwwRequest.error != null)
    {
        Debug.Log (_wwwRequest.error);
    }
    else
    {
        Debug.Log ("Uploaded");
    }

    Debug.Log (_wwwRequest.downloadHandler.text);
}

PHP на стороне сервера

 <?php    
if(isset($_POST['name']) && isset($_POST['data'])){
    file_put_contents($_POST['name'].".txt", $_POST['data']);      
    echo "uploaded.";
}else{
    echo "invalid file uploaded.";
}  

?>

Запрос

Я хочу создать систему, в которой я мог бы загружать файлы в определенные папки. Допустим, я загружаю текстовый файл (filename.txt) в папку с именем «Folder1».

Со стороны php

  • Сторона php должна создать папку «Folder1», если ее нет, затем загрузить текстовый файл «filename.txt» в эту папку.

  • если в этом каталоге существует «Папка1», то я бы хотел, чтобы php-скрипт загружал этот текстовый файл «имя файла.txt» в существующую папку «Папка1»

Со стороны Unity

Как мне указать имя папки из веб-запроса Unity?

Спасибо вам большое за ваше время. Очень ценю это.

12.02.2018

  • Это имя папки, по-видимому, будет частью вызова file_put_contents в PHP. 13.02.2018
  • @Draco18s Я ценю твой комментарий. Я совершенно новичок в php, поэтому не могли бы вы помочь мне с фрагментом кода? Спасибо! 13.02.2018
  • К сожалению, я очень мало знаю о PHP. 13.02.2018

Ответы:


1

Как я разглагольствовал на вас в IRC, вы должны избегать того, чтобы ваши пути к файлам диктовались или даже включали данные, предоставленные пользователем или даже доступным для пользователя API.

Я бы предложил что-то вроде:

// always have something define the absolute path to your application root,
// then build your paths/filenames relative to that.
// let's say this is /usr/local/myapp/config/config.php
define('APPROOT', realpath(__DIR__ . '/..')); // APPROOT == '/usr/local/myapp'
define('USERUPLOADS', APPROOT . '/user_uploads');

// userid SHOULD be something you control, not a username or anything specified
// by the user. the focus is to prevent malformed and/or malevolent user data
// from breaking out of the upload directory sandbox.
function acceptUploadedUserData($userid, $name, $data) {
    $userdir = USERUPLOADS . '/' . $userid;
    if( ! is_dir($userdir) ) {
        mkdir($userdir);
    }
    // just kinda baseline "OK"
    if( strpos('..', $name) !== false || strpos('/', $name) !== false ) {
        throw new Exception('Specified name cannot contain .. or /');
    }
    file_put_contents($userdir . '/' . $name, $data);

    // better yet don't let the user have *any* control over any part of the path
    // but also allows you to specify *any* string as the filename.
    file_put_contents($userdir . '/' . md5($name), $data);
}

acceptUploadedUserData($_SESSION['user_id'], $_POST['name'], $_POST['data']);
13.02.2018
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]