2

我在下面写了函数:

function download_xfs($url)  
{
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_COOKIE, 'login=michael; xfss=08ruiweu4tuhb5xqs8');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $string = curl_exec ($ch);  
    curl_close ($ch);  
    // Set headers
}

当我使用download_xfs("http://address.com/file.html");它时,它返回文件的二进制文件而不是实际文件。任何人都可以重新编写此代码来处理下载文件吗?

4

1 回答 1

0

您的错误不在于下载文件,PNG 可能已下载 OK,但您可能只是将其回显到屏幕上。您必须为此文件 mime 类型设置适当的 HTTP 标头:

header('内容类型:图片/png');

但请记住不要在图像内容之前和之后回显任何其他字符串/字符(绝对没有,即使是 Windows 记事本在 php 文件开头创建的关于 UTF 的不可见 BOM 信息)。如果您想在您的 HTML 页面中包含可由您的服务器下载的图像,您必须使用此标头和图像内容创建另一个 .php 并通过以下方式包含它:

<img src="image_from_download.php">

如果您想接收纯文本,但有意外的二进制文件

远程服务器上可能有一些未知的解决方案,它会根据用户代理发送不同的内容或将您重定向到图像。

尝试将 cUrl 中的用户代理设置为与原始浏览器相同。

Accept此外,通过在 HTTP 请求中发送正确的标头,确保远程服务器提供的内容没有被压缩或分块(我不知道,那个 curl 会自动解压缩它?) 。

这个问题也可能与状态有关,也许您需要设置一些 cookie 或登录远程 Web 应用程序,从中检索 .html

尝试关闭您的FOLLOWLOCATION,也许您收到 30 倍重定向到图像。

于 2013-01-26T11:46:04.143 回答