unserialize serialize online example ejemplo deserialize array java php serialization

java - example - serialize php online



Deserializar en Java un objeto php serializado (15)

¿Alguien sabe si es posible, en realidad si se ha hecho, serializar un objeto en php y deserializarlo en Java (comunicación java-php). Tal vez se necesite un adaptador.

¿Qué piensas?

Gracias


De alguna manera puede hacer uso de la función var_export () de PHP para esto, que devuelve una representación de cadena analizable del objeto que desea serializar.


El formato JSON sería un buen lugar para comenzar. Hay implementaciones para Java , PHP y muchos otros lenguajes.

Aunque inicialmente se basaba en la notación literal del objeto JavaScript, JSON resultó conveniente para la transferencia de datos liviana entre todos los tipos de sistemas.


PHP y Java usan sus propios esquemas de serialización (obviamente diferentes). Sin embargo, podría usar un formato de intercambio que ambos puedan leer y escribir.

Los dos ejemplos más obvios son XML y JSON.

Sin embargo, hay otros como Buffers de Protocolo de Google.


Recuerdo un fragmento para Drupal (PHP CMS) donde esta funcionalidad era necesaria. Acabo de encontrarlo, así que eche un vistazo a los objetos del nodo drupal serializado a java (debería funcionar con cualquier objeto serializado de PHP).

Quizás puedas usar eso. No sé si hay problemas con las versiones más nuevas de PHP.


Serializar un objeto en PHP arrojará las propiedades del objeto. La cadena resultante no es terriblemente complicada.

echo serialize( array(1, null, "mystring", array("key"=>"value")) );

Resultados en:

a:4:{i:0;i:1;i:1;N;i:2;s:8:"mystring";i:3;a:1:{s:3:"key";s:5:"value";}}

La cadena identifica los tipos de datos, las longitudes de los arreglos, los índices y valores de los arreglos, las longitudes de las cuerdas ... No me costaría demasiado esforzarme en la ingeniería inversa y creo su propio analizador, creo.


También puede estar interesado en utilizar PHP / Java bridge ( http://php-java-bridge.sourceforge.net/ ). Tiene un protocolo propio. En su sitio dijeron que es una implementación rápida de bridge.


Tenga en cuenta que hay una implementación Java de PHP . Por lo tanto, puede serializar el objeto y pasarlo a su instancia Java-PHP, deserializar y luego llamar a su infraestructura Java.

¡Todo parece un desastre profano, pero quizás valga la pena mirarlo!


Utilice los servicios web (REST, RPC, SOAP) o cualquier otra solución que almacene texto sin formato que le permita leer / reconstruir los datos de Java.


Hay serialized-php-parser , que es una implementación de Java que puede analizar objetos serializados php. En general, si tiene la opción, no recomendaría php-serialized como un formato de intercambio, porque no es seguro (contiene null-bytes). Vaya con un formato como xml o json en su lugar. Si necesita un poco de tipo de información, xmlrpc es una buena opción. Tiene buenas implementaciones tanto para php como para Java.


Teóricamente, es ciertamente posible. Son solo bytes después de todo, y se pueden analizar. Por supuesto, el objeto deserializado solo contendría datos, no ninguno de los métodos de PHP. Si quieres eso, tendrás que volver a escribir el comportamiento como clases de Java que se corresponden directamente con las clases de PHP.

En la práctica, el problema principal parece ser que el formato de serialización de PHP no parece estar formalmente especificado, al menos no hay un enlace a una especificación en el manual .

Por lo tanto, es posible que deba explorar el código para comprender el formato.

Con todo, parece que sería mucho más fácil y más estable usar algo así como la serialización de XML. Estoy seguro de que ambos lenguajes tienen bibliotecas que facilitan esto.


Otro proyecto de Java para trabajar con el formato de serialización PHP es Pherialize .

Digamos que estás serializando una matriz como esta:

array(3) { [0]=> string(8) "A string" [1]=> int(12345) [2]=> bool(true) }

Entonces puede deserializarlo en Java con Pherialize de esta manera:

MixedArray list = Pherialize.unserialize(data).toArray(); System.out.println("Item 1: " + list.getString(0)); System.out.println("Item 2: " + list.getInteger(1)); System.out.println("Item 3: " + list.getBoolean(2));


Al igual que las respuestas anteriores que he mencionado, evitaría la serialización de objetos PHP si fuera posible. Use JSON (que en realidad es más rápido que serialize () en PHP), ahorro o algún otro formato que sea más universal.

Si no tiene otra opción, he estado trabajando en un Módulo Jackson para permitir leer y escribir PHP serializado desde Java. Jackson es un gran analizador de JSON y dado que el formato de serialización de PHP es bastante similar, parecía una buena opción. Todavía no está completo (la escritura todavía es un trabajo en progreso).


Pruebe xstream (convierte objetos Java en XML legible) para serializar y luego escriba su propio código PHP para deserializar.



agregar a pom.xml

<dependency> <groupId>de.ailis.pherialize</groupId> <artifactId>pherialize</artifactId> <version>1.2.1</version> </dependency>

luego en el uso del código

MixedArray list = Pherialize.unserialize(data).toArray(); // data is string `enter code here`