2011-09-23 91 views
0

我試圖通過發送特殊的頭文件來下載文件。這樣做,我必須通過我的下載腳本重定向PDF文檔的URL請求。file_get_contents()和stream_get_contents()無法打開流

我在發送之前傳遞一個名爲$ seg3的查詢,它是base64_encode(),然後在嘗試請求文件時傳遞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 

然而,當我轉儲正在發送的網址,我可以複製將其粘貼到我的瀏覽器中並打開文件。

它似乎只發生在文件中有空格時,不管是否使用urlencode(),都會發生錯誤。

+1

'allow_url_fopen'檢查看起來多餘。 'fopen'和'file_get_contents'都依賴於它。如果禁用了,fopen也會失敗。 – hakre

回答

2

這可能是一個url返回一個404錯誤,但仍然返回正常的內容。因此,雖然瀏覽器可能會顯示常規頁面,但由於結果代碼,此功能將失敗。

+0

雖然URL很好。如果我手動在瀏覽器中輸入它,它會下載文件。通過stream_get_contents()或file_get_contents(),當PDF文檔的名稱中有空格時,它們都會失敗_only_。 – bafromca

+0

@BrettAlton:在名字中留有空格意味着這不是一個有效的URI。 URI中的空間需要進行編碼。 – hakre

0

我相信這已被修復,但如果有空格urlencode($ url)可能會解決您的問題。

+0

我不相信我解決了這個問題。 PS我在問題中提到:「它似乎只發生在文件中有空格時,不管是否使用urlencode(),都會發生錯誤。」 – bafromca

+0

你有可能切換到CURL嗎?您將對頭文件有更多的控制,並且在將代碼切換到頭文件後,我注意到錯誤數量大幅減少。 –

相關問題