diff --git a/lib/haxe/README.md b/lib/haxe/README.md
index fd4debe..2692be9 100644
--- a/lib/haxe/README.md
+++ b/lib/haxe/README.md
@@ -94,6 +94,7 @@
 Current status
 ========================
 - tested with Haxe C++ target
+- tested with Haxe PHP target (console, binary protocols)
 - transports: Socket, HTTP (client only), Stream
 - protocols: Binary, JSON, Multiplex, Compact
 - tutorial client and server available
diff --git a/lib/haxe/src/org/apache/thrift/helper/ZigZag.hx b/lib/haxe/src/org/apache/thrift/helper/ZigZag.hx
index 862060d..6fb2e7b 100644
--- a/lib/haxe/src/org/apache/thrift/helper/ZigZag.hx
+++ b/lib/haxe/src/org/apache/thrift/helper/ZigZag.hx
@@ -20,6 +20,7 @@
 package org.apache.thrift.helper;
 
 import haxe.Int64;
+import haxe.Int32;
 
 class ZigZag {
 
@@ -28,7 +29,15 @@
      * represented compactly as a varint.
      */
     public static function FromInt( n : Int) : UInt    {
+        #if php
+
+        return cast(cast(cast(n,Int32) << 1,Int32) ^ cast(cast(n,Int32) >> 31,Int32),UInt);
+
+        #else
+
         return cast(n << 1,UInt) ^ cast(n >> 31,UInt);
+
+        #end
     }
 
 
@@ -36,7 +45,22 @@
      * Convert from zigzag int to int.
      */
     public static function ToInt( n : UInt) : Int {
+        #if php
+
+        var convertedLong = ToLong(n);
+        //if overflow return high
+        if( convertedLong.high != convertedLong.low >> 31 ) {
+            return convertedLong.high;
+        } else {
+            return convertedLong.low;
+        }
+
+
+        #else
+
         return (0x7FFFFFFF & cast(n >> 1,Int)) ^ (-cast(n & 1,Int));
+
+        #end
     }
 
 
@@ -125,4 +149,5 @@
     }
     #end
 }
-    
\ No newline at end of file
+
+   
\ No newline at end of file
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TProtocol.hx b/lib/haxe/src/org/apache/thrift/protocol/TProtocol.hx
index 22e88e4..b7f3842 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TProtocol.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TProtocol.hx
@@ -79,7 +79,7 @@
     function readString() : String;
     function readBinary() : Bytes;
 
-	// recursion tracking
-	function IncrementRecursionDepth() : Void;
-	function DecrementRecursionDepth() : Void;
+    // recursion tracking
+    function IncrementRecursionDepth() : Void;
+    function DecrementRecursionDepth() : Void;
 }
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TProtocolDecorator.hx b/lib/haxe/src/org/apache/thrift/protocol/TProtocolDecorator.hx
index 22c5dd2..769e93c 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TProtocolDecorator.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TProtocolDecorator.hx
@@ -216,11 +216,11 @@
         return wrapped.readBinary();
     }
 
-	public function IncrementRecursionDepth() : Void {
+    public function IncrementRecursionDepth() : Void {
         return wrapped.IncrementRecursionDepth();
-	}
+    }
 
-	public function DecrementRecursionDepth() : Void {
+    public function DecrementRecursionDepth() : Void {
         return wrapped.DecrementRecursionDepth();
-	}
+    }
 }
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TProtocolUtil.hx b/lib/haxe/src/org/apache/thrift/protocol/TProtocolUtil.hx
index 71ed4ba..1ec59d2 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TProtocolUtil.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TProtocolUtil.hx
@@ -35,76 +35,76 @@
      * @param type  the next value will be intepreted as this TType value.
      */
     public static function skip(prot:TProtocol, type : Int) : Void {
-		prot.IncrementRecursionDepth();
-		try
-		{
-			switch (type) {
-				case TType.BOOL: 
-					prot.readBool();
+        prot.IncrementRecursionDepth();
+        try
+        {
+            switch (type) {
+                case TType.BOOL:
+                    prot.readBool();
 
-				case TType.BYTE: 
-					prot.readByte();
+                case TType.BYTE:
+                    prot.readByte();
 
-				case TType.I16: 
-					prot.readI16();
+                case TType.I16:
+                    prot.readI16();
 
-				case TType.I32: 
-					prot.readI32();
+                case TType.I32:
+                    prot.readI32();
 
-				case TType.I64: 
-					prot.readI64();
+                case TType.I64:
+                    prot.readI64();
 
-				case TType.DOUBLE: 
-					prot.readDouble();
+                case TType.DOUBLE:
+                    prot.readDouble();
 
-				case TType.STRING: 
-					prot.readBinary();
+                case TType.STRING:
+                    prot.readBinary();
 
-				case TType.STRUCT: 
-					prot.readStructBegin();
-					while (true) {
-						var field:TField = prot.readFieldBegin();
-						if (field.type == TType.STOP) {
-						  break;
-						}
-						skip(prot, field.type);
-						prot.readFieldEnd();
-					}
-					prot.readStructEnd();
+                case TType.STRUCT:
+                    prot.readStructBegin();
+                    while (true) {
+                        var field:TField = prot.readFieldBegin();
+                        if (field.type == TType.STOP) {
+                          break;
+                        }
+                        skip(prot, field.type);
+                        prot.readFieldEnd();
+                    }
+                    prot.readStructEnd();
 
-				case TType.MAP: 
-					var map:TMap = prot.readMapBegin();
-					for (i in 0 ... map.size) {
-						skip(prot, map.keyType);
-						skip(prot, map.valueType);
-					}
-					prot.readMapEnd();
+                case TType.MAP:
+                    var map:TMap = prot.readMapBegin();
+                    for (i in 0 ... map.size) {
+                        skip(prot, map.keyType);
+                        skip(prot, map.valueType);
+                    }
+                    prot.readMapEnd();
 
-				case TType.SET: 
-					var set:TSet = prot.readSetBegin();
-					for (j in 0 ... set.size) {
-						skip(prot, set.elemType);
-					}
-					prot.readSetEnd();
+                case TType.SET:
+                    var set:TSet = prot.readSetBegin();
+                    for (j in 0 ... set.size) {
+                        skip(prot, set.elemType);
+                    }
+                    prot.readSetEnd();
 
-				case TType.LIST: 
-					var list:TList = prot.readListBegin();
-					for (k in 0 ... list.size) {
-						skip(prot, list.elemType);
-					}
-					prot.readListEnd();
+                case TType.LIST:
+                    var list:TList = prot.readListBegin();
+                    for (k in 0 ... list.size) {
+                        skip(prot, list.elemType);
+                    }
+                    prot.readListEnd();
 
-				default:
-					trace("Unknown field type ",type," in skipMaxDepth()");
-			}
-			
-			prot.DecrementRecursionDepth();
-		}
-		catch(e:Dynamic)
-		{
-			prot.DecrementRecursionDepth();
-			throw e;
-		}
+                default:
+                    trace("Unknown field type ",type," in skipMaxDepth()");
+            }
+
+            prot.DecrementRecursionDepth();
+        }
+        catch(e:Dynamic)
+        {
+            prot.DecrementRecursionDepth();
+            throw e;
+        }
     }
 
 }
diff --git a/lib/haxe/src/org/apache/thrift/protocol/TRecursionTracker.hx b/lib/haxe/src/org/apache/thrift/protocol/TRecursionTracker.hx
index b882cf2..cf0211b 100644
--- a/lib/haxe/src/org/apache/thrift/protocol/TRecursionTracker.hx
+++ b/lib/haxe/src/org/apache/thrift/protocol/TRecursionTracker.hx
@@ -24,25 +24,25 @@
 
 class TRecursionTracker {
 
-	// default 
-    private static inline var DEFAULT_RECURSION_DEPTH : Int = 64; 
+    // default
+    private static inline var DEFAULT_RECURSION_DEPTH : Int = 64;
 
-	// limit and actual value
-	public var recursionLimit : Int = DEFAULT_RECURSION_DEPTH;
+    // limit and actual value
+    public var recursionLimit : Int = DEFAULT_RECURSION_DEPTH;
     private var recursionDepth : Int = 0;
 
-	public function IncrementRecursionDepth() : Void 
-	{
-		if (recursionDepth < recursionLimit)
-			++recursionDepth;
-		else
-			throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
-	}
+    public function IncrementRecursionDepth() : Void
+    {
+        if (recursionDepth < recursionLimit)
+            ++recursionDepth;
+        else
+            throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
+    }
 
-	public function DecrementRecursionDepth() : Void 
-	{
-		--recursionDepth;
-	}
+    public function DecrementRecursionDepth() : Void
+    {
+        --recursionDepth;
+    }
 
 
 }
diff --git a/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx b/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx
index 586a8b6..4badb2a 100644
--- a/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx
+++ b/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx
@@ -39,26 +39,22 @@
     // Underlying server with socket
     private var _socket : Socket= null;
 
-    // Port to listen on
-    private var _port : Int = 0;
-
     // Timeout for client sockets from accept
-    private var _clientTimeout : Float = 0;
+    private var _clientTimeout : Float = 5;
 
     // Whether or not to wrap new TSocket connections in buffers
     private var _useBufferedSockets : Bool = false;
 
 
-    public function new( port : Int, clientTimeout : Float = 0, useBufferedSockets : Bool = false)
+    public function new(?address : String = 'localhost',  port : Int, clientTimeout : Float = 5, useBufferedSockets : Bool = false)
     {
-        _port = port;
         _clientTimeout = clientTimeout;
         _useBufferedSockets = useBufferedSockets;
 
         try
         {
             _socket = new Socket();
-            _socket.bind( new Host('localhost'), port);
+            _socket.bind( new Host(address), port);
         }
         catch (e : Dynamic)
         {
@@ -74,7 +70,9 @@
         if (_socket != null)    {
             try
             {
+                #if !php
                 _socket.listen(1);
+                #end
             }
             catch (e : Dynamic)
             {
@@ -94,7 +92,7 @@
         {
             var accepted = _socket.accept();
             var result = TSocket.fromSocket(accepted);
-            accepted.setTimeout( _clientTimeout);
+            result.setTimeout( _clientTimeout);
 
             if( _useBufferedSockets)
             {
diff --git a/lib/haxe/src/org/apache/thrift/transport/TSocket.hx b/lib/haxe/src/org/apache/thrift/transport/TSocket.hx
index 8aa0608..7941ab9 100644
--- a/lib/haxe/src/org/apache/thrift/transport/TSocket.hx
+++ b/lib/haxe/src/org/apache/thrift/transport/TSocket.hx
@@ -73,7 +73,7 @@
     private var output : Output = null;
     #end
 
-    private static inline var DEFAULT_TIMEOUT = 5.0;
+    private var timeout : Float = 30;
 
     private var obuffer : BytesOutput = new BytesOutput();
     private var ioCallback : TException->Void = null;
@@ -92,7 +92,8 @@
     #if ! (flash || js)
     // used by TSocketServer
     public static function fromSocket( socket : Socket) : TSocket  {
-        var result = new TSocket("",0);
+        var socketHost = socket.host();
+        var result = new TSocket(socketHost.host.toString(), socketHost.port);
         result.assignSocket(socket);
         return result;
     }
@@ -240,7 +241,7 @@
         }
         catch (e : TException)
         {
-            trace('TException $e');
+            trace('TException $e, message : ${e.errorMsg}');
             if(ioCallback != null) {
                 ioCallback(e);
             }
@@ -270,11 +271,17 @@
         var socket = new Socket();
         socket.connect(host, port);
 
+        #elseif php
+        var socket = new Socket();
+        socket.connect(host, port);
+        socket.setBlocking(true);
+        socket.setTimeout(timeout);
+
         #else
         var socket = new Socket();
         socket.setBlocking(true);
         socket.setFastSend(true);
-        socket.setTimeout( DEFAULT_TIMEOUT);
+        socket.setTimeout(timeout);
         socket.connect(host, port);
 
         #end
@@ -301,4 +308,11 @@
         #end
     }
 
+    public function setTimeout( timeout : Float ) : Void {
+        if(isOpen()) {
+            socket.setTimeout(timeout);
+        }
+        this.timeout = timeout;
+    }
+
 }
diff --git a/lib/haxe/test/Makefile.am b/lib/haxe/test/Makefile.am
index 7d29f81..5c638d4 100644
--- a/lib/haxe/test/Makefile.am
+++ b/lib/haxe/test/Makefile.am
@@ -24,6 +24,7 @@
 BENCHMARK = $(top_srcdir)/lib/rb/benchmark/Benchmark.thrift
 
 BIN_CPP = bin/Main-debug
+BIN_PHP = bin/php/Main-debug.php
 
 gen-haxe/thrift/test/ThriftTest.hx: $(THRIFTTEST)
 	$(THRIFTCMD) $(THRIFTTEST)
@@ -34,7 +35,7 @@
 gen-haxe/thrift/test/BenchmarkService.hx: $(BENCHMARK)
 	$(THRIFTCMD) $(BENCHMARK)
 
-all-local: $(BIN_CPP)
+all-local: $(BIN_CPP) $(BIN_PHP)
 
 $(BIN_CPP): \
 		src/*.hx \
@@ -44,6 +45,14 @@
 		gen-haxe/thrift/test/BenchmarkService.hx
 	$(HAXE) --cwd .  cpp.hxml
 
+$(BIN_PHP): \
+		src/*.hx \
+		../src/org/apache/thrift/**/*.hx \
+		gen-haxe/thrift/test/ThriftTest.hx \
+		gen-haxe/thrift/test/Aggr.hx \
+		gen-haxe/thrift/test/BenchmarkService.hx
+	$(HAXE) --cwd .  php.hxml
+
 
 #TODO: other haxe targets
 #    $(HAXE)  --cwd .  csharp
@@ -51,15 +60,15 @@
 #    $(HAXE)  --cwd .  java
 #    $(HAXE)  --cwd .  javascript
 #    $(HAXE)  --cwd .  neko
-#    $(HAXE)  --cwd .  php
 #    $(HAXE)  --cwd .  python  # needs Haxe 3.2.0
 
 
 clean-local:
 	$(RM) -r gen-haxe bin
 
-check: $(BIN_CPP)
+check: $(BIN_CPP) $(BIN_PHP)
 	$(BIN_CPP)
+	php -f $(BIN_PHP)
 
 EXTRA_DIST = \
              src \
diff --git a/lib/haxe/test/php.hxml b/lib/haxe/test/php.hxml
index b86e64c..14f2b2d 100644
--- a/lib/haxe/test/php.hxml
+++ b/lib/haxe/test/php.hxml
@@ -26,7 +26,8 @@
 -main Main
 
 #PHP target
--php bin/Test.php
+-php bin/php/
+--php-front Main-debug.php
 
 #Add debug information
 -debug
@@ -35,4 +36,4 @@
 #"-dce no" : do not remove unused code
 #"-dce std" : remove unused code in the std lib (default)
 #"-dce full" : remove all unused code
--dce full
\ No newline at end of file
+-dce full
