2011-12-26 14 views
5

के साथ PHP को लिंक करना मैं इसे कई घंटों तक देख रहा हूं, लेकिन मैंने जो कुछ भी देखा है, वह मुश्किल है। मैं अब तक अपनी वेबसाइट पर सभी साधारण सामानों के लिए PHP का उपयोग कर रहा हूं। मैं बहुत सारे सांख्यिकीय काम कर रहा हूं, और मैं अधिक गहन गणना के लिए सी ++ उपलब्ध करना चाहता हूं।स्थानीय सी ++ प्रोग्राम

सी ++ उसी यूनिक्स मशीन पर PHP के रूप में स्थानीय रूप से चल रहा होगा।

कुछ निम्नलिखित की तरह क्या मैं कैसे करना है के लिए एक नुकसान में हूँ है:

<?php 
//c++ program has a counter initialized to 0 
//PHP tells c++ to add 5 to the counter. $incremented is 5 
$incremented = increment_in_cpp_and_return(5); 
//$incremented_again will be 7 
$incremented_again = increment_in_cpp_and_return(2); 
?> 
बेशक

, मैं कुछ Monte-Carlo सिमुलेशन चल रहा हूँ और इसके बजाय संख्या बढ़ाने की वास्तव में बड़ी पेड़ traversing, लेकिन यह वह नहीं है जो मुझे वापस पकड़ रहा है।

सी ++ को सिर्फ एक नंबर सुनने की आवश्यकता है और एक और नंबर लौटा सकता है (शायद जेएसओएन में कुछ सामान)। कॉल के बीच अपने चर के ट्रैक रखने के लिए सी ++ के लिए यह महत्वपूर्ण है।

मैंने टीसीपी, सॉकेट प्रोग्रामिंग आदि पर बहुत कुछ पढ़ा है और मैं थोड़ा सा संदिग्ध हूं कि यह उदाहरण के रूप में जटिल है। बहुत सी चीजें मुझे इस http://beej.us/guide/bgnet/output/html/multipage/clientserver.html#simpleserver

यदि यह वास्तव में सी ++ की 100 से अधिक पंक्तियां हैं, तो क्या कुछ लोकप्रिय पुस्तकालय हैं, या क्या किसी अन्य भाषा में एक सरल कार्यान्वयन है?

धन्यवाद!

+0

@therefromhere: हो गया: http://stackoverflow.com/a/8639563/367456 – hakre

+0

मैं थोड़ा उलझन में हूं कि सी ++ कॉल के बीच अपना राज्य कैसे रखता है। क्या proc_open का उपयोग एसटीडीआईएन के माध्यम से एक सी ++ प्रोग्राम में निरंतर चल रहा है? मुझे चिंता है कि यह C++ का एक नया उदाहरण शुरू करता है ... – dcc310

+0

मेरा उत्तर देखें और नीचे टिप्पणी करें ... – Paul

उत्तर

2

आप की कोशिश कर सकते: exec()

आप सी ++ लिखा कार्यक्रम के लिए तर्क है कि निष्पादित किया जाएगा और इस कार्यक्रम उत्पादन वापस आ जाएगी, ताकि आप सी ++ प्रोग्राम के निष्पादन के बाद PHP में उपयोग कर सकते हैं के रूप में PHP से डेटा भेजने ।

+0

"सी ++ कॉल के बीच अपने चर के ट्रैक को रखना महत्वपूर्ण है।" - तो निष्पादन इसे काट नहीं देगा। –

+0

हम्म, वह लगातार डेटा भंडारण के लिए डेटाबेस या फ़ाइल का उपयोग कर सकता है! – Paul

1

मैं सी ++ और PHP के बीच दूरस्थ प्रक्रिया कॉल के लिए gSOAP का उपयोग कर रहा हूं, और यदि आप PHP5 का उपयोग कर रहे हैं, तो बातचीत बहुत आसान हो गई है; देख http://www.php.net/manual/en/class.soapclient.php

5

आप केवल पीएचपी से अपने सी ++ प्रोग्राम का उपयोग करना चाहते हैं (या अपने सी ++ कोड के लिए वेब दृश्यपटल के रूप में पीएचपी का उपयोग), एक सॉकेट से संवाद के लिए एक विकल्प एक विस्तार के रूप पीएचपी में सी ++ कोड एम्बेड करने के लिए किया जाएगा ।

इसके साथ जुड़े बॉयलरप्लेट कोड की उचित मात्रा है, लेकिन इसमें से अधिकांश ext_skel स्क्रिप्ट (PHP स्रोत में शामिल) द्वारा आपके लिए जेनरेट की गई है।

PHP एक्सटेंशन लिखने के बारे में ऑनलाइन अधिकतर जानकारी सी का उपयोग करने से संबंधित है, Extending PHP with C++? इसके लिए सी ++ का उपयोग करने से संबंधित कुछ गॉथस देखें।

3

यदि आपका सी ++ निष्पादन योग्य है, तो आप इसे एक प्रोग्राम के रूप में खोल सकते हैं, एसटीडीआईएन के माध्यम से डेटा पास कर सकते हैं और वापसी मूल्य को STDOUT के माध्यम से PHP पर वापस भेज सकते हैं। proc_open­Docs देखें।

आपकी मानक सी ++ लाइब्रेरी को एसटीडीआईएन और एसटीडीओयूटी तक पहुंच प्रदान करनी चाहिए, इसलिए आपके पास पहले से ही आपको चाहिए।

मैं थोड़ा उलझन में हूं कि सी ++ कॉल के बीच अपना राज्य कैसे रखता है। क्या proc_open का उपयोग एसटीडीआईएन के माध्यम से एक सी ++ प्रोग्राम में निरंतर चल रहा है?मैं चिंतित हूँ कि यह C++

आप एक Named pipe­Wikipedia की तलाश में हो सकता है का एक नया उदाहरण शुरू होता है, अंतर संचार प्रक्रिया का एक रूप (और साथ ही देखें: What are named pipes?), कि सबसे ऑपरेटिंग सिस्टम के द्वारा समर्थित है। यह सरल I/O (फीफो) है और एसटीडीआईएन और एसटीडीओयूटी की तुलना में समान है। आप अपनी निष्पादन योग्य स्मृति में रख सकते हैं जबकि अन्य प्रक्रियाएं डेटा भेज सकती हैं।

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

(ये सिर्फ कुछ संसाधनों मैं दोनों नामित पाइप और सॉकेट के लिए लगता है कि कर रहे हैं, आप स्वाभाविक रूप से एक छोटे से अनुसंधान के साथ और अधिक प्राप्त कर सकते हैं, आपको अपने मामले के लिए स्रोत-कोड उदाहरण ढूंढने में सक्षम होना चाहिए)

+0

@ dcc310 यदि आप ऐसा करते हैं तो आप अपने PHP प्रोग्राम से केवल एक बार 'proc_open' को कॉल कर सकते हैं (और उस शेष के लिए पाइप की सरणी का उपयोग करें), ताकि आप PHP प्रोग्राम के प्रति रन C++ प्रोग्राम का एक उदाहरण प्राप्त कर सकें । क्या आपको इसकी आवश्यकता है? –

+0

यह मुझे स्पष्ट नहीं था कि आप स्मृति में रहने के लिए आपको C++ निष्पादन योग्य बनाना चाहते थे। मैंने इंटरप्रोसेस संचार के लिए दो तरीकों के उत्तर को बढ़ाया: * नामित पाइप * और * सॉकेट *। – hakre

+0

क्षमा करें, चीजों को आजमाने के लिए मुझे कुछ समय लगा। मैं एक सी ++ उदाहरण को एकाधिक PHP स्क्रिप्ट में रखने के लिए, सी ++ में "सर्वर" के अधिक से अधिक की तलाश में था। नामित पाइप समाधान मेरे लिए ठीक काम करेगा :) किसी और के लिए यह कोशिश कर रहा है, मैंने इन लिंक को कुछ हद तक सहायक पाया: http://my.opera.com/zomg/blog/2007/08/29/php-and-named -पिप्स और http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-3-accepting-input-from-named-pipes/ और http://squirrelshaterobots.com/ प्रोग्रामिंग/php/इमारत-ए-पंक्ति-सर्वर में php-भाग-3-स्वीकार करने-इनपुट-से-नाम-पाइप / – dcc310

संबंधित मुद्दे