2011-03-23 17 views
22

मुझे उसी सर्वर पर या किसी अन्य सर्वर पर स्थित पृष्ठों पर POST कॉल करने के लिए एक तरीका लागू करने की आवश्यकता है। हम शामिल नहीं कर सकते हैं क्योंकि जिन फ़ाइलों को हम कॉल कर रहे हैं वे आम तौर पर अलग-अलग डेटाबेस को कॉल करते हैं या एक ही नाम के साथ कार्य करते हैं।क्या मैं एक ही सर्वर पर एक कर्ल अनुरोध कर सकता हूं?

मैं कर्ल का उपयोग करके इसे कार्यान्वित करने की कोशिश कर रहा हूं, और जब यह किसी अन्य सर्वर से फ़ाइलों को कॉल करते समय पूरी तरह से काम करता है, तो मुझे उसी सर्वर पर कॉल करने पर बिल्कुल कुछ नहीं मिलता है जहां फ़ाइल है।

संपादित कुछ कोड जोड़ने के लिए: मैं क्या कर रहा हूँ का एक सरलीकृत संस्करण:

File1.php

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php"); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 
?> 

File2.php

<?php 
echo "I'M IN!!"; 
?> 

File1.php कॉल करने के बाद , मुझे कुछ भी नहीं मिला, लेकिन अगर File2.php किसी अन्य सर्वर में है तो मुझे परिणाम मिल जाएगा। कोई मदद?

मैं दोनों सर्वर URL (http ...) और फ़ाइलों की कुल पता उपयोग करने की कोशिश (/ घर/wwww ....)

+0

कुछ हैकी वर्कअराउंड –

+0

पर असली समस्या का सामना न करें हाँ, आप सामान्य रूप से अनुरोध कर सकते हैं, लेकिन स्थानीय रूप से फ़ाइल के रूप में यूआरएल को नहीं बदल सकते हैं। उदाहरण के लिए रिमोट सर्वर के रूप में यूआरएल का उपयोग करें: http://site.com .. क्या मैं आपका कोड देख सकता हूं? –

+0

"http://mysite.com" जैसे पूर्ण पते का उपयोग करने के बजाय, "लोकलहोस्ट" का उपयोग करें। यह मेरे मामले में काम किया। – MKatleast3

उत्तर

44

ध्यान रखें कि यदि आप के लिए कर्ल अनुरोध पत्र जारी करने जा रहे हो अपनी साइट, आप डिफ़ॉल्ट सत्र हैंडलर का उपयोग कर रहे हैं, और जिस पृष्ठ पर आप कर्ल के माध्यम से अनुरोध कर रहे हैं, उसी पृष्ठ का उपयोग उसी पृष्ठ के रूप में करता है जो अनुरोध उत्पन्न कर रहा है, आप डेडलॉक स्थिति में भाग लेंगे।

डिफ़ॉल्ट सत्र हैंडलर पृष्ठ अनुरोध की अवधि के लिए सत्र फ़ाइल को लॉक करता है। जब आप एक ही सत्र का उपयोग करके किसी अन्य पृष्ठ का अनुरोध करने का प्रयास करते हैं, तो बाद का अनुरोध अनुरोध समय समाप्त होने तक या सत्र फ़ाइल उपलब्ध होने तक लटका होगा। चूंकि आप एक आंतरिक कर्ल कर रहे हैं, इसलिए कर्ल चलाने वाली स्क्रिप्ट सत्र फ़ाइल पर लॉक रखेगी, और कर्ल अनुरोध कभी पूरा नहीं हो सकता क्योंकि लक्ष्य पृष्ठ सत्र को कभी लोड नहीं कर सकता है।

+0

तो, मैं एक ही सर्वर पर एक कर्ल अनुरोध नहीं कर सकता? क्या इस के आसपास काम करने का कोई तरीका है? – Trialien

+21

आप यह सुनिश्चित कर सकते हैं कि कर्ल अनुरोध करने वाली स्क्रिप्ट 'curl_exec() 'से पहले' session_write_close()' के साथ सत्र बंद कर देती है। यदि आप सत्र में कुछ भी बदलना चाहते हैं तो आप हमेशा बाद में 'session_start()' कर सकते हैं। –

+3

मुझे लगता है कि मार्क की टिप्पणी जवाब में होनी चाहिए, क्योंकि यह मेरी समस्या को ठीक कर देता है –

1

आपको अपना कोड दोबारा करना चाहिए। मार्क बी के उल्लेख के अलावा, यह दृष्टिकोण अनावश्यक रूप से आपकी स्क्रिप्ट को धीमा कर देगा (संभावित रूप से बड़े मार्जिन द्वारा) और बहुत भ्रम पैदा कर सकता है। कोई अपराध नहीं, लेकिन यह खराब तर्क के लिए एक अविश्वसनीय रूप से हैकी फिक्स है।

+0

मैं समझता हूं कि आपका क्या मतलब है, लेकिन यह हमारे उत्पादन सर्वर पर कुछ नहीं है, इसका उपयोग पृष्ठभूमि प्रक्रिया के लिए किया जाएगा जहां प्रदर्शन एक नहीं है मुद्दा। अभी भी आपके इनपुट के लिए धन्यवाद। – Trialien

2

क्योंकि जब आपने सार्वजनिक सर्वर के साथ स्थानीय सर्वर से अनुरोध करने का प्रयास किया, तो अपाचे अपने स्थानीय डोमेन को हल नहीं कर सका। तो आपको यह जांचना होगा कि उस डोमेन के लिए कौन सा स्थानीय आईपी अपाचे उपयोग कर रहा है। फिर आपको/etc/hosts फ़ाइल को संपादित करने और स्थानीय आईपी प्लस अपने डोमेन के साथ नई पंक्ति जोड़ने की आवश्यकता है। उदाहरण के लिए:

अपाचे के वर्चुअल होस्ट में कि डोमेन के लिए मेरे स्थानीय आईपी है: 172.190.1.120 और अपने डोमेन mydomain.com तो मैं जोड़ देगा है:

172.190.1.120 mydomain.com

फिर आपका कर्ल ठीक से काम करेगा।

+0

यह मेरे साथ हो रहा था :) कर्ल अनुरोध सभी यूआरएल के लिए काम किया लेकिन मेरा और यह चाल है। समाधान के लिए धन्यवाद – Sogeking

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

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