2009-04-13 12 views
12

क्या किसी को पता है कि यह संभव है, वास्तव में यदि यह किया गया है, तो PHP में किसी ऑब्जेक्ट को क्रमबद्ध करने और जावा (जावा-पीएचपी संचार) में इसे बेअसर करने के लिए। शायद एक एडाप्टर की आवश्यकता होगी।जावा में एक सीरियलाइज्ड php ऑब्जेक्ट

आपको क्या लगता है?

धन्यवाद

उत्तर

4

सैद्धांतिक रूप से, यह निश्चित रूप से संभव है। यह सिर्फ बाइट्स के बाद है, और उन्हें पार्स किया जा सकता है। बेशक, deserialized ऑब्जेक्ट में केवल डेटा होगा, PHP पद्धतियों में से कोई भी नहीं। यदि आप इसे चाहते हैं, तो आपको जावा कक्षाओं के रूप में व्यवहार को फिर से लिखना होगा जो सीधे PHP वर्गों से मेल खाता है।

प्रैक्टिस में, मुख्य समस्या यह प्रतीत होती है कि PHP क्रमबद्धता प्रारूप औपचारिक रूप से निर्दिष्ट नहीं प्रतीत होता है - कम से कम the manual में विनिर्देश के लिए कोई लिंक नहीं है।

तो प्रारूप को समझने के लिए आपको कोड के माध्यम से खोदना पड़ सकता है।

बिलकुल बिलकुल ऐसा लगता है कि एक्सएमएल क्रमबद्धता जैसे कुछ का उपयोग करने के लिए यह बहुत आसान और अधिक स्थिर होगा - मुझे यकीन है कि दोनों भाषाओं में पुस्तकालय हैं जो इसे सुलझाते हैं।

0

ध्यान दें कि Java implementation of PHP है। तो आप ऑब्जेक्ट को क्रमबद्ध करने में सक्षम हो सकते हैं और इसे अपने जावा-PHP इंस्टेंस, deserialise पर पास कर सकते हैं और फिर अपने जावा इंफ्रास्ट्रक्चर में कॉल कर सकते हैं।

यह सब एक अपवित्र गड़बड़ का थोड़ा सा लगता है, लेकिन शायद देखने लायक है!

2

आप किसी भी तरह PHP के var_export() फ़ंक्शन का उपयोग कर सकते हैं, जो उस ऑब्जेक्ट का एक पारदर्शी स्ट्रिंग प्रस्तुति देता है जिसे आप क्रमबद्ध करना चाहते हैं।

14

PHP और जावा दोनों अपनी (स्पष्ट रूप से अलग) क्रमिकरण योजनाओं का उपयोग करते हैं। हालांकि आप एक इंटरचेंज प्रारूप का उपयोग कर सकते हैं, दोनों पढ़ और लिख सकते हैं।

दो सबसे स्पष्ट उदाहरण एक्सएमएल और जेएसओएन हैं।

हालांकि अन्य लोग Google प्रोटोकॉल बफर जैसे हैं।

0

क्रमशः xstream (जावा ऑब्जेक्ट्स को पठनीय एक्सएमएल में परिवर्तित करता है) को क्रमबद्ध करने के लिए प्रयास करें और फिर अपने स्वयं के PHP कोड को deserialize के लिए लिखें।

0

वेब सेवाओं (आरईएसटी, आरपीसी, एसओएपी) या सादे पाठ को संग्रहीत करने वाले किसी अन्य समाधान का उपयोग करें जो आपको जावा से डेटा को पढ़ने/पुनर्निर्माण करने की अनुमति देगा।

1

मुझे ड्रूपल (PHP सीएमएस) के लिए एक स्निपेट याद है जहां इस कार्यक्षमता की आवश्यकता थी। बस इसे मिला, तो Serialized drupal node objects to java पर एक नज़र डालें (किसी भी PHP धारावाहिक वस्तु के साथ काम करना चाहिए)।

शायद आप इसका उपयोग कर सकते हैं। मुझे नहीं पता कि PHP के नए संस्करणों के साथ समस्याएं हैं या नहीं।

3

JSON प्रारूप शुरू करने के लिए एक अच्छी जगह होगी। Java, PHP और कई अन्य भाषाओं के लिए कार्यान्वयन हैं।

प्रारंभ में जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक नोटेशन के आधार पर, JSON सभी प्रकार के सिस्टम के बीच हल्के डेटा स्थानांतरण के लिए सुविधाजनक साबित हुआ।

+0

निश्चित रूप से, लेकिन यह आदिम प्रकारों को स्थानांतरित करने के लिए अच्छी तरह से काम करता है और अधिकांश भाषाओं द्वारा समर्थित है। – Matt

+0

json.org में 35 languanges सूचीबद्ध हैं जिनमें कार्यान्वयन हैं इसलिए मैं कहूंगा कि इसका विशेष रूप से जावास्क्रिप्ट के लिए नहीं है। – zimbu668

0

PHP में किसी ऑब्जेक्ट को क्रमबद्ध करना ऑब्जेक्ट गुणों को डंप करेगा। परिणामी स्ट्रिंग बहुत जटिल नहीं है।

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

स्ट्रिंग डेटाटाइप्स, सरणी लंबाई, सरणी अनुक्रमित और मूल्यों, स्ट्रिंग लंबाई को दिखाता है ... करने के लिए इसे रिवर्स इंजीनियर और ऊपर आ बहुत ज्यादा प्रयास नहीं ले सकते हैं: में

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

परिणाम अपने खुद के पार्सर के साथ, मुझे लगता है।

0

आप PHP/Java पुल (http://php-java-bridge.sourceforge.net/) का उपयोग करने में भी रुचि रखते हैं। इसका अपना प्रोटोकॉल है। अपनी साइट में कहा गया है कि यह पुल का तेज़ कार्यान्वयन है।

16

serialized-php-parser है, जो एक जावा कार्यान्वयन है जो php-serialized ऑब्जेक्ट्स को पार्स कर सकता है। आम तौर पर, यदि आपके पास विकल्प है, तो मैं एक एक्सपीएल प्रारूप के रूप में php-serialized की अनुशंसा नहीं करता, क्योंकि यह ascii- सुरक्षित नहीं है (इसमें नल-बाइट्स हैं)। इसके बजाय xml या json जैसे प्रारूप के साथ जाएं। यदि आपको कुछ प्रकार की जानकारी की आवश्यकता है, तो xmlrpc एक अच्छा विकल्प है। इसमें PHP और जावा दोनों के लिए अच्छा कार्यान्वयन है।

7

PHP धारावाहिक प्रारूप के साथ काम करने के लिए एक और जावा प्रोजेक्ट Pherialize है।

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

तो फिर तुम यह जावा में Pherialize के साथ इस तरह unserialize कर सकते हैं::

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)); 
0

पिछले जवाब की तरह का उल्लेख किया है, मैं PHP से बच जाएंगे

मान लीजिए कि आप इस तरह एक सरणी serializing रहे हैं यदि संभव हो तो ऑब्जेक्ट क्रमबद्धता। JSON का उपयोग करें (जो PHP में serialize() से वास्तव में तेज़ है), बहाव या कुछ अन्य प्रारूप जो अधिक सार्वभौमिक है।

यदि आपके पास कोई विकल्प नहीं है तो मैं Jackson Module पर जावा से क्रमबद्ध PHP पढ़ने और लिखने में सक्षम होने के लिए काम कर रहा हूं। जैक्सन एक महान JSON पार्सर है और चूंकि PHP क्रमबद्धता प्रारूप बहुत समान है, यह एक अच्छा फिट लग रहा था। यह अभी तक पूरा नहीं हुआ है (लेखन अभी भी प्रगति पर एक काम है)।

3

मदद मिल सकती कोड प्रयोग में pom.xml में जोड़ने

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

तो

MixedArray list = Pherialize.unserialize(data).toArray(); // data is string `enter code here` 
संबंधित मुद्दे