2016-06-19 11 views
2

だから私はPHPスクリプトは、(たとえ終了後に実行を継続します)

  • は、リモートRESTサービスから〜70 XMLファイルを読み込み、比較的単純なPHPスクリプトを持っています。

  • 解析では、SimpleXMLElementクラス(多くの新しいSimpleXMLElement()呼び出し)を使用してXMLファイルを読み取ります。

  • 各配列にXMLファイルから関心のある属性がいくつかある連想配列を含むファイルjsonエンコードされた配列に出力します。

スクリプトの問題は、結果がファイルに出力されるよりもずっと後で終了することです。私は周りを見つけたが、そのような問題を引き起こす可能性のあるものは見つけられなかった。以下は私のスクリプトが何をしているのかを記述した簡単なコードです。

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(); 
} 

exit()に達すると、何らかの種類のガベージコレクションが発生する可能性がありますか?それらのXMLオブジェクトは比較的大きいです...また、私はWAMPスタックとPHP上でスクリプトを実行しようとしました、centos上で実行されているApache、問題はcentosマシンで発生しているようです。

答えて

0

この問題は、SimpleXML classによって発生しています。何が起こっているのかは分かりませんが、issue誰かがメモリリークを引き起こしていることがわかりましたので、問題を解決するDOMDocument classで動作するようにコードを書き直しました。

スクリプトが〜2分間ハングする前に、書き換え後13秒で完了します)

関連する問題