- Home /
Help with saving XML files with PHP to a server
Hi All,
I had serialize the object and trying to post it to my php, Unity3d shows url malformed whenever I click save button.
_GameSaveLoad.cs
[CODE]
using UnityEngine; using System.Collections; using System.Xml; using System.Xml.XPath; using System.Xml.Serialization; using System.IO; using System.Text;
public class _GameSaveLoad : MonoBehaviour {
 //local private members
 Rect _Save, _Load, _SaveMSG, _LoadMSG;
 bool _ShouldSave, _ShouldLoad, _SwitchSave, _SwitchLoad;
 string _FileLocation, _FileName;
 public GameObject _Player;
 UserData myData;
 string _PlayerName;
 string _data;
 
 Vector3 VPosition;
 
 public string getFileName;
 
 string url;
 byte[] bytes;
 //When the EGO is instansiated the Atart will trigger
 //so we setup our initial values for our local members
 void Start () {
     
     //we setup our rectangles for our messages
     _Save = new Rect( 10, 80, 100, 20 );
     _Load = new Rect( 10, 100, 100, 20 );
     _SaveMSG = new Rect( 10, 120, 100, 20 );
     _LoadMSG = new Rect( 10, 140, 400, 40 );
     
     //Where we want to save and load to and from
     _FileLocation = Application.dataPath + @"/Data";
     string url="http://localhost/demoProject/upload.php";
     //_FileLocation = url;
     
     //for now, lets just set the name to Joe Schmoe
     _PlayerName = "Joe Schmoe";
     
     //we need something to store the information into
     myData = new UserData();
 }
 
 // Update is called once per frame
 void Update () {
 
 }
 
 void OnGUI () {
     //Create File Name
     getFileName = GUI.TextField( new Rect( 20, 150, 150, 30 ), getFileName, 45 );
     print( getFileName );
     
     _FileName = getFileName + ".xml";
     
     //Loading the player
     if( GUI.Button( _Load, "Load" ) ) {
         GUI.Label( _LoadMSG, "Loading from: " + _FileLocation );
         //Load out userData into myData
         LoadXML();
         if( _data.ToString() != "" ) {
             //notice how I use a referenvce to type (UserData) here, you need this
             //so that the returned objects is converted into the correct type
             myData = (UserData)DeserializeObject(_data);
             //set the players position to the data we loaded
             VPosition = new Vector3( myData._iUser.x, myData._iUser.y, myData._iUser.z );
             _Player.transform.position = VPosition;
             //just a way to show that we loaded in ok
             Debug.Log( myData._iUser.name );
         }
     }
     
     //Saving the player
     if( GUI.Button( _Save, "Save" ) ) {
         
         GUI.Label( _SaveMSG, "Saving to: " + _FileLocation );
         myData._iUser.x = _Player.transform.position.x;
         myData._iUser.y = _Player.transform.position.y;
         myData._iUser.z = _Player.transform.position.z;
         myData._iUser.name = _PlayerName;
         
         //Time to create our XML
         _data = SerializeObject( myData );
         //This is the final resulting XML from the serialization process
         //CreateXML();
         //Debug.Log( _data );
     }
 }
 
 //The following methods came from the referenced URL
 string UTF8ByteArrayToString( byte[] characters ) {
     UTF8Encoding encoding = new UTF8Encoding();
     string constructedString = encoding.GetString( characters );
     return( constructedString );
 }
 
 byte[] StringToUTF8ByteArray( string pXmlString ) {
     UTF8Encoding encoding = new UTF8Encoding();
     byte[] byteArray = encoding.GetBytes( pXmlString );
     return byteArray;
 }
 
 //Here we serialize our UserData object of myData
 string SerializeObject( object pObject ) {
     UTF8Encoding encoding = new UTF8Encoding();
     string XmlizedString = null;
     MemoryStream memorystream = new MemoryStream();
     XmlSerializer xs = new XmlSerializer( typeof( UserData ) );
     XmlTextWriter xmlTextWriteer = new XmlTextWriter( memorystream, Encoding.UTF8 );
     xs.Serialize( xmlTextWriteer, pObject );
     memorystream = ( MemoryStream )xmlTextWriteer.BaseStream;
     XmlizedString = UTF8ByteArrayToString( memorystream.ToArray() );
     
     bytes = StringToUTF8ByteArray( XmlizedString );
     UploadFile( url );
     
     return XmlizedString;
 }
 
 //Here we deserialize it back into its original form
 object DeserializeObject( string pXmlizedString ) {
     XmlSerializer xs = new XmlSerializer( typeof( UserData ) );
     MemoryStream memoryStream = new MemoryStream( StringToUTF8ByteArray( pXmlizedString ) );
     XmlTextWriter xmlTextWriter = new XmlTextWriter( memoryStream, Encoding.UTF8 );
     return xs.Deserialize( memoryStream );
 }
 
 IEnumerator UploadData (string uploadURL) {
     WWWForm postForm = new WWWForm();
     postForm.AddField( "action", "Upload Data" );
     postForm.AddBinaryData( "fileUpload", bytes, _FileName, "text/xml" );
     WWW upload = new WWW(uploadURL, postForm);
     yield return upload;
     
     if( upload.error == null ) {
         Debug.Log(upload.text);
     }
     else {
         Debug.Log( "Error during upload: " + upload.error );
     }
 }
 
 void UploadFile( string uploadURL ) {
     StartCoroutine( UploadData( uploadURL ) );
 }
 
 //Save and load methods for the file itself
 void CreateXML () {
     
     StreamWriter writer;
     
     //string encodedThumbnail = "";
         
     FileInfo t = new FileInfo( _FileLocation + "/" + _FileName );
     if( !t.Exists ) {
         writer = t.CreateText();
     }
     else {
         t.Delete();
         writer = t.CreateText();
     }
     
     writer.Write( _data );
     writer.Close();
     
     Debug.Log( "File written" );
 }
 
 void LoadXML () {
     StreamReader r = File.OpenText( _FileLocation + "\\" + _FileName );
     string _info = r.ReadToEnd();
     r.Close();
     _data = _info;
     Debug.Log( "File Read" );
 }
}
//UserData is our custom class that holds our defined objects we want to store in XML format public class UserData { //we have to define a default instance of the structure public DemoData _iUser; //Default constructor doesn't really do anything at the moment public UserData(){}
 //Anything we want to store in the XML file, we define it here
 public struct DemoData {
     public float x;
     public float y;
     public float z;
     public string name;
 }
}
[/CODE]
upload.php [CODE]
         if(!isset($_FILES) && isset($HTTP_POST_FILES))
             $_FILES = $HTTP_POST_FILES;
         if(!isset($_FILES['fileUpload']))
             $error["data_file"] = "An data was not found.";
         $dataname = basename($_FILES['fileUpload']['name']);
         if(empty($dataname))
             $error["dataname"] = "The name of the data was not found.";
         if(empty($error)) {
             $newdata = "data/" . $dataname;
             //echo $newimage;
             $result = @move_uploaded_file($_FILES['fileUpload']['tmp_name'], $newdata);
                 if ( empty($result) )
                     $error["result"] = "There was an error moving the uploaded file.";
             }
         }
     }
     else {
         echo "no form data found";
 }
?>
[/CODE]
               Comment
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                