最終目標是讓用戶下載.csv文件。現在我只是測試下載一個簡單的文本文件:test.txt。這個文件中唯一的東西是「測試」一詞。使用PHP強制下載文件並提供空文件
這裏是files_to_download.php
Test file: <a href='test.php?file=test.txt'>Test.txt</a>
代碼的HTML代碼test.php的:
if(!(empty($_GET["file"])))
{
$file_name = $_GET["file"];
$path = "path/to/file";
$fullPath = $path . $file_name;
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: inline; attachment; filename=\"$file_name\"");
header("Content-Type: text/plain");
header("Content-Transfer-Encoding: binary");
readfile($fullPath);
}
我已經嘗試了上述標題的變化,增加更多的和刪除等。以上似乎是這個網站上最常見的推薦。
我也試着改變
header("Content-Type: text/plain");
到
header("Content-Type: text/csv");
,並得到相同的結果:空的.txt或.csv文件。
當我從服務器直接打開它們(文件瀏覽器)時,這些文件不是空的。我已經檢查過這些文件的權限,它們都是644,所以整個世界至少可以讀取這些文件。該目錄是777.
是否有Apache服務器上的配置,我需要指定可能不是或我缺少上面的東西。
感謝您的期待!
你應該檢查'$ fullPath'並確保它是你想要的路徑。在你的例子中,'$ fullPath'是'「path/to/filetest.txt」'而不是''path/to/file/test.txt「'。 – Umang 2010-08-25 07:52:28
如果你用'echo'foo''替換'readfile($ fullPath)'',那麼代碼就可以正常工作,所以我正在爲路徑問題投票。 – cbednarski 2010-08-25 08:01:02