1

我正在使用以下内容:

@header("Cache-Control: no-cache, must-revalidate");
@header("Content-Type: application/octet-stream");
@header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
@header("Content-Length: ".$row['file_size']);
@header("Content-Disposition: attachment; filename=\"".$row['artist'] . " - " .$row['title']."\"");
@header("Content-type: audio/mpeg;\r\n");

开始下载,现在由于某种原因它给了我

警告:readfile(http://theurl.com/downloads/the file some spaces.mp3) [function.readfile]: failed to open stream: HTTP request failed!HTTP/1.1 404 Not Found in /home/belgin/public_html/dl.php on line 29

现在 url 是有效的,我已经检查了三次,但可能是因为文件名中有空格吗?如果是这样,我该如何解决?谢谢

重新归档行:

readfile(http://domain.com/downloads/Warp 1.9_The Bloody Beetroots_320000.mp3)
4

4 回答 4

3

I think your going to need to urlencode() and html_entities() the url or filename or whatever

于 2010-09-29T20:15:34.603 回答
2

该网址似乎包含空格。你是否正确地转义它以便在 readfile() 中使用?

于 2010-09-29T20:12:16.560 回答
2

不要编码网址!它会像http%3A%2F%2Fexample.com%2Fsome%20song.mp3. 你只需要替换空格。所以str_replace改用...

readfile(str_replace(" ", "%20", $url));

于 2012-05-12T12:36:01.967 回答
0

urlencode() 不是要走的路。如上所述,只需使用 str_replace()。

这里只是另一种可能,为什么它不起作用。这就是我的原因。有趣的是,file_exists 返回了 true,但是如果没有正确设置以下内容,则无法向公众提供文件以供下载。

PHP 有一个名为open_basedir的设置

确保设置正确,与您的托管环境相关。open_basedir 可以通过 php.ini 进行编辑

于 2013-10-11T01:18:43.987 回答