2013-07-23 1 views
4

При использовании fopen ("php: // input") для загрузки файла с 120 МБ мы получаем предупреждение об «исчерпании памяти» из php. Php memory_limit установлен на 256 МБ, и у нас достаточно памяти.Память, израсходованная с помощью php: // input

Мы удалили весь код, кроме fopen ("php: // input"), и он все еще не работает, поэтому ошибка должна быть там.

Мы пробовали разные пределы памяти и около 500 МБ ошибка исчезает. Тем не менее, мы действительно не должны использовать 500 МБ, поэтому остается вопрос: почему мы получаем ошибку исчерпанной памяти, используя fopen в файле размером 115-120 МБ.

Наш PHP тест-файл:

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

И ошибка:

262144000 bytes exhausted (tried to allocate 120829495 bytes) 

Я надеюсь, что кто-то может помочь нам. Это сводит нас с ума!

Заранее благодарен!

+0

Вы не должны получать эту ошибку в fopen() только при чтении из $ inputHandler –

+0

Ваш обработчик fopen - это не единственное, что использует вашу память PHP. Используйте 'memory_get_usage()', чтобы узнать, сколько памяти уже используется, прежде чем пытаться загрузить огромный файл в память. – aynber

+0

@MarkBaker Это то, что мы также думали, но это единственная строка кода и она рушится на этом. Когда мы наблюдаем процессы httpd, мы видим, что память растет, когда файл загружается, но он никогда не становится выше 130 МБ. –

ответ

0

Попробуйте настроить неограниченное использование памяти:

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

Это не вариант. Мы не должны использовать более 256 МБ –

0

Это может быть потому, что PHP пытается автоматически анализировать данные POST. Чтобы отключить это, в PHP версии 5.4+ вы можете установить enable_post_data_reading 0. (я использовал .htaccess для этой цели) Но, на самом деле, в PHP 5.4+, лучше использовать $ _FILES для загрузки ...

Смежные вопросы