2012-11-22 79 views
1

我使用PHP的文件下載頁面。這裏的問題代碼片段:本地測試的時候,但部署到現場服務器後,瀏覽器返回一個「找不到網頁」的錯誤PHP下載頁面:file_exists()返回true,但瀏覽器返回「找不到網頁」

if (file_exists($attachment_location)) { 
    header($_SERVER["SERVER_PROTOCOL"] . " 200 OK"); 
    header("Cache-Control: public"); // needed for i.e. 
    header("Content-Type: application/zip"); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-Length:".filesize($attachment_location)); 
    header("Content-Disposition: attachment; filename=file.zip"); 
    readfile($attachment_location); 
    die("Hooray"); 
} 
else { 
    die("Error: File not found."); 
} 

此代碼工作絕對沒問題。我認爲這可能是一個.htaccess問題,但活動服務器上的所有.htaccess文件與其本地對應文件完全相同。我的下一個猜測是實時服務器的PHP配置,但我不知道PHP設置可能會導致此行爲。

的file_exists()函數總是返回true - 我檢查這個活的服務器上,它總是正確地拿起文件,它的大小等,所以它確實有該文件的句柄。它只是不會執行下載!

主要場地是一個WordPress網站,但是這個代碼是不是一個WordPress頁面的一部分 - 它在網站根目錄內一個獨立的目錄。

UPDATE:is_file()和is_readable()都爲文件返回true,所以這不是問題。導致問題的具體行是:

readfile($attachment_location) 

一切都一直持續到這一點是超級快樂。

+0

嘗試呼應的文件路徑,看看是否有在您的Live服務器的任何可疑 –

+1

也許你已經配置了討論您的apache sites-available config,拒絕用戶訪問。 PHP可能能夠看到該文件,但不能看到用戶。 – JorgeeFG

+1

如果file_exists()總是返回true,那麼執行「else」代碼路徑是不可能的。 –

回答

2

原來是一個文件大小問題。有問題的文件相當大(超過300MB) - 我試圖用一個較小的文件(〜1MB)替換它,並且所有內容都按預期工作。下一個障礙是嘗試讓服務器處理大文件!謝謝大家的幫助。

編輯:有很多關於ReadFile函數的極限,以及如何規避他們在readfile function page at php.net

4

僅僅因爲文件存在並不意味着你可以提供服務。它可能具有錯誤的權限,或者在其他內容寫入時被鎖定,甚至可能根本不是文件。 file_exists函數對目錄,符號鏈接等返回true。

你可能想看看使用is_file代替。你也可能想看看is_readable進行文件權限檢查。

+1

謝謝 - 我會嘗試is_file和is_readable並回報。文件權限被設置爲644 - 我認爲這樣做已經足夠了,但是會嘗試777才能100%確定 – Chris

+0

好吧 - is_file和is_readable都返回true。我也將權限設置爲777,但仍然沒有運氣!儘管感謝您的幫助 – Chris

相關問題