2013-07-23 58 views
4

當使用fopen(「php:// input」)上傳一個120MB文件時,我們得到了來自php的「內存耗盡」警告。 php memory_limit被設置爲256MB,我們有足夠的內存可用。內存耗盡使用php://輸入

我們刪除了除fopen(「php:// input」)以外的所有代碼,但它仍然失敗,所以錯誤必須存在。

我們嘗試了不同的內存限制,在大約500MB時,錯誤消失。不過,我們真的不應該使用500MB,所以問題仍然存在:爲什麼我們在115-120MB大小的文件上使用fopen來獲得內存耗盡錯誤。

我們的PHP的測試文件:

<?php 
    $inputHandler = fopen('php://input', "r"); 
?> 

和錯誤:

262144000 bytes exhausted (tried to allocate 120829495 bytes) 

我希望有人能幫助我們。這讓我們生氣了!

在此先感謝!

+0

你不應該只在從$ inputHandler讀取時在fopen()上得到這個錯誤 –

+0

你的fopen處理程序不是唯一使用你的PHP內存的東西。在嘗試將大文件加載到內存之前,使用'memory_get_usage()'來查看已經使用了多少內存。 – aynber

+0

@MarkBaker這就是我們也想到的,但這是唯一的代碼行,它崩潰了。當我們觀察httpd進程時,我們可以看到文件上傳時內存在上升,但從未超過130MB。 –

回答

0

嘗試配置到無限的內存使用情況:

ini_set('memory_limit', '-1'); 
+0

這是沒有選擇。我們不應該使用超過256MB –

0

這可能是因爲PHP是試圖自動解析POST數據。 要禁用此功能,請在php版本5.4+中將enable_post_data_reading設置爲0.(我爲此使用了.htaccess) 但實際上,在php 5.4+中,最好使用$ _FILES上傳...