PHP版本5.2.17PHP:下載的二進制文件獲取在最後一個額外的字節(0X0A)
我有下載的二進制文件下面的PHP腳本:用來調用
<?php
$download_dir = '.';
$download_file = $_GET['get'];
$path = $download_dir.'/'.$download_file;
if(file_exists($path))
{
$size = filesize($path);
header('Content-Type: application/x-download');
header('Content-Disposition: attachment; filename='.$download_file);
header('Content-Length: '.$size);
header('Content-Transfer-Encoding: binary');
readfile($path);
}else{
echo "<font face=$textfont size=3>";
echo "<center><br><br>The file [<b>$download_file</b>] is not available for download.<br>";
}
?>
網址這個腳本:
正在下載作品,但下載的文件附加了一個附加字節(0x0a)。
響應的報頭還示出了內容長度是一個字節比所請求的文件的大小較大的:
HTTP/1.1 200 OK
Date: Mon, 05 Dec 2011 10:29:32 GMT
Server: Apache/2.2
Content-Disposition: attachment; filename=FooBar_Setup.exe
Content-Length: 1417689
Content-Transfer-Encoding: binary
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/x-download
在服務器上的文件的大小是字節。
我已覈實filesize($path)
返回正確的文件大小。 PHP似乎改變了內容長度標頭filesize($path)+1
。
我看到這種行爲與兩個不同的文件。
如何獲得將0x0a附加到已下載的二進制文件的預覽信息?
您應該清理該文件名。人們可以使用該腳本下載他們想要的任何文件(包括腳本本身)。 –
嘗試刪除?>或在readfile()函數後添加exit語句。 –
@SebastianPaaskeTørholm非常大的+1。這麼大,我覺得只是點擊+1不足以說明這一點有多重要。 – DaveRandom