don't convert to xlsx, send as csv instead to prevent memory exhausting

This commit is contained in:
Roman Schenk 2026-05-17 16:02:18 +02:00
parent 3bbf1f8ddc
commit 60d70072b1
1 changed files with 35 additions and 38 deletions

View File

@ -1,7 +1,5 @@
<?php <?php
include "zefixAPI.php"; include "zefixAPI.php";
include "read_write_xlsx.php";
include "emailSender.php"; include "emailSender.php";
$maxExecutionTime = 120; $maxExecutionTime = 120;
@ -19,31 +17,48 @@ function doRequest($data, $filename, $username, $password)
{ {
$response = sendAPICompanySearchRequest($username, $password, $data); $response = sendAPICompanySearchRequest($username, $password, $data);
$responseObject = json_decode($response, true); $responseObject = json_decode($response, true);
if(array_key_exists("error", $responseObject)) { if(array_key_exists("error", $responseObject)) {
return false; return false;
} }
$companyArray = $responseObject['list']; $companyArray = $responseObject['list'];
$companyData = array(); $companyData = array();
foreach ($companyArray as $company) { foreach ($companyArray as $company) {
$companyFullData = json_decode(sendAPICompanyInfoRequest($username, $password, $company['uid']), true)[0]; $companyFullData = json_decode(sendAPICompanyInfoRequest($username, $password, $company['uid']), true)[0];
$companyData[] = [$companyFullData['name'], $companyFullData['address']['careOf'], $companyFullData['address']['street'], $companyFullData['address']['houseNumber'], $companyFullData['address']['swissZipCode'], $companyFullData['address']['city'],$companyFullData['uid'],$companyFullData['legalSeat'],$companyFullData['legalForm']['name']['de'],$companyFullData['status'],$companyFullData['sogcDate'],$companyFullData['deletionDate']]; $companyData[] = [
$companyFullData['name'],
$companyFullData['address']['careOf'],
$companyFullData['address']['street'],
$companyFullData['address']['houseNumber'],
$companyFullData['address']['swissZipCode'],
$companyFullData['address']['city'],
$companyFullData['uid'],
$companyFullData['legalSeat'],
$companyFullData['legalForm']['name']['de'],
$companyFullData['status'],
$companyFullData['sogcDate'],
$companyFullData['deletionDate']
];
} }
if (! file_exists($filename)) {
// If File doesn't exist yet if (!file_exists($filename)) {
$file = fopen($filename, 'w'); $file = fopen($filename, 'w');
if($file) { if($file) {
fputcsv($file, ['name', 'careOf', 'street', 'houseNumber', 'swissZipCode', 'city', 'uid', 'legalSeat', 'legalForm', 'status', 'sogcDate', 'deletionDate'], ',', '"', "\\"); fputcsv($file, ['name', 'careOf', 'street', 'houseNumber', 'swissZipCode', 'city', 'uid', 'legalSeat', 'legalForm', 'status', 'sogcDate', 'deletionDate'], ',', '"', "\\");
} }
} else { } else {
// If file already exists
$file = fopen($filename, 'a'); $file = fopen($filename, 'a');
} }
if ($file) { if ($file) {
foreach ($companyData as $row){ foreach ($companyData as $row){
fputcsv($file, $row, ',', '"', "\\"); fputcsv($file, $row, ',', '"', "\\");
} }
fclose($file); fclose($file);
} }
if($responseObject['hasMoreResults']) { if($responseObject['hasMoreResults']) {
return $responseObject['maxOffset'] + 50; return $responseObject['maxOffset'] + 50;
} else { } else {
@ -51,63 +66,45 @@ function doRequest($data, $filename, $username, $password)
} }
} }
// Stop executing bevore reaching PHP Max Execution Time
function convertcsvToXlsx(string $csvFile, string $xlsxFile)
{
$csvData = [];
if (($handle = fopen($csvFile, "r")) !== false) {
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
$csvData[] = $data;
}
fclose($handle);
} else {
echo "Failed to open $csvFile for reading.";
}
write_xlsxFile($xlsxFile, $csvData);
}
while($latesEndTime - time() > 30){ while($latesEndTime - time() > 30){
// If the directory for Tasks is already created
if(is_dir($taskDir)) { if(is_dir($taskDir)) {
$taskfiles = scandir($taskDir); $taskfiles = scandir($taskDir);
$taskfiles = array_diff($taskfiles, array('.', '..')); $taskfiles = array_diff($taskfiles, array('.', '..'));
sort($taskfiles); sort($taskfiles);
// if there are any taks which are older then min oldness. To be sure the file writing process is finished.
if(count($taskfiles) > 0 && intval(explode("-", $taskfiles[0])[0]) + $minTaskOldness < time()) { if(count($taskfiles) > 0 && intval(explode("-", $taskfiles[0])[0]) + $minTaskOldness < time()) {
$taskString = file_get_contents($taskDir.'/'.$taskfiles[0]); $taskString = file_get_contents($taskDir.'/'.$taskfiles[0]);
$task = json_decode($taskString, true); $task = json_decode($taskString, true);
// if there are any requests to do, do the first
if(count($task['requests']) > 0) { if(count($task['requests']) > 0) {
$nextOffset = doRequest($task['requests'][0], str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]), $username , $password); $csvFile = str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]);
$nextOffset = doRequest($task['requests'][0], $csvFile, $username, $password);
if($nextOffset){ if($nextOffset){
$task['requests'][0]['offset'] = $nextOffset; $task['requests'][0]['offset'] = $nextOffset;
} else { } else {
array_shift($task['requests']); array_shift($task['requests']);
} }
$taskString = json_encode($task); $taskString = json_encode($task);
$taskfile = fopen($taskDir.'/'.$taskfiles[0], 'w'); $taskfile = fopen($taskDir.'/'.$taskfiles[0], 'w');
if($taskfile){ if($taskfile){
fwrite($taskfile, $taskString); fwrite($taskfile, $taskString);
fclose($taskfile); fclose($taskfile);
} }
} } else {
// if there are no Requests left, send the E-Mail $csvFile = str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]);
else {
convertcsvToXlsx(str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]), str_replace(".json", ".xlsx", $downloadDir.'/'.$taskfiles[0]));
unlink(str_replace(".json", ".csv", $downloadDir.'/'.$taskfiles[0]));
unlink($taskDir.'/'.$taskfiles[0]); unlink($taskDir.'/'.$taskfiles[0]);
echo "Task File deleted"; echo "Task File deleted";
echo "<br>"; echo "<br>";
sendEmail($task['email'], str_replace(".json", ".xlsx", $downloadDir.'/'.$taskfiles[0]), $smtppassword);
sendEmail($task['email'], $csvFile, $smtppassword);
} }
} else { } else {
// acutal Time - start time
echo "nothing to do after: ".strval(time() - ($latesEndTime - $maxExecutionTime)); echo "nothing to do after: ".strval(time() - ($latesEndTime - $maxExecutionTime));
echo "sleeping 10 seconds"; echo "sleeping 10 seconds";
echo "<br>"; echo "<br>";
@ -116,4 +113,4 @@ while($latesEndTime - time() > 30){
} }
} }
?> ?>