2010-10-20 20 views
34
$xml_file = file_get_contents(SITE_PATH . 'cms/data.php'); 

समस्या एक सर्वर URL फाइल एक्सेस अक्षम होता है। मैं इसे सक्षम नहीं कर सकता, यह एक होस्टिंग चीज है।file_get_contents के लिए वैकल्पिक?

तो सवाल यह है। data.php फ़ाइल एक्सएमएल कोड उत्पन्न करता है।

मैं यह कैसे निष्पादित और उपरोक्त विधि कर के बिना xml डेटा प्राप्त कर सकते हैं?

क्या यह संभव है?

+0

की तरह कर सकते हैं SITE_PATH हिस्सा है * अपने * साइट? या यह कहीं और है? – VoteyDisciple

+0

यह मेरी साइट का हिस्सा है। SITE_PATH = 'http://mydomain.com/'; की – JasonS

+0

संभव डुप्लिकेट [वेबसाइटों खुरच कैसे जब cURL और allow_url_fopen अक्षम किया गया है] (http://stackoverflow.com/questions/3880628/how-to-scrape-websites-when-curl-and-allow-url-fopen-is -disabled) – Gordon

उत्तर

96

उपयोग cURL। यह फ़ंक्शन file_get_contents का विकल्प है।

function url_get_contents ($Url) { 
    if (!function_exists('curl_init')){ 
     die('CURL is not installed!'); 
    } 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 
+5

इस समारोह ने मुझे बचाया। धन्यवाद। –

+0

लेकिन फिर भी मुझे "कर्ल स्थापित नहीं है!" लेकिन मैंने php_curl और php_openssl एक्सटेंशन –

+0

"कर्ल स्थापित नहीं है" का अर्थ है कि आपको curl इंस्टॉल करने की आवश्यकता है। इन दिनों दुर्लभ स्थिति कौन सा है, अधिकांश सिस्टम इसे डिफ़ॉल्ट रूप से स्थापित करते हैं। अधिकांश डीपीकेजी-आधारित डिस्ट्रोज़ * php5_curl * नामक एक पैकेज की सेवा करते हैं जो सही निर्भरताओं और कॉन्फ़िगरेशन निर्देशों के साथ आता है। –

3

हाँ, आप यूआरएल रैपर अक्षम आप सॉकेट का उपयोग करना चाहिए या और भी बेहतर, cURL पुस्तकालय है।

अगर यह आपकी साइट तो फ़ाइल सिस्टम पथ, नहीं वेब यूआरएल के साथ यह उल्लेख करने के लिए का हिस्सा है। /var/www/..., http://domain.tld/... के बजाय।

1

आप file_get_contents() बिना किसी URL से उत्पन्न एक्सएमएल पढ़ने के लिए प्रयास कर रहे हैं तो आप शायद यदि आप इसे उपलब्ध, कर्ल का उपयोग कर अपने सबसे अच्छा विकल्प है है cURL

1

पर एक नजर है चाहता हूँ।

आप देख सकते हैं अगर यह phpinfo() कर रहे हैं और कर्ल के लिए पेज खोज से सक्षम है।

यह सक्षम है, तो यह प्रयास करें:

$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php'); 
$xml_file = curl_exec($curl_handle); 
curl_close($curl_handle); 
2

तो फ़ाइल अपनी टिप्पणी के रूप में स्थानीय है के बारे में SITE_PATH सुझाव है, यह सिर्फ स्क्रिप्ट को निष्पादित और का उपयोग कर एक चर में परिणाम कैश बहुत आसान है output control functions:

function print_xml_data_file() 
{ 
    include(XML_DATA_FILE_DIRECTORY . 'cms/data.php'); 
} 

function get_xml_data() 
{ 
    ob_start(); 
    print_xml_data_file(); 
    $xml_file = ob_get_contents(); 
    ob_end_clean(); 
    return $xml_file; 
} 

तो इसके बारे में बहुत कुछ के रूप में दूरदराज है अन्य ने कहा curl जाने का रास्ता है। यदि यह मौजूद नहीं है तो socket_create या fsockopen आज़माएं। अगर कुछ भी काम नहीं करता है ... अपने होस्टिंग प्रदाता को बदलें।

5

आप कुछ इस तरह की कोशिश करनी चाहिए, मैं अपने प्रोजेक्ट, इसकी एक fallback प्रणाली के लिए यह कर रहा हूं

//function to get the remote data 
function url_get_contents ($url) { 
    if (function_exists('curl_exec')){ 
     $conn = curl_init($url); 
     curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true); 
     curl_setopt($conn, CURLOPT_FRESH_CONNECT, true); 
     curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1); 
     $url_get_contents_data = (curl_exec($conn)); 
     curl_close($conn); 
    }elseif(function_exists('file_get_contents')){ 
     $url_get_contents_data = file_get_contents($url); 
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){ 
     $handle = fopen ($url, "r"); 
     $url_get_contents_data = stream_get_contents($handle); 
    }else{ 
     $url_get_contents_data = false; 
    } 
return $url_get_contents_data; 
} 

फिर बाद में आप इस

$data = url_get_contents("http://www.google.com"); 
if($data){ 
//Do Something.... 
} 
संबंधित मुद्दे