Отправка данных JSON из Unity C # в PHP Script

Я пытаюсь опубликовать данные из Serializable объект в файл JSON на моем сервере. Код имеет некоторые конкретные имена переменных (извините за это). Это мой первый большой проект по написанию кода, и я только сейчас начинаю знакомиться с эффективным именованием переменных для большого проекта. Вот два фрагмента кода:

C #:

RetreatedTroopObject[] retreated = rusRetreatedTroopObjects.ToArray();
rusRetreatedTroopsJSON = JsonHelper.ToJson(retreated); //JsonHelper is a class that turns the Array into a string.
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(rusRetreatedTroopsJSON);

public IEnumerator UploadRUSRetreated(byte[] _bytes)
{
using (UnityWebRequest www = UnityWebRequest.Put("...RUS/retreatedTroops.php", _bytes)) // ... is the beginning of the file name. It is not actually like that in the C# file.
{
www.method = "POST";
www.SetRequestHeader("Content-Type", "application/json");

yield return www.SendWebRequest();

if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Success");
}
}
}

PHP:

<?php

$_POST = json_decode(file_get_contents('php://input'));

$json_string = json_encode($_POST);

$file_handle = fopen('RUSretreated.json', 'w');
fwrite($file_handle, $json_string);
fclose($file_handle);

?>

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

0

Решение

На стороне PHP у вас есть потенциальная проблема, пытаясь переписать один из встроенных в PHP Суперглобальные. Нет смысла декодировать, а затем перекодировать, и PHP также предоставляет file_put_contents() ярлык. Таким образом, ваш PHP может быть уменьшен до этого:

<?php
$json = file_get_contents("php://input");
file_put_contents($json, "RUSrereated.json");

Что касается C #, я не знаю, о чем говорю, поэтому я просто немного изменю что-то скопировано из другого ответа. Чтобы ответить на некоторые из болтовни в комментариях, вы не хотите использовать WWWForm с UnityWebRequest.Post() (если вы это сделаете, вам нужно изменить свой PHP.)

 public IEnumerator UploadRUSRetreated(byte[] _bytes)
{
var uwr = new UnityWebRequest("https://.../RUS/retreatedTroops.php", "POST");
uwr.uploadHandler = (UploadHandler)new UploadHandlerRaw(_bytes);
uwr.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
uwr.SetRequestHeader("Content-Type", "application/json");

//Send the request then wait here until it returns
yield return uwr.SendWebRequest();

if (uwr.isNetworkError)
{
Debug.Log("Error While Sending: " + uwr.error);
}
else
{
Debug.Log("Received: " + uwr.downloadHandler.text);
}
}

Я верю в ваш оригинальный код вашего URL ...RUS/retreatedTroops.php на самом деле HTTP-URL, а не «имя файла», как в комментариях?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector