2011-07-07 5 views
11

मेरे पास दो PHP पृष्ठ हैं। मैं a.php में b.php लाने के लिए चाहता हूँ।PHP में सापेक्ष पथ के साथ कर्ल का उपयोग करना संभव है?

मेरी a.php में:

$ch = curl_init("b.php"); 
echo(curl_exec($ch)); 
curl_close($ch); 

काम नहीं करता;

लेकिन:

$ch = curl_init("www.site.com/b.php"); 
echo(curl_exec($ch)); 
curl_close($ch); 

ठीक है। मुझे यकीन है कि a.php www.site.com के अंतर्गत है।

क्यों कर्ल सापेक्ष पथ के साथ काम नहीं कर सकता है? क्या आसपास कोई काम है?

+2

यह पहली जगह में सापेक्ष पथ को कर्ल करने का बिल्कुल कोई मतलब नहीं है। क्या आप समझा सकते हैं कि आपको क्यों लगता है कि इसे काम करना चाहिए? यह कैसे काम करेगा? एक वर्कअराउंड के रूप में बस 'a.php' पर पूरा यूआरएल बनाएं और उसमें पास करें। – BoltClock

+0

मुझे लगता है कि इसे जावास्क्रिप्ट में XMLHTTPRequest के रूप में काम करना चाहिए जो सापेक्ष पथ स्वीकार करता है। जावास्क्रिप्ट में –

+1

XMLHTTPRequest वर्तमान बेस यूआरएल के बारे में जानता है। curl तब तक नहीं करता जब तक आप इसे बताने के लिए न्यूनतम प्रयास नहीं करते। और यही है कि 'curl_init' के लिए है। – mario

उत्तर

13

कर्ल एक अलग पुस्तकालय जो वास्तव में वेबसर्वर और कहाँ से आ रहा है या (philosophicaly) के बारे में कुछ भी पता नहीं है वह वहाँ क्यों है है। तो आप कर सकते हैं 'झूठे' सापेक्ष URL दो _SERVER चर से एक का उपयोग:

$_SERVER['SERVER_NAME'] 

सर्वर होस्ट जिसके तहत वर्तमान स्क्रिप्ट पर कार्य कर रहा है का नाम है। यदि वर्चुअल होस्ट पर स्क्रिप्ट चल रही है, तो यह उस वर्चुअल होस्ट के लिए परिभाषित मान होगा।

$_SERVER['HTTP_HOST'] 

होस्ट की सामग्री: वर्तमान अनुरोध से हैडर, अगर वहाँ एक है।

देखें: http://php.net/manual/en/reserved.variables.server.php

संपादित करें अद्यतन: तुम सच में कर्ल के साथ इसे लाने की जरूरत है: मैं एक पल के लंबे समय तक इस बारे में सोचा है? आप आम तौर पर भी इस तरह एक और स्क्रिप्ट के किसी भी उत्पादन लाने और एक नया http अनुरोध के माध्यम से लोड करने की भूमि के ऊपर बचाने हो सकता है:

ob_start(); 
require "b.php"; 
$output = ob_get_clean(); 
4

cUrl को संचालित करने के लिए एक पूर्ण यूआरआई की आवश्यकता है।

एक सापेक्ष यूआरआई काम नहीं करता है क्योंकि कोई आधार यूआरआई नहीं दिया गया है जिसके लिए संबंधित सापेक्ष यूआरआई पूर्ण है।

हालांकि, यदि आपके पास आधार यूआरआई और रिश्तेदार यूआरआई दोनों हैं, तो रिश्तेदार यूआरआई के पूर्ण यूआरआई बनाएं और इसे सीयूआरएल के साथ उपयोग करें।

12.4.1 Resolving relative URIs देखें।

एक PHP वर्ग जो एक सापेक्ष यूआरआई के आधार पर एक पूर्ण यूआरआई बना सकता है और इसका आधार Net_URL2 पैकेज में नाशपाती है।

3

curl मुख्य रूप से बाहरी डोमेन से डेटा पुनर्प्राप्त करने के लिए उपयोग किया जाएगा, इसलिए यह सापेक्ष पथों को अनुमति देने के लिए बहुत अधिक समझ नहीं लेगा। करने के लिए सबसे आसान बात सिर्फ यूआरएल पर अपने वर्तमान डोमेन को जोड़ना होगा।

$domain = $_SERVER['HTTP_HOST'] . "/"; 
$ch = curl_init($domain . "b.php"); 
echo(curl_exec($ch)); 
curl_close($ch); 
14

डोमेन को HTTP_HOST से कैसे लेना है?

$domain = $_SERVER['HTTP_HOST']; 
$prefix = $_SERVER['HTTPS'] ? 'https://' : 'http://'; 
$relative = '/b.php' 
$ch = curl_init($prefix.$domain.$relative) 
+1

$ _SERVER ['HTTPS'] की जांच करने के लिए भी समझदारी होगी – wonk0

1

कर्ल अपने ऑपरेटिंग वातावरण का बिल्कुल ज्ञान नहीं होता। यह जानने का कोई तरीका नहीं है कि 'बी.एफ.पी.' कहां है। क्या इसे example.org/b.php या some.wonky.multi.level.domain.co.uk/b.php में बदलना चाहिए?

यहां तक ​​कि इसे स्थानीय फ़ाइल संदर्भ के रूप में भी इलाज करना बेकार होगा ... कर्ल को यह नहीं पता होगा कि .php फ़ाइल वास्तव में एक PHP स्क्रिप्ट है। यहां तक ​​कि यदि यह स्थानीय फ़ाइल लाने के लिए भी होता है, तो आपको PHP स्रोत प्राप्त होने के बाद ही PHP स्रोत प्राप्त होगा, स्क्रिप्ट के आउटपुट के बाद नहीं। क्या होगा यदि आपके पास arstechnica.com जैसी साइट है जहां इसके सभी पृष्ठ वास्तव में .ars स्क्रिप्ट हैं? क्या वह .asp है? .aspx? .html? PHP स्क्रिप्ट? पर्ल? माणिक?

तो .. सरल उत्तर: आपको कर्ल चलाने के लिए प्रोटोकॉल के साथ हमेशा एक संपूर्ण यूआरएल निर्दिष्ट करना होगा।

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