WWW POST дает мне внутреннюю ошибку сервера

Я использую Unity, чтобы сделать кнопку, которая делает снимок экрана, а затем загружает его на мой сервер.
Дело в том, что если я отправлю форму на сервер, WWW выдаст мне Внутреннюю ошибку сервера.
Я пробовал много примеров из интернета, и это все еще дает мне эту ошибку. Каждый раз.

Это мой код C # для загрузки скриншота:

IEnumerator uploadPhoto(){
/*yield return new WaitForEndOfFrame();
Texture2D snap = new Texture2D (webCamTexture.width, webCamTexture.height);
snap.SetPixels (webCamTexture.GetPixels ());
snap.Apply ();
webCamTexture.Stop();*/

yield return new WaitForEndOfFrame();
Texture2D snap = new Texture2D(Screen.width, Screen.height);
snap.ReadPixels(new Rect(0,0,Screen.width,Screen.height),0,0);
snap.Apply();

byte[] bytes = snap.EncodeToPNG();

WWWForm form = new WWWForm();
form.AddField("username", PlayerPrefs.GetString("username"));
form.AddBinaryData("form_file", bytes, "screenshot.png", "image/png");
//Debug.Log(System.BitConverter.ToString(bytes));

WWW connection = new WWW(url, form);
yield return connection;

if (connection.error != null)
{
Debug.Log("Server-side error: " + w.error);
}
else
{
Debug.Log(connection.text);
}
}

И это PHP-скрипт, созданный для получения этих BinaryData:

if ($_POST){
if ($_FILES["form_file"]["error"] !== UPLOAD_ERR_OK) {
die("Upload failed with error code " . $_FILES["form_file"]["error"]);
} else {
if ((($_FILES["form_file"]["type"] == "image/jpg") || ($_FILES["form_file"]["type"] == "image/jpeg") || ($_FILES["form_file"]["type"] == "image/png")) && ($_FILES["form_file"]["size"] < 20000000000)){
if ($_FILES["form_file"]["error"] > 0) {
echo "File error: " . $_FILES["form_file"]["error"] . "";
}else{

echo "Uploaded image: " . $_FILES["form_file"]["name"] . "<br>";
echo "Type: " . $_FILES["form_file"]["type"] . "<br>";
echo "Size: " . ($_FILES["form_file"]["size"] / 1024) . " Kb<br>";
echo "Temporary name: " . $_FILES["form_file"]["tmp_name"] . "<br>";

if (file_exists("upload/" . $_FILES["form_file"]["name"])){
echo $_FILES["form_file"]["name"] . " already exists. ";
}else{
move_uploaded_file($_FILES["form_file"]["tmp_name"], "upload/" . $_FILES["form_file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["form_file"]["name"];
}
}
} else{
echo "Invalid file";
}
}
} else{
echo "No POST. ";
}

Я не знаю, что с этим не так. Я пытаюсь сделать эту работу в течение 2 дней.
Я просто знаю, что ошибка на стороне сервера. Я пытался изменить разрешения скрипта на 777, безрезультатно.
Что я делаю неправильно?

3

Решение

Скопировал ваш php код на мой сервер и пришел к выводу, что проблема с вашего сервера. это не настроить правильно, или это проблема с правами доступа, что также означает, что он не настроен должным образом.

С php в вашем вопросе я получил сообщение с моего тестового сервера:

Uploaded image: screenshot.png<br>Type: image/png<br>Size: 1.494140625 Kb<br>Temporary name: C:\Windows\Temp\php1354.tmp<br>Stored in: upload/screenshot.png

Когда побежал на ваш сервер, я получил:

Server-side error: 500 Internal Server Error

PHP-код, который я использовал:

<?php
if ($_POST){
if ($_FILES["form_file"]["error"] !== UPLOAD_ERR_OK) {
die("Upload failed with error code " . $_FILES["form_file"]["error"]);
} else {
if ((($_FILES["form_file"]["type"] == "image/jpg") || ($_FILES["form_file"]["type"] == "image/jpeg") || ($_FILES["form_file"]["type"] == "image/png")) && ($_FILES["form_file"]["size"] < 20000000000)){
if ($_FILES["form_file"]["error"] > 0) {
echo "File error: " . $_FILES["form_file"]["error"] . "";
}else{

echo "Uploaded image: " . $_FILES["form_file"]["name"] . "<br>";
echo "Type: " . $_FILES["form_file"]["type"] . "<br>";
echo "Size: " . ($_FILES["form_file"]["size"] / 1024) . " Kb<br>";
echo "Temporary name: " . $_FILES["form_file"]["tmp_name"] . "<br>";

if (file_exists("upload/" . $_FILES["form_file"]["name"])){
echo $_FILES["form_file"]["name"] . " already exists. ";
}else{
move_uploaded_file($_FILES["form_file"]["tmp_name"], "upload/" . $_FILES["form_file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["form_file"]["name"];
}
}
} else{
echo "Invalid file";
}
}
} else{
echo "No POST. ";
}
?>

Когда я использовал form.AddField("username", PlayerPrefs.GetString("username")); на вашем сервере я получил Upload failed with error code, После включения form.AddBinaryData("form_file", bytes, "screenshot.png", "image/png");Я получил сообщение об ошибке 500.

Это большой признак того, что у вас нет прав на чтение и запись файла. Также изображение было написано C:\Windows\Temp\php1354 на моем сервере. Вы должны изменить свой PHP-код, чтобы писать куда-то еще вместо C:\Windows\Temp\php1354 directory, Я бы посоветовал вам связаться с вашим хостом, чтобы изменить разрешение. Это проблема с сервером. Не ошибка Unity или PHP-кода.

2

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

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

По вопросам рекламы [email protected]