2009-03-29 3 views
11

Tôi đã thấy một số câu hỏi tương tự như vậy trên internet, không có câu trả lời nào.Tải một trang xml từ xa với file_get_contents()

Tôi muốn trả lại nguồn của một trang XML từ xa thành một chuỗi. Trang XML từ xa, cho các mục đích của câu hỏi này, là:

http://www.test.com/foo.xml 

Trong trình duyệt web thông thường, tôi có thể xem trang và nguồn là tài liệu XML. Tuy nhiên, khi tôi sử dụng file_get_contents('http://www.test.com/foo.xml'), nó trả về một chuỗi có URL tương ứng.

Có truy xuất thành phần XML không? Tôi không quan tâm nếu nó sử dụng file_get_contents hay không, chỉ cần cái gì đó sẽ làm việc.

+0

Xem câu hỏi này: http://stackoverflow.com/questions/692962/how-to-use-php-to-get-a-webpage-into-a-variable/ –

Trả lời

14

Bạn cần phải đặt allow_url_fopen trong máy chủ của mình để máy tính này hoạt động.

Nếu bạn không, sau đó bạn có thể sử dụng chức năng này như một sự thay thế:

<?php 
function curl_get_file_contents($URL) 
    { 
     $c = curl_init(); 
     curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($c, CURLOPT_URL, $URL); 
     $contents = curl_exec($c); 
     curl_close($c); 

     if ($contents) return $contents; 
      else return FALSE; 
    } 
?> 

vay từ here.

+0

Không nhất thiết phải thay thế - các hàm này yêu cầu PHP được biên dịch với cURL được kích hoạt. Nếu fopen-wrappers bị vô hiệu hóa thì chức năng cURL cũng có thể bị vô hiệu hóa. Tốt hơn nên sử dụng hàm fsockopen() để an toàn. –

+1

Tôi đã đi vào rất nhiều hostings có fopen-wrappers vô hiệu hóa nhưng không cURL, do đó, trong khi đó là sự thật nó không phải là chính xác một sự thay thế, nó có thể là một workaround tốt đẹp. – Seb

+0

Đối với câu lệnh return, tôi thích một biểu thức bậc ba, như sau: 'return ($ contents)? $ nội dung: false; ' – Nolwennig

13

Điều đó có vẻ kỳ quặc. File_get_contents() có trả về bất kỳ dữ liệu hợp lệ nào cho các trang web khác (không chỉ XML) không? Chỉ có thể sử dụng URL làm tham số tên tệp nếu the fopen-wrappers đã được bật (mặc định là chúng).

Tôi đoán bạn sẽ xử lý XML đã truy xuất sau này - sau đó bạn sẽ có thể tải nó vào SimpleXml trực tiếp bằng cách sử dụng simplexml_load _file().

try { 
    $xml = simplexml_load_file('http://www.test.com/foo.xml'); 
    print_r($xml); 
} ... 

Tôi khuyên bạn nên sử dụng SimpleXML để đọc tệp XML, rất dễ sử dụng.