2016-06-19 4 views
2

Таким образом у меня есть относительно простой PHP скрипт, которыйPHP скрипт продолжает выполняться даже после выхода()

  • Считывает ~ 70 XML-файлы из удаленного сервиса отдыха;

  • Парсы читают XML-файлы с использованием класса SimpleXMLElement (многие новые вызовы SimpleXMLElement());

  • Вывод в файл json закодированного массива, который содержит ассоциативные массивы, в которых каждый массив имеет несколько атрибутов, представляющих интерес для этих XML-файлов.

Проблема со сценарием заключается в том, что он заканчивается намного позже, чем выводит результат в файл. Я googled вокруг, но не мог найти ничего, что могло бы вызвать такую ​​проблему. Ниже приведен упрощенный код, описывающий мой сценарий.

function parseFiles() 
{ 
    $fileData = array(); 
    $parsedData = array(); 

    // read files using curl, output is an array of SimpleXMLElements 
    readXMLFiles($fileData); 

    // for each XML object create an assoc array which contains attributes 
    // of interest, add it to $parsedData 
    parseData($fileData, $parsedData); 

    file_put_contents("test.txt", json_encode($parsedData)); 

    /* 
    This is where the problem occures, the scipt outputs result to the file 
    MUCH faster than it ends execution for example file is created with data 
    in ~ 15 seconds but the script ends in 60 seconds 
    (so the exit() command took 45 seconds????) 
    */ 
    exit(); 
} 

Может ли это быть вызвано какой-то сборкой мусора после выхода()? Эти объекты XML относительно велики ... Также я попытался запустить скрипт на стеке wamp, а на PHP, apache, запущенном на centos, проблема, похоже, происходит на компьютере centos.

ответ

0

Проблема была вызвана SimpleXML class. Не знаю, что происходит, но я столкнулся с issue, где кто-то обнаружил, что это вызывает утечку памяти, поэтому я переписал свой код для работы с DOMDocument class, который решает проблему.

Прежде чем сценарий будет висеть в течение ~ 2 минут, после перезаписи он завершается за 13 секунд;)

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