2010-09-29 91 views
0

我使用了以下內容:READFILE問題PHP

@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/下載/文件一些spaces.mp3)[函數.readfile]:未能打開流:HTTP請求失敗! HTTP/1.1 404未在/home/belgin/public_html/dl.php找到 上線

現在的網址是有效的,我三重檢查,但不可能是因爲有空間文件名?如果是的話,我該如何解決這個問題?由於

reafile行:

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

顯示'readfile'行,我們可以告訴你如何逃避它。 – 2010-09-29 20:14:14

+0

好的我已經更新了 – 2010-09-29 20:19:51

+1

除了可能的urlencode()的URL,你的代碼片段沒有用引號括起URL(一個字符串)?! – MrWhite 2010-09-29 20:36:35

回答

3

我認爲你將需要進行urlencode()和html_entities()的網址或文件名或任何

+0

我希望它的東西像readfile($文件名),如果是,將它改爲 readfile(html_entities(urlencode($ filename))); – Ascherer 2010-09-29 20:25:20

+0

它應該是'readfile(urlencode($ filename));''no'htmlentities()',它只需要轉義要在(X)HTML中使用的字符串(在標籤,屬性或顯示中)。 – Archimedix 2010-09-29 20:34:05

+0

現在我得到了readfile(http://domain.com/downloads%2FWarp+1.9_The+Bloody+Beetroots_320000.mp3)這是行不通的(無效的網址和everyhting) – 2010-09-29 20:36:47

2

看來,URL包含空格。你在readfile()裏面正確地轉義它嗎?

+0

我該怎麼做 – 2010-09-29 20:19:29

+0

你可以使用'urlencode()'。 – 2016-12-04 15:58:47

1

切勿編碼網址!它將編碼爲http%3A%2F%2Fexample.com%2Fsome%20song.mp3。你只需要替換空格。所以使用str_replace,而不是...

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

+0

或使用[urlencode()](http://www.php。淨/手動/ EN/function.urlencode.php) – Julien 2012-10-21 09:16:26

0

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

這裏只是另一種可能性,爲什麼它不工作。這是我的原因。有趣的是,file_exists返回true,但沒有任何形式的文件供公衆下載使用,但沒有正確設置下面的內容。

PHP有一個叫做的open_basedir

確認這是正確的相關設置爲您的託管環境設置。 open_basedir可以通過php.ini編輯