Повторно отправить файл и заменить поток в подготовленной команде

Фактические данные получены через SQLSRV от отдельного SQL Server. Созданные программой учебные таблицы удалены после чтения.

Наблюдаемый результат программы
НаблюдениеРезультат
Позиция после подсчёта хеша46
Позиция после rewind0
Первая копияАкт №151-A: принято 3 линии.
Повторная копияАкт №151-A: принято 3 линии.
Заменённое вложениеАкт №151-B: принято 4 линии.
Обе отправки исходного файла совпалида
Связанная переменная приняла новый потокда
Строки и дополнительные наблюдения
{
    "first": {
        "filename": "original.txt",
        "is_null": false,
        "bytes": 46,
        "sha256": "74e8204960b2304c29fdb6ccdfcc2728d25e0de5e7bff4fad832c5a1a040bba9",
        "preview": "Акт №151-A: принято 3 линии.\n"
    },
    "copy": {
        "filename": "copy.txt",
        "is_null": false,
        "bytes": 46,
        "sha256": "74e8204960b2304c29fdb6ccdfcc2728d25e0de5e7bff4fad832c5a1a040bba9",
        "preview": "Акт №151-A: принято 3 линии.\n"
    },
    "replacement": {
        "filename": "replacement.txt",
        "is_null": false,
        "bytes": 46,
        "sha256": "e55fa56f9f65d0164230aca0775d66efe485ee2df6ce0adead0d2f4a14064441",
        "preview": "Акт №151-B: принято 4 линии.\n"
    },
    "after_hash_position": 46,
    "rewound_position": 0
}

При самостоятельном запуске рядом с example.php создаются result.json с данными и metrics.json с проверками.