我正在使用以下内容:
@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]:无法打开流:HTTP请求失败!找不到HTTP / 1.1 404 在 /home/belgin/public_html/dl.php 上 29
现在网址是有效的,我已经检查了三次,但可能是因为文件名中有空格?如果是这样我怎么能解决这个问题呢?感谢
reafile line:
readfile(http://domain.com/downloads/Warp 1.9_The Bloody Beetroots_320000.mp3)
答案 0 :(得分:3)
我认为你需要urlencode()和html_entities()网址或文件名或其他
答案 1 :(得分:2)
似乎网址包含空格。你是否正确地将其转义以便在readfile()中使用?
答案 2 :(得分:1)
不要编码网址!它将编码为http%3A%2F%2Fexample.com%2Fsome%20song.mp3
。你只需要替换空格。所以请使用str_replace
代替......
readfile(str_replace(" ", "%20", $url));
答案 3 :(得分:0)
urlencode()不是要走的路。如上所述,只需使用str_replace()。
这里只是另一种可能性,为什么它不起作用。这是我的原因。有趣的是,file_exists返回true,但没有任何形式向公众提供下载文件而没有正确设置以下内容。
PHP有一个名为 open_basedir
的设置确保将此设置与您的托管环境正确相关。 open_basedir可以通过php.ini
编辑