2013-07-09 105 views
3

我在$ _FILES [「文件」] [「大小」]> 2 GB文件上傳負數。

但是,文件上傳正常並且文件大小()也會返回正確的大小。但如何解決$ _FILES返回正確的值?

我已經閱讀了一些老版本的php的問題,他們在返回負數時在filesize()方面也有錯誤,但現在看起來很好。他們忘了修正$ _FILES嗎?你不知道,如果它固定在PHP 5.5.0?

PHP:5.4.16 OS:Debian的擠壓6.0.7 64 Web服務器:Nginx的1.2.7

+1

'sprintf('%u',$ _FILES ['file'] ['size'])''給出了什麼? –

+3

請參閱https://bugs.php.net/bug.php?id=44522 – Maerlyn

+0

建議您使用FTP功能。 –

回答

4

不管問題是什麼,你也許可以解決它高達4GB的是這樣的:

$file_size = $_FILES["file"]["size"]; 
$true_size = $file_size >= 0 ? $file_size : 4*1024*1024*1024 + $file_size; 

但是,如您所說,filesize($_FILES["file"]["tmp_name"]);是最安全的方式(也將工作在4GB以上)。

+4

確實。這個錯誤是由於大小被存儲在一個有符號的32位整數。最大可存儲值爲2^31(32位減去符號位)。當值溢出時,符號位被設置並且大小變爲負值。 Walter給出的技巧通過利用int符號來模擬正確的行爲,並且它是向前兼容的。 – thibauts

+0

感謝您的回覆。我想我以文件大小($ _ FILES [「file」] [「tmp_name」])結束;這工作正常。 –