所以我要从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.";
?>