2011-06-30 31 views
5

我有下面的這段代碼,它可以在我的遠程託管服務器上正常工作,但不是出於某種原因在本地linux機器上工作。我也嘗試使用file_get_contents以獲得寧靜的服務,但它也返回false。simplexml_load_file不工作

有誰知道爲什麼會發生這種情況?

謝謝:)

$xml_data = simplexml_load_file("****"); 

if ($xml == FALSE) 
{ 
    echo "Failed loading XML\n"; 

    foreach (libxml_get_errors() as $error) 
    { 
    echo "\t", $error->message; 
    } 
} 
+0

你可以做一些像'file_get_contents(「http:/ /www.example.com「);'驗證你可以調用任何遠程文件? –

回答

10

因爲遠程文件訪問已在服務器上禁用您收到此錯誤。另一種方法是使用CURL。

用我下面的代碼使用捲曲:

function produce_XML_object_tree($raw_XML) { 
    libxml_use_internal_errors(true); 
    try { 
     $xmlTree = new SimpleXMLElement($raw_XML); 
    } catch (Exception $e) { 
     // Something went wrong. 
     $error_message = 'SimpleXMLElement threw an exception.'; 
     foreach(libxml_get_errors() as $error_line) { 
      $error_message .= "\t" . $error_line->message; 
     } 
     trigger_error($error_message); 
     return false; 
    } 
    return $xmlTree; 
} 

$xml_feed_url = '******'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $xml_feed_url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$xml = curl_exec($ch); 
curl_close($ch); 

$cont = produce_XML_object_tree($xml); 

現在使用$cont作爲對象的XML訪問不同的節點。

+0

工程就像一個魅力!謝謝! :) –

+0

太棒了!繼續。 –

1

使用這樣

$xml = simplexml_load_file('http://localhost/test/123.xml'); 

foreach ($xml->children() as $child) { 
    $remoteCount[$child->getName()] = $child; 

} 
var_dump($remoteCount); 
1

變化:if ($xml == FALSE)if ($xml === FALSE)source)。

3

嗯,我有同樣的問題,雖然我會發布此協助任何人可能還沒有嘗試過這種解決方案。

我有一個PHP腳本可以在本地正常工作,但是在運行plesk的客戶端服務器上使用它時,它在嘗試抓取外部xml文件時不起作用並失敗。

我想從php腳本引用外部xml文件。我使用的服務器正在運行plesk。在考慮更改主機之前,我所做的只是更新服務器上PHP的設置,以便作爲Apache模塊而不是FastCGI運行。

我正在接受(例如)

錯誤消息:

警告:使用simplexml_load_file(URL)function.simplexml加載文件]:未能打開流:權限被拒絕

這解決了問題我的情況。

我用下面的PHP腳本報告設置:

assert_options(ASSERT_ACTIVE, 1); 
assert_options(ASSERT_BAIL, 1); 
assert_options(ASSERT_QUIET_EVAL, 1); 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
0

我這只是在simplexml的一個愚蠢的未申報點了同樣的問題

XML文件的格式應該有一個容器標籤,所以,你只需要把一個包含所有數據的父標籤放在這裏:

<?xml version="1.0"> 
<data> 
    ...all your file content here... 
</data>