无法打开流 - DOM和File_Put_Contents

时间:2017-03-11 10:46:26

标签: php url dom simplexml fopen

我有一个cronjob,可以从不同的URL下载不同的文件并修改数据。好奇的是,一切都运作良好,现在我想再添加两个URL,但是这些URL我有一些问题......

但我不知道为什么......所有网址(8)都使用相同的功能。但只有2个新网址引发了这个错误。我不允许在此提供网址,但我可以说我可以在Chrome浏览器中下载这两个网址。

我使用DOM加载一个URL:

function fetchXmlDocument($url, $output, $dom = null){
    if (!$dom instanceof DOMDocument) {
        $dom = new DOMDocument('1.0', 'utf-8');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
    }

    $dom->load($url);
    $dom->save($output);
    return $dom;
}

我收到此错误:

  

DOMDocument :: load(http://myurl.de):无法打开流:HTTP   请求失败! HTTP / 1.1 403禁止

     

DOMDocument :: load():I / O警告:无法加载外部实体   ...

其他网址加载了fopen:

function fetchCsvDocument($url, $output){
    return file_put_contents($output, fopen($url, 'r'));
}

我收到此错误:

  

的fopen(http://myurl.de):   无法打开流:HTTP请求失败! HTTP / 1.1 503服务   暂时不可用

有人知道如何修复此错误吗? 我只是不知道为什么我可以使用浏览器下载URL,但PHP告诉我403或甚至503。

我使用这些功能下载的其他文件和修改不会引发此错误......?

问候,谢谢!

1 个答案:

答案 0 :(得分:0)

403 Forbidden:

服务器很可能检测到请求不是来自浏览器(并且可能不喜欢)和/或服务器想要一些会话状态(浏览器发送,但您的代码可能不是)。

要查看在浏览器和服务器之间发送的内容,请在Chrome中按F12并选择“网络”,然后点击链接以查看HTTP标头。

503服务暂时不可用可能是相同的原因(如果该网址也可以在浏览器中使用)。

同时检查http与https。

另一个原因可能是网址不正确encoded(即用%20替换空格)浏览器会自动执行此操作