Я пытаюсь опубликовать данные из 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 на моем сервере?
На стороне 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, а не «имя файла», как в комментариях?
Других решений пока нет …