file_get_contents()和stream_get_contents()无法打开流

时间:2011-09-23 19:56:39

标签: php curl urlencode

我正在尝试通过发送特殊标头来强制下载文件。在这样做时,我必须通过我的下载脚本重定向PDF文档的URL请求。

我在发送之前传递一个名为$ seg3的查询,它是base64_encode()ed,然后在尝试请求文件时传递base64_decode()ed和urlencoded()。

我看了一下使用,

if (ini_get('allow_url_fopen') == '1')
{
   $data = file_get_contents(urlencode(base64_decode($seg3)));
}
else
{
   $fp = fopen(urlencode(base64_decode($seg3)), 'rb');
   $data = stream_get_contents($fp);
   fclose($fp);
}

file_get_contents()stream_get_content()都失败了:

fopen($URL): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

然而,当我转储正在发送的URL时,我可以将其复制并粘贴到浏览器中并打开文件。

只有在文件中有空格时才会出现这种情况,但无论是否使用urlencode(),都会出现错误。

2 个答案:

答案 0 :(得分:2)

可能是url返回404错误,但仍然会返回常规内容。因此,虽然浏览器可能会显示常规页面,但由于结果代码,此函数将失败。

答案 1 :(得分:0)

我确定已经修复了这个问题,但如果有空格,urlencode($ url)可能会解决您的问题。