NearYou
@NearYou
PHP Developer

Как сделать, чтобы после ошибки в одной функции, следующие за ней продолжили работу?

Как сделать, чтобы после ошибки в одной функции, следующие за ней продолжили работу?
К примеру под спойлером две функции и если в первой возникает ошибка, выполнение кода прекращается, соответственно вторая уже не сработает. Что надо прописать, чтобы избежать этого и после ошибки в одном модуле, другие продолжили работу
spoiler
function xlsToCsv($fileXls)
{


    // Read the Excel file.
    try {
        $reader = IOFactory::createReader("Xls");
    } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
    }
    $reader->setReadDataOnly(true);
    $spreadsheet = $reader->load(__DIR__ . '/attach/' . $fileXls);
    $info = pathinfo($fileXls);

// Export to CSV file.
    try {
        $writer = IOFactory::createWriter($spreadsheet, "Csv");
    } catch (\PhpOffice\PhpSpreadsheet\Writer\Exception $e) {
    }
    $writer->setDelimiter(';');
    $writer->setEnclosure('"');
    $writer->setLineEnding("\r\n");
    $writer->setSheetIndex(0);


    $writer->save(safe_file(__DIR__ . "/files/" . $info['filename'] . '.csv'));


}

// конвертація великих Exel файлів в Csv
function xlsxToCsv($filesXlsx)
{
    ini_set('max_execution_time', 1900);
    // Read the Excel file.
    try {
        $reader = ReaderEntityFactory::createReaderFromFile(__DIR__ . '/attach/' . $filesXlsx);
    } catch (UnsupportedTypeException $e) {
    }

    $reader->setShouldFormatDates(true);
    try {
        $reader->open(__DIR__ . '/attach/' . $filesXlsx);
    } catch (IOException $e) {
    }

    $info = pathinfo($filesXlsx);

    // Export to CSV file.
    $writer = WriterEntityFactory::createCSVWriter();
    $writer->setShouldAddBOM(false);
    try {
        $writer->openToFile(safe_file(__DIR__ . "/files/" . $info['filename'] . '.csv'));
    } catch (IOException $e) {
    }


    // Set delimiter.
    $writer->setFieldDelimiter(";");

    try {
        foreach ($reader->getSheetIterator() as $sheet) {
            foreach ($sheet->getRowIterator() as $row) {
                // ... and copy each row into the new spreadsheet

                $writer->addRow($row);

            }
        }
    } catch (IOException $e) {
    } catch (ReaderNotOpenedException $e) {
    } catch (WriterNotOpenedException $e) {
    }


    $reader->close();
    $writer->close();
}


Вызываются так
spoiler
$dir = realpath(__DIR__ . '/attach');

$fileSPLObjects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);

foreach ($fileSPLObjects as $fullFileName => $fileSPLObject) {
    if ($fileSPLObject->isFile()) {
        $info = new SplFileInfo($fullFileName);
        if ($info->getExtension() === 'zip') {
            if (filesize($fullFileName) >= 10) {
                extractZip(basename($fullFileName));
            }
        }
    }
}
foreach ($fileSPLObjects as $fullFileName => $fileSPLObject) {
    if ($fileSPLObject->isFile()) {
        $info = new SplFileInfo($fullFileName);
        if ($info->getExtension() === 'xls') {
            if (filesize($fullFileName) >= 10) {
                xlsToCsv(basename($fullFileName));
            }
        }
    }
}
foreach ($fileSPLObjects as $fullFileName => $fileSPLObject) {
    if ($fileSPLObject->isFile()) {
        $info = new SplFileInfo($fullFileName);
        if ($info->getExtension() === 'xlsx') {
            if (filesize($fullFileName) >= 10) {
                xlsxToCsv(basename($fullFileName));
            }
        }
    }
}


Если я жестко натупил и наваял ересь, так и говорите, думаю вы понимаете, мой уровень - еще очень много учиться))
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 2
New_Horizons
@New_Horizons
Бред:
Каждый вызов функции обернуть в try catch по отдельности. Исключение ловить более высокого уровня (\Exception или \Throwable например).
Внутри функций куча try catch, в них вообще смысла нет.
Ответ написан
Комментировать
vitaly_74
@vitaly_74
или, попробуйте освоить такой паттерн как цепочка обязанностей. у меня собственно так оно и работает, длинный алгоритм разбит на несколько независимых функций, которые начинают работать при достижении какого то условия (например денежные средства зачислились).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы