使用Content-disposition查看文件内容:使用套接字附件

时间:2010-02-04 17:13:23

标签: php content-disposition fsockopen

我想解析动态.csv文件的内容。但是,这段代码(显然有duff文件名等):

$socket = fsockopen("www.example.com", 443);
fwrite($socket, "GET /dynamicCsv.csv?param=value HTTP/1.1\r\n");
fwrite($socket, "Host: www.example.com\r\n");
fwrite($socket, "Connection: close\r\n");
fwrite($socket, "\r\n");

while(!feof($socket)) echo fgets($socket);

...只需下载文件。

在命令行使用openssl我可以输入完全相同的请求并获得以下回复的响应头:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-disposition: attachment; filename=dynamicCsv.csv
Pragma: public
Cache-Control: max-age=0
Set-Cookie: SESSIONID=ASDFUHN023UIN0F; Path=/; Secure
Content-Type: text/csv;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 04 Feb 2010 16:53:00 GMT

为了避免自动下载文件,我试图使用substr删除第一个字符,希望浏览器可能会将fgets的响应输出视为一组标题目前的文件。那没用。追求相同的想法我也尝试在打开套接字之前插入一堆换行符,这也没用。

我的两个问题是:

  1. 为什么浏览器认为它应该下载文件?
  2. 我该如何阻止它?
  3. 我应该提到我到目前为止我只使用过Chrome,但我不明白为什么它会有所作为。

    非常感谢, 安德烈亚斯

2 个答案:

答案 0 :(得分:1)

好的,我实际上自己设法解决了。作为参考,我没有删除问题,而是使用修复程序添加此响应。

问题在于

fsockopen("www.example.com", 443);

我没有指定使用ssl协议。所以修复是改为输入:

fsockopen("ssl://www.example.com", 443);

答案 1 :(得分:0)

您可以考虑使用cURLsome other wrapper