Статические кеши функций, которые не очищаются в PHP 5.3.28?

Я использую SimplePie с PHP 5.2.17 для анализа своих RSS-каналов через плагин WordPress feedwordpress. Это работает хорошо и без проблем, если я обязательно использую этот патч к Simplepie (в файле IRI.php).

Однако, если я изменю свой PHP на использование версии 5.3.28 - начнется утечка памяти (или какая-то другая утечка памяти), и мой сайт выйдет из строя. Любая идея, что может быть причиной этого / как это решить?

(или, другими словами, есть ли причина этот патч должен работать в 5.2, а не в PHP 5.3?)

Спасибо.


person Tal Galili    schedule 20.12.2014    source источник
comment
патч выглядит чистым для меня, что журнал ошибок говорит о вашем сбое?   -  person Gowri    schedule 22.12.2014
comment
Спасибо, Гоури. Я использую управляемый VPS, поэтому у меня нет доступа ко всем журналам. Какие журналы ошибок я должен запросить? (Я проверил на FTP, и там не было файла error_logs, который мне показался подходящим)   -  person Tal Galili    schedule 22.12.2014


Ответы (1)


PHP 5.3 не имеет полной обратной совместимости с PHP 5.2,

В вашем случае использование clearstatcache(), вероятно, является причиной утечки памяти.

Как видно из раздела Миграция с PHP 5.2.x на PHP 5.3.x документ:

clearstatcache() больше не очищает кеш реального пути по умолчанию.

Эту проблему можно устранить, явно установив для параметра $clear_realpath_cache значение true.

clearstatcache(true)
person Uri Goren    schedule 22.12.2014
comment
Ури, очень интересно! Где я должен включить этот код? (в IRI.php? в начале/или где-то еще?) - person Tal Galili; 22.12.2014
comment
@TalGalili Я бы предложил включить его непосредственно в исходный код SimplePie. ☺ (Я думал о том, чтобы сделать ссылку на их исходный код отсюда, и тут я нашел вашу недавнюю активность по их проблемам на Github…) - person Tomer Cohen; 23.12.2014
comment
@TomerCohen - с удовольствием. Но куда оно должно идти? - person Tal Galili; 23.12.2014
comment
Добавление этой строки в деструктор в SimplePie_IRI должно помочь - person Uri Goren; 23.12.2014
comment
Спасибо Ури. Просто чтобы быть уверенным, вы хотите добавить его в начало __destruct() ? И будет ли он совместим с PHP 5.2? - person Tal Galili; 23.12.2014
comment
Я бы поместил его в конец функции __destruct(), PHP 5.2 по умолчанию очищает кеш реального пути, поэтому это не должно иметь никакого эффекта. - person Uri Goren; 23.12.2014