降低PHP脚本的内存使用量?

时间:2018-08-14 22:25:05

标签: php

所以我要从API端点获取数据,并将其添加到我已经有的CSV文件的末尾,然后重新编写CSV(这是必需的,因为以后需要为每个端点创建日志)从)。

我是PHP的新手,不太确定降低内存使用率的最佳方法。我环顾四周,但是什么都没有让我脱颖而出。

在下面的特定示例中,CSV文件中大约有100,000行。

按照运行脚本时的memory_get_usage的顺序,我得到了58982400、103546880、103546880。我想减少使用的内存。尝试减少使用的内存时,是否有任何提示或事情需要引起我的注意?看来正在使用1/2的内存来从端点获取数据,我认为对此用途我无能为力了?

来自CSV的数据基本上是

PersonId,FirstName,LastName,Gender

来自端点的数据是

PersonId,EmailAddress

这是我的剧本。

<?php
include('ApiClient.include.php');
$urlStudents = "http://localhost/jsonyes.json";
$crl = curl_init();
curl_setopt($crl, CURLOPT_URL, $urlStudents);
curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1);
$execCrl = curl_exec($crl);
$emails = json_decode($execCrl, true);
curl_close($crl);
$fp = fopen('turkeytest.csv', 'r');
$output = fopen("$emailFile", 'w');
$max = 0;
echo "Using GetUse ", memory_get_usage(True), " bytes of ram.";

foreach($emails as $email){
    if(!isset($eData[$email['PersonId']])){
        $eData[$email['PersonId']][] = $email['EmailAddress'];
    } else{
        $eData[$email['PersonId']][] = $email['EmailAddress'];
    }
    if(count($eData[$email['PersonId']]) > $max){
        $max = count($eData[$email['PersonId']]);
    }
} 
echo "Using GetUse ", memory_get_usage(True), " bytes of ram.";

while($row = fgetcsv($fp, ",")){
    $count = count($row);
    if(isset($eData[$row[0]])){
        foreach($eData[$row[0]] as $key => $value){
            $row[] = $value;
        }
    }
    $row = array_pad($row, $max+$count, '');
    fputcsv($output, $row); //writes array $datas to $output file
}
fclose($fp);
echo "Using GetUse ", memory_get_usage(True), " bytes of ram.";
?>

0 个答案:

没有答案