Elharter Geschrieben 21. Februar 2019 Melden Share Geschrieben 21. Februar 2019 Hallo liebe Freunde, ich habe ein seltsames Phänomen das ich nicht eingrenzen kann. Auf C# Seite ein einfaches Skript zum hochladen von Binärdateien: IEnumerator UploadFileCo(string uploadURL, string trackname) { //Debug.Log("uploadurl:"+uploadURL); //Debug.Log("trackname:"+trackname); //wait for 2 seconds to avoid error 429 to many requests on php side yield return StartCoroutine(Wait(6.0f)); WWW localFile = new WWW(trackname); yield return localFile; WWWForm postForm = new WWWForm(); postForm.AddBinaryData("file", localFile.bytes, trackname); WWW upload = new WWW(uploadURL, postForm); yield return upload; if (upload.error == null) { Debug.Log(upload.text); //Debug.Log("upload error null"); } else { Debug.Log(upload.text); Debug.Log("Error during upload: " + upload.error +" at " + trackname + " and url was:" + uploadURL); } } IEnumerator Wait(float seconds) { yield return new WaitForSeconds(seconds); } Auf der PHP Seite genauso einfach: <?php require_once ("mysqlconnect.php"); $thefile = $_FILES['file']; if(!empty($thefile)) { $uploadfile = '/blabla/tracks/' . $_FILES['file']['name']; $filename = $_FILES["file"]["name"]; $filetype = $_FILES["file"]["type"]; $filesize = $_FILES["file"]["size"]; $tempfile = $_FILES["file"]["tmp_name"]; //once all safety checks are done, you can safely move the file from the temporary location to a public accessible location move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile); $query = "insert into files values (DEFAULT,1,1, '$filename', '$filesize','123abc');"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); echo "ok"; } else { echo "failed"; } ?> So....jetzt hol ich mir aus einem String-Array die Dateileiste und will ca. 55 Dateien hochladen. Zu Beginn hat das anstandlos funktioniert.....umso länger ich gecoded habe umso stranger wurde das Verhalten. Primäres Problem dabei ist: Zitat <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE> 429 Too Many Requests</TITLE> </HEAD><BODY> <H1>Too Many Requests</H1> The website is temporarily unable to service your request as it exceeded requests limit. Please try again later. </BODY></HTML> UnityEngine.Debug:Log(Object) <UploadFileCo>c__Iterator1:MoveNext() (at Assets/Scripts/LevelUploader.cs:95) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) Es tritt ständig verschieden auf.....manchmal gehen alle Files durch, manchmal kaum welche. Bevor diese Meldungen auftraten, gingen die "größeren" Files nicht durch. Ich wollte es mit WaitforSeconds abfangen....aber das ändert irgendwie 0,0. Was mache ich falsch? danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 21. Februar 2019 Melden Share Geschrieben 21. Februar 2019 Am 21.2.2019 um 13:59 schrieb Elharter: IEnumerator Wait(float seconds) { yield return new WaitForSeconds(seconds); } Warum verwendest du diese Funktion, obwohl du gleich WaitForSeconds schreiben kannst? Also statt yield return StartCoroutine(Wait(6.0f)); // Außerdem sollte nicht einfach eine Wait(6.0f) klappen? so yield return new WaitForSeconds(6.0f); Zweitens benutzt du eine veraltete Version der WWW / WWWPost (je nach unity version unterschiedlich). Schaue mal hier Drittens (nur so am Rande), laut PHP Code ist deine PHP Version veraltet (oder man verwendet falsche Funktion). sowas wie mysql_query ist sehr alt und wird eigentlich gar nicht mehr verwendet, aber das sollte mit der eigentlichen Fehler nichts zu tun haben. und nun Header. 429 Too Many Requests sagt, dass du zu viele Dinge hintereinander Requesten tust. Das muss jetzt nicht unbedingt an dir liegen, sondern kann an dem Server liegen. Vllt mag es nicht in 10 Minuten mehrere Requests bekommen. Darum gehen auch deine Files nur ab und zu durch. Der Server kann dich daher erst mal geblockt haben und dann geht das erst mal nicht für eine gewisse Zeit. Da muss man nach den Servereinstellungen (wahrscheinlich PHP Einstellungen) anschauen. Versuchst du 55 Dateien auf einmal hochzuladen oder nacheinander? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 21. Februar 2019 Autor Melden Share Geschrieben 21. Februar 2019 Ich habe es umgeschrieben weil ich dachte dass es unter Umständen die Ursache für mein Problem ist und eine 2te Coroutine verwendet. Ich habe es natürlich auch mit yield return new WaitForSeconds(6.0f); probiert.....hat sich in keinster Weise verändert. Danke vorerst für deinen verlinkten Post, den werd ich mir ansehen! @429 Fehler: Es verhält sich jedesmal anders. 1x lädt er alle Dateien hoch, beim 2ten Versuch nur die letzten 20.....beim 3ten Versuch macht er überhaupt nur 3. Ich lese das Verzeichnis aus (dort liegen ca. 55 Files) und die lade ich der Reihe nach auf den Server hoch in einem zug (mit dem WaitForSeconds als Pause dazwischen). lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 21. Februar 2019 Melden Share Geschrieben 21. Februar 2019 Ich würde sicherheitshalber mal testen, ob dein Script da das Einzige ist, was deinen Server belastet. Nicht, dass da irgendetwas anderes Anfragen schickt und du dich in deinem Script totsuchst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 22. Februar 2019 Autor Melden Share Geschrieben 22. Februar 2019 Ja... das habe ich bereits. Mit normalen http requests passiert auf dem Server absolut nichts ... das Verhalten ist so strange. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 22. Februar 2019 Autor Melden Share Geschrieben 22. Februar 2019 Okay....ich hab mich nun nochmal 3h hingesetzt und den Fehler gefunden. Es war ein einfacher Logikfehler im Skript, sonst nichts. Ich habe in der Funktion die CoRoute (UploadFileCo) in einer Schleife in wenigen Millisekunden hunderte male aufgerufen.....das führte (natürlich) zu einem "429 too many requests" Fehler. Habe die Schleife zum auslesen der Files nun in die UploadFileCo Iterator eingebaut und jetzt zieht auch das WaitforSeconds....und somit funktioniert es. lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.