我在透過 HTTP 載入文件時遇到問題。我會收到類似這樣的錯誤
警告:DOMDocument::load(http://external/document.xml):無法開啟串流:HTTP 請求失敗!HTTP/1.1 500 內部伺服器錯誤
該文件在瀏覽器和使用 wget 時都可以正常載入。問題是我的系統(OS X 和 Linux)上的 DOMDocument::load() 沒有傳送任何 User-Agent 標頭,這導致 Microsoft-IIS/6.0 因某些奇怪的原因而回應 500 錯誤。
解決方案可以在 https://php.dev.org.tw/manual/en/function.libxml-set-streams-context.php 上找到。
<?php
$opts = array(
'http' => array(
'user_agent' => 'PHP libxml agent',
)
);
$context = stream_context_create($opts);
libxml_set_streams_context($context);
// 透過 HTTP 請求檔案
$doc = DOMDocument::load('http://www.example.com/file.xml');
?>